Files
atalaya/src/utils/maintenance.test.ts

51 lines
2.2 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { isInMaintenance, MaintenanceWindow } from './maintenance';
function utc(date: string) {
// Shortcut for Date creation
return new Date(date);
}
describe('isInMaintenance', () => {
it('returns false when maintenance undefined or empty', () => {
expect(isInMaintenance(undefined, utc('2026-05-01T10:00:00Z'))).toBe(false);
expect(isInMaintenance([], utc('2026-05-01T10:00:00Z'))).toBe(false);
});
it('includes and excludes at precise boundaries', () => {
const mw: MaintenanceWindow[] = [
{ start: '2026-05-01T10:00:00Z', end: '2026-05-01T12:00:00Z' },
];
expect(isInMaintenance(mw, utc('2026-05-01T09:59:59Z'))).toBe(false);
expect(isInMaintenance(mw, utc('2026-05-01T10:00:00Z'))).toBe(true); // start boundary, inclusive
expect(isInMaintenance(mw, utc('2026-05-01T11:59:59Z'))).toBe(true);
expect(isInMaintenance(mw, utc('2026-05-01T12:00:00Z'))).toBe(false); // end boundary, exclusive
});
it('handles overlapping windows', () => {
const mw: MaintenanceWindow[] = [
{ start: '2026-05-01T10:00:00Z', end: '2026-05-01T11:00:00Z' },
{ start: '2026-05-01T10:30:00Z', end: '2026-05-01T11:30:00Z' },
];
expect(isInMaintenance(mw, utc('2026-05-01T10:45:00Z'))).toBe(true);
expect(isInMaintenance(mw, utc('2026-05-01T11:15:00Z'))).toBe(true);
expect(isInMaintenance(mw, utc('2026-05-01T11:30:00Z'))).toBe(false);
});
it('ignores malformed windows (should not reach here)', () => {
// A test for the future if parser passes bad data. Should stay false.
const mw = [{ start: 'bad', end: 'also-bad' }] as any;
expect(isInMaintenance(mw, utc('2026-05-01T10:00:00Z'))).toBe(false);
});
it('prefers the first valid match if multiple windows overlap', () => {
const mw: MaintenanceWindow[] = [
{ start: '2026-05-01T08:00:00Z', end: '2026-05-01T11:00:00Z' },
{ start: '2026-05-01T10:00:00Z', end: '2026-05-01T12:00:00Z' },
];
expect(isInMaintenance(mw, utc('2026-05-01T09:00:00Z'))).toBe(true);
expect(isInMaintenance(mw, utc('2026-05-01T11:00:00Z'))).toBe(true);
expect(isInMaintenance(mw, utc('2026-05-01T12:01:00Z'))).toBe(false);
});
});