Files
gridpilot.gg/core/racing/domain/value-objects/ScheduledRaceSlot.test.ts
2025-12-17 01:23:09 +01:00

65 lines
3.1 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { ScheduledRaceSlot } from './ScheduledRaceSlot';
import { LeagueTimezone } from './LeagueTimezone';
describe('ScheduledRaceSlot', () => {
it('should create scheduled race slot', () => {
const timezone = LeagueTimezone.create('America/New_York');
const scheduledAt = new Date('2023-10-01T12:00:00Z');
const slot = new ScheduledRaceSlot({
roundNumber: 1,
scheduledAt,
timezone,
});
expect(slot.roundNumber).toBe(1);
expect(slot.scheduledAt).toBe(scheduledAt);
expect(slot.timezone).toBe(timezone);
});
it('should throw if roundNumber not positive integer', () => {
const timezone = LeagueTimezone.create('UTC');
const scheduledAt = new Date();
expect(() => new ScheduledRaceSlot({ roundNumber: 0, scheduledAt, timezone })).toThrow('ScheduledRaceSlot.roundNumber must be a positive integer');
expect(() => new ScheduledRaceSlot({ roundNumber: -1, scheduledAt, timezone })).toThrow('ScheduledRaceSlot.roundNumber must be a positive integer');
expect(() => new ScheduledRaceSlot({ roundNumber: 1.5, scheduledAt, timezone })).toThrow('ScheduledRaceSlot.roundNumber must be a positive integer');
});
it('should throw if scheduledAt not valid Date', () => {
const timezone = LeagueTimezone.create('UTC');
expect(() => new ScheduledRaceSlot({ roundNumber: 1, scheduledAt: new Date('invalid'), timezone })).toThrow('ScheduledRaceSlot.scheduledAt must be a valid Date');
});
it('should equal same slots', () => {
const timezone1 = LeagueTimezone.create('Europe/London');
const timezone2 = LeagueTimezone.create('Europe/London');
const date1 = new Date('2023-05-15T10:00:00Z');
const date2 = new Date('2023-05-15T10:00:00Z');
const s1 = new ScheduledRaceSlot({ roundNumber: 2, scheduledAt: date1, timezone: timezone1 });
const s2 = new ScheduledRaceSlot({ roundNumber: 2, scheduledAt: date2, timezone: timezone2 });
expect(s1.equals(s2)).toBe(true);
});
it('should not equal different round numbers', () => {
const timezone = LeagueTimezone.create('UTC');
const date = new Date();
const s1 = new ScheduledRaceSlot({ roundNumber: 1, scheduledAt: date, timezone });
const s2 = new ScheduledRaceSlot({ roundNumber: 2, scheduledAt: date, timezone });
expect(s1.equals(s2)).toBe(false);
});
it('should not equal different dates', () => {
const timezone = LeagueTimezone.create('UTC');
const s1 = new ScheduledRaceSlot({ roundNumber: 1, scheduledAt: new Date('2023-01-01'), timezone });
const s2 = new ScheduledRaceSlot({ roundNumber: 1, scheduledAt: new Date('2023-01-02'), timezone });
expect(s1.equals(s2)).toBe(false);
});
it('should not equal different timezones', () => {
const timezone1 = LeagueTimezone.create('UTC');
const timezone2 = LeagueTimezone.create('EST');
const date = new Date();
const s1 = new ScheduledRaceSlot({ roundNumber: 1, scheduledAt: date, timezone: timezone1 });
const s2 = new ScheduledRaceSlot({ roundNumber: 1, scheduledAt: date, timezone: timezone2 });
expect(s1.equals(s2)).toBe(false);
});
});