Files
davisfe.cz/scripts/__tests__/calculations.test.ts
T

71 lines
2.4 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { calculateLakeMetrics, LakeCalculationConfig } from '../utils/calculations';
describe('calculateLakeMetrics', () => {
const config: LakeCalculationConfig = {
minLevel: 100,
maxLevel: 110,
storageLevel: 108,
maxVolume: 50,
};
it('should calculate capacity based on reported volume when available', () => {
// 25 / 50 = 50%
const result = calculateLakeMetrics(105, 25, config);
expect(result.capacity).toBe(50);
expect(result.volume).toBe(25);
});
it('should cap capacity at 100% when volume exceeds maxVolume', () => {
const result = calculateLakeMetrics(111, 55, config);
expect(result.capacity).toBe(100);
expect(result.volume).toBe(55);
});
it('should floor capacity at 0% when volume is negative', () => {
const result = calculateLakeMetrics(99, -5, config);
expect(result.capacity).toBe(0);
expect(result.volume).toBe(-5);
});
it('should estimate capacity and volume from level when reported volume is 0', () => {
// Level 105 is exactly halfway between 100 and 110 -> 50%
// 50% of 50 maxVolume = 25
const result = calculateLakeMetrics(105, 0, config);
expect(result.capacity).toBe(50);
expect(result.volume).toBe(25);
});
it('should cap estimated capacity at 100% when level exceeds maxLevel', () => {
const result = calculateLakeMetrics(115, 0, config);
expect(result.capacity).toBe(100);
expect(result.volume).toBe(50); // 100% of 50
});
it('should floor estimated capacity at 0% when level is below minLevel', () => {
const result = calculateLakeMetrics(90, 0, config);
expect(result.capacity).toBe(0);
expect(result.volume).toBe(0); // 0% of 50
});
it('should correctly calculate storageDiff', () => {
const result = calculateLakeMetrics(106, 25, config);
// 106 - 108 = -2.00
expect(result.storageDiff).toBe(-2);
});
it('should calculate positive storageDiff when above storageLevel', () => {
const result = calculateLakeMetrics(109, 25, config);
// 109 - 108 = 1.00
expect(result.storageDiff).toBe(1);
});
it('should handle missing config gracefully', () => {
const emptyConfig: LakeCalculationConfig = {};
const result = calculateLakeMetrics(105, 0, emptyConfig);
expect(result.capacity).toBe(0);
expect(result.volume).toBe(0);
expect(result.storageDiff).toBe(0);
});
});