Files
dashboard/tests/scaleDataProcessor.test.ts
Alberto-Audrix 32a36cceff
CI / lint-and-test (push) Canceled after 0s
first commit
2026-07-28 08:55:05 +07:00

83 lines
2.4 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { calculateDailyWeightGain, processDailyWeightData } from '../utils/scaleDataProcessor.ts';
import { ScalePredictionRangeResponse } from '../types.ts';
describe('scaleDataProcessor', () => {
it('derives day labels from the cycle date and skips points beyond totalDays', () => {
const cycleStartDate = new Date('2026-05-22T00:00:00');
const scaleData: ScalePredictionRangeResponse = {
success: true,
data: [
{
date: '2026-05-22',
items: [
{
id: 'p1',
cage_name: 'Kandang A',
age: 1,
total_weight_prediction: 0,
total_weight_actual: 500,
avg_weight_prediction: 0,
avg_weight_actual: 50,
chicken_count: 10,
captured_at: '2026-05-22T00:00:00Z',
image_url: '',
device: 'dev-1',
},
],
},
{
date: '2026-05-23',
items: [
{
id: 'p2',
cage_name: 'Kandang A',
age: 99,
total_weight_prediction: 0,
total_weight_actual: 600,
avg_weight_prediction: 0,
avg_weight_actual: 60,
chicken_count: 10,
captured_at: '2026-05-23T00:00:00Z',
image_url: '',
device: 'dev-1',
},
],
},
{
date: '2026-07-11',
items: [
{
id: 'p3',
cage_name: 'Kandang A',
age: 51,
total_weight_prediction: 0,
total_weight_actual: 1200,
avg_weight_prediction: 0,
avg_weight_actual: 120,
chicken_count: 10,
captured_at: '2026-07-11T00:00:00Z',
image_url: '',
device: 'dev-1',
},
],
},
],
};
const dailyWeight = processDailyWeightData(scaleData, cycleStartDate, 42);
expect(dailyWeight).toHaveLength(2);
expect(dailyWeight.map((point) => point.day)).toEqual([1, 2]);
expect(dailyWeight.find((point) => point.day === 2)?.date).toBe('2026-05-23');
const dailyGain = calculateDailyWeightGain(dailyWeight);
expect(dailyGain).toHaveLength(1);
expect(dailyGain[0]).toMatchObject({
day: 2,
gain: 10,
date: '2026-05-23',
});
});
});