Files
dashboard-cpsp-executive/utils/__tests__/weight.test.ts
T
2026-09-08 15:21:23 +07:00

44 lines
1.5 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { weightStandardData } from '../../mockData/weightStandardData.ts';
import { getTargetGainForAge, getTargetWeightForAge } from '../weight.ts';
function rowForDoc(docWeight: number) {
return weightStandardData.data.find((row) => row.day === docWeight)!;
}
describe('getTargetWeightForAge', () => {
it('uses the exact DOC-weight row and age column', () => {
const row = rowForDoc(42);
expect(getTargetWeightForAge(1, 42)).toBe(row.values[0]);
expect(getTargetWeightForAge(35, 42)).toBe(row.values[34]);
});
it('clamps below-range DOC weight to the 35 g row', () => {
const row = rowForDoc(35);
expect(getTargetWeightForAge(7, 20)).toBe(row.values[6]);
expect(getTargetWeightForAge(7, 30)).toBe(row.values[6]);
});
it('clamps above-range DOC weight to the 51 g row', () => {
const row = rowForDoc(51);
expect(getTargetWeightForAge(7, 52)).toBe(row.values[6]);
expect(getTargetWeightForAge(7, 60)).toBe(row.values[6]);
});
it('returns null for ages outside 1..35', () => {
expect(getTargetWeightForAge(0, 42)).toBeNull();
expect(getTargetWeightForAge(36, 42)).toBeNull();
});
});
describe('getTargetGainForAge', () => {
it('returns day-over-day delta from the DOC-weight row', () => {
const row = rowForDoc(40);
expect(getTargetGainForAge(2, 40)).toBe(row.values[1]! - row.values[0]!);
});
it('returns null for age 1', () => {
expect(getTargetGainForAge(1, 40)).toBeNull();
});
});