42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import type { ElectricMonthGroup } from '../types';
|
|
import { summarizeElectricMonths } from './model';
|
|
|
|
test('electric daily summary preserves totals, active-day and 30 percent boundaries', () => {
|
|
const months: ElectricMonthGroup[] = [
|
|
{
|
|
month: '2026-08',
|
|
kwh: 150,
|
|
fee: 75,
|
|
rows: [
|
|
{ date: '2026-08-01', kwh: 100, fee: 50, chainPct: 0.3 },
|
|
{ date: '2026-08-02', kwh: 50, fee: 25, chainPct: -0.29 },
|
|
{ date: '2026-08-03', kwh: 0, fee: 0, chainPct: -1 },
|
|
],
|
|
},
|
|
];
|
|
|
|
assert.deepEqual(summarizeElectricMonths(months), {
|
|
totalKwh: 150,
|
|
totalFee: 75,
|
|
activeDays: 2,
|
|
abnormalDays: 2,
|
|
avgKwh: 75,
|
|
avgPrice: 0.5,
|
|
hasFeeDetail: true,
|
|
});
|
|
});
|
|
|
|
test('electric daily summary preserves empty and missing-fee fallbacks', () => {
|
|
assert.deepEqual(summarizeElectricMonths(null), {
|
|
totalKwh: 0,
|
|
totalFee: 0,
|
|
activeDays: 0,
|
|
abnormalDays: 0,
|
|
avgKwh: 0,
|
|
avgPrice: 0,
|
|
hasFeeDetail: false,
|
|
});
|
|
});
|