Files
esports/src/lib/availability.test.ts

30 lines
1.0 KiB
TypeScript

import { describe, expect, test } from 'vitest';
import { hoursToRanges, rangesToHours, isTimezone } from './availability';
describe('availability', () => {
test('round trips split windows and midnight', () => {
const hours = [0, 1, 9, 10, 18, 19, 20, 22, 23];
expect(rangesToHours(hoursToRanges(hours))).toEqual(hours);
});
test('supports an overnight range and deduplicates overlaps', () => {
expect(
rangesToHours([
{ start: '22:00', end: '02:00' },
{ start: '23:00', end: '01:00' }
])
).toEqual([0, 1, 22, 23]);
});
test('no ranges means no preference', () => {
expect(rangesToHours([])).toEqual([]);
});
test('rejects malformed times and ambiguous full-day ranges', () => {
for (const start of ['18:30', '24:00', '-1:00', 'abc', '18:00'])
expect(() => rangesToHours([{ start, end: '18:00' }])).toThrow();
});
test('validates IANA time zones', () => {
expect(isTimezone('Europe/Amsterdam')).toBe(true);
expect(isTimezone('UTC')).toBe(true);
expect(isTimezone('Mars/Olympus')).toBe(false);
});
});