83 lines
2.2 KiB
TypeScript
83 lines
2.2 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { buildEndCycleRollups, type DashboardInsightMetrics } from '../insightContextBuilders.ts';
|
|
|
|
const baseMetrics = (): DashboardInsightMetrics => ({
|
|
hari_ke: 21,
|
|
fcr: 1.45,
|
|
eef: 280,
|
|
ayam_hidup_ekor: 9000,
|
|
mortalitas_kumulatif_persen: 4.2,
|
|
bobot_avg_gram: 900,
|
|
doc_in_ekor: 10000,
|
|
kematian_kumulatif_ekor: 420,
|
|
panen_kumulatif_ekor: 0,
|
|
tonase_panen_kg: 0,
|
|
uniformity_persen: 78,
|
|
pakan_kumulatif_karung: 400,
|
|
weightSeries: [],
|
|
kpiSeries: [
|
|
{
|
|
hari: 7,
|
|
fcr: 0.9,
|
|
eef: null,
|
|
ayam_hidup_ekor: 9800,
|
|
mortalitas_kumulatif_persen: 1.5,
|
|
bobot_avg_gram: 180,
|
|
kematian_kumulatif_ekor: 150,
|
|
panen_kumulatif_ekor: 0,
|
|
tonase_panen_kg: 0,
|
|
uniformity_persen: 85,
|
|
pakan_kumulatif_karung: 80,
|
|
},
|
|
{
|
|
hari: 14,
|
|
fcr: 1.1,
|
|
eef: null,
|
|
ayam_hidup_ekor: 9600,
|
|
mortalitas_kumulatif_persen: 3.0,
|
|
bobot_avg_gram: 450,
|
|
kematian_kumulatif_ekor: 300,
|
|
panen_kumulatif_ekor: 0,
|
|
tonase_panen_kg: 0,
|
|
uniformity_persen: 82,
|
|
pakan_kumulatif_karung: 180,
|
|
},
|
|
{
|
|
hari: 21,
|
|
fcr: 1.45,
|
|
eef: null,
|
|
ayam_hidup_ekor: 9000,
|
|
mortalitas_kumulatif_persen: 4.2,
|
|
bobot_avg_gram: 900,
|
|
kematian_kumulatif_ekor: 420,
|
|
panen_kumulatif_ekor: 0,
|
|
tonase_panen_kg: 0,
|
|
uniformity_persen: 78,
|
|
pakan_kumulatif_karung: 400,
|
|
},
|
|
],
|
|
});
|
|
|
|
describe('buildEndCycleRollups', () => {
|
|
it('builds weekly mortality deltas and phase buckets', () => {
|
|
const rollups = buildEndCycleRollups(baseMetrics(), [
|
|
{
|
|
date: '2026-01-05',
|
|
hari: 5,
|
|
avg_temp_C: 28,
|
|
avg_humidity_pct: 60,
|
|
sample_count: 10,
|
|
hours_temp_below: 8,
|
|
hours_humidity_above: 0,
|
|
},
|
|
]);
|
|
|
|
expect(rollups.weekly_summaries).toHaveLength(3);
|
|
expect(rollups.weekly_summaries[0]?.mortalitas_delta_persen).toBe(1.5);
|
|
expect(rollups.weekly_summaries[1]?.mortalitas_delta_persen).toBe(1.5);
|
|
expect(rollups.weekly_summaries[0]?.jam_suhu_di_bawah_standar).toBe(8);
|
|
expect(rollups.phase_summaries.brooding?.mortalitas_delta_persen).toBe(3);
|
|
expect(rollups.mati_ekor).toBe(420);
|
|
});
|
|
});
|