refactor
This commit is contained in:
112
core/racing/domain/value-objects/SeasonSchedule.test.ts
Normal file
112
core/racing/domain/value-objects/SeasonSchedule.test.ts
Normal file
@@ -0,0 +1,112 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
|
||||
import {
|
||||
RacingDomainValidationError,
|
||||
} from '../errors/RacingDomainError';
|
||||
|
||||
import { SeasonSchedule } from './SeasonSchedule';
|
||||
import { RaceTimeOfDay } from './RaceTimeOfDay';
|
||||
import { LeagueTimezone } from './LeagueTimezone';
|
||||
import { RecurrenceStrategyFactory } from './RecurrenceStrategy';
|
||||
import { WeekdaySet } from './WeekdaySet';
|
||||
import { MonthlyRecurrencePattern } from './MonthlyRecurrencePattern';
|
||||
|
||||
describe('SeasonSchedule', () => {
|
||||
const timeOfDay = RaceTimeOfDay.fromString('20:00');
|
||||
const timezone = LeagueTimezone.create('Europe/Berlin');
|
||||
const startDate = new Date('2024-01-01');
|
||||
|
||||
it('creates a valid schedule with weekly recurrence', () => {
|
||||
const recurrence = RecurrenceStrategyFactory.weekly(WeekdaySet.fromArray(['Mon', 'Wed', 'Fri']));
|
||||
const schedule = new SeasonSchedule({
|
||||
startDate,
|
||||
timeOfDay,
|
||||
timezone,
|
||||
recurrence,
|
||||
plannedRounds: 10,
|
||||
});
|
||||
|
||||
expect(schedule.startDate.getFullYear()).toBe(2024);
|
||||
expect(schedule.startDate.getMonth()).toBe(0); // January is 0
|
||||
expect(schedule.startDate.getDate()).toBe(1);
|
||||
expect(schedule.startDate.getHours()).toBe(0);
|
||||
expect(schedule.startDate.getMinutes()).toBe(0);
|
||||
expect(schedule.startDate.getSeconds()).toBe(0);
|
||||
expect(schedule.timeOfDay.equals(timeOfDay)).toBe(true);
|
||||
expect(schedule.timezone.equals(timezone)).toBe(true);
|
||||
expect(schedule.recurrence).toEqual(recurrence);
|
||||
expect(schedule.plannedRounds).toBe(10);
|
||||
});
|
||||
|
||||
it('throws when startDate is invalid', () => {
|
||||
const recurrence = RecurrenceStrategyFactory.weekly(WeekdaySet.fromArray(['Mon']));
|
||||
expect(
|
||||
() =>
|
||||
new SeasonSchedule({
|
||||
startDate: new Date('invalid'),
|
||||
timeOfDay,
|
||||
timezone,
|
||||
recurrence,
|
||||
plannedRounds: 10,
|
||||
}),
|
||||
).toThrow(RacingDomainValidationError);
|
||||
});
|
||||
|
||||
it('throws when plannedRounds is not positive integer', () => {
|
||||
const recurrence = RecurrenceStrategyFactory.weekly(WeekdaySet.fromArray(['Mon']));
|
||||
expect(
|
||||
() =>
|
||||
new SeasonSchedule({
|
||||
startDate,
|
||||
timeOfDay,
|
||||
timezone,
|
||||
recurrence,
|
||||
plannedRounds: 0,
|
||||
}),
|
||||
).toThrow(RacingDomainValidationError);
|
||||
|
||||
expect(
|
||||
() =>
|
||||
new SeasonSchedule({
|
||||
startDate,
|
||||
timeOfDay,
|
||||
timezone,
|
||||
recurrence,
|
||||
plannedRounds: -1,
|
||||
}),
|
||||
).toThrow(RacingDomainValidationError);
|
||||
});
|
||||
|
||||
it('equals compares all props', () => {
|
||||
const recurrence1 = RecurrenceStrategyFactory.weekly(WeekdaySet.fromArray(['Mon', 'Wed']));
|
||||
const recurrence2 = RecurrenceStrategyFactory.weekly(WeekdaySet.fromArray(['Mon', 'Wed']));
|
||||
const recurrence3 = RecurrenceStrategyFactory.monthlyNthWeekday(MonthlyRecurrencePattern.create(1, 'Mon'));
|
||||
|
||||
const a = new SeasonSchedule({
|
||||
startDate,
|
||||
timeOfDay,
|
||||
timezone,
|
||||
recurrence: recurrence1,
|
||||
plannedRounds: 10,
|
||||
});
|
||||
|
||||
const b = new SeasonSchedule({
|
||||
startDate,
|
||||
timeOfDay,
|
||||
timezone,
|
||||
recurrence: recurrence2,
|
||||
plannedRounds: 10,
|
||||
});
|
||||
|
||||
const c = new SeasonSchedule({
|
||||
startDate,
|
||||
timeOfDay,
|
||||
timezone,
|
||||
recurrence: recurrence3,
|
||||
plannedRounds: 10,
|
||||
});
|
||||
|
||||
expect(a.equals(b)).toBe(true);
|
||||
expect(a.equals(c)).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user