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); }); });