ad/src/modules/ad/tests/unit/domain/recurrent-normaliser.spec.ts

123 lines
4.3 KiB
TypeScript

import { Day } from '../../../domain/types/day.enum';
import { CreateAdRequest } from '../../../domain/dtos/create-ad.request';
import { ScheduleDTO } from '../../../domain/dtos/schedule.dto';
import { FrequencyNormaliser } from '../../../domain/entities/frequency.normaliser';
import { Frequency } from '../../../domain/types/frequency.enum';
describe('recurrent normalizer transformer for punctual ad ', () => {
const recurrentNormaliser = new FrequencyNormaliser();
it('should transform punctual ad into recurrent ad ', () => {
const punctualAd: CreateAdRequest = {
userUuid: '',
frequency: Frequency.PUNCTUAL,
departureDateTime: new Date('05-03-2023 12:39:39 '),
schedule: {} as ScheduleDTO,
addresses: [],
};
expect(recurrentNormaliser.fromDateResolver(punctualAd)).toBe(
punctualAd.departureDateTime,
);
expect(recurrentNormaliser.toDateResolver(punctualAd)).toBe(
punctualAd.departureDateTime,
);
expect(
recurrentNormaliser.scheduleResolver(punctualAd, Day.mon),
).toBeUndefined();
expect(
recurrentNormaliser.scheduleResolver(punctualAd, Day.tue),
).toBeUndefined();
expect(recurrentNormaliser.scheduleResolver(punctualAd, Day.wed)).toBe(
'12:39',
);
expect(
recurrentNormaliser.scheduleResolver(punctualAd, Day.thu),
).toBeUndefined();
expect(
recurrentNormaliser.scheduleResolver(punctualAd, Day.fri),
).toBeUndefined();
expect(
recurrentNormaliser.scheduleResolver(punctualAd, Day.sat),
).toBeUndefined();
expect(
recurrentNormaliser.scheduleResolver(punctualAd, Day.sun),
).toBeUndefined();
});
it('should leave recurrent ad as is', () => {
const recurrentAd: CreateAdRequest = {
userUuid: '',
frequency: Frequency.RECURRENT,
schedule: {
mon: '08:30',
tue: '08:30',
wed: '09:00',
fri: '09:00',
},
addresses: [],
};
expect(recurrentNormaliser.fromDateResolver(recurrentAd)).toBe(
recurrentAd.departureDateTime,
);
expect(recurrentNormaliser.toDateResolver(recurrentAd)).toBe(
recurrentAd.departureDateTime,
);
expect(recurrentNormaliser.scheduleResolver(recurrentAd, Day.mon)).toBe(
recurrentAd.schedule.mon,
);
expect(recurrentNormaliser.scheduleResolver(recurrentAd, Day.tue)).toBe(
recurrentAd.schedule.tue,
);
expect(recurrentNormaliser.scheduleResolver(recurrentAd, Day.wed)).toBe(
recurrentAd.schedule.wed,
);
expect(recurrentNormaliser.scheduleResolver(recurrentAd, Day.thu)).toBe(
recurrentAd.schedule.thu,
);
expect(recurrentNormaliser.scheduleResolver(recurrentAd, Day.fri)).toBe(
recurrentAd.schedule.fri,
);
expect(recurrentNormaliser.scheduleResolver(recurrentAd, Day.sat)).toBe(
recurrentAd.schedule.sat,
);
expect(recurrentNormaliser.scheduleResolver(recurrentAd, Day.sun)).toBe(
recurrentAd.schedule.sun,
);
});
it('should pass for each day of the week of a deprarture ', () => {
const punctualAd: CreateAdRequest = {
userUuid: '',
frequency: Frequency.PUNCTUAL,
departureDateTime: undefined,
schedule: {} as ScheduleDTO,
addresses: [],
};
punctualAd.departureDateTime = new Date('05-01-2023 ');
expect(recurrentNormaliser.scheduleResolver(punctualAd, Day.mon)).toBe(
'00:00',
);
punctualAd.departureDateTime = new Date('05-02-2023 06:32:45');
expect(recurrentNormaliser.scheduleResolver(punctualAd, Day.tue)).toBe(
'06:32',
);
punctualAd.departureDateTime = new Date('05-03-2023 10:21');
expect(recurrentNormaliser.scheduleResolver(punctualAd, Day.wed)).toBe(
'10:21',
);
punctualAd.departureDateTime = new Date('05-04-2023 11:06:00');
expect(recurrentNormaliser.scheduleResolver(punctualAd, Day.thu)).toBe(
'11:06',
);
punctualAd.departureDateTime = new Date('05-05-2023 05:20');
expect(recurrentNormaliser.scheduleResolver(punctualAd, Day.fri)).toBe(
'05:20',
);
punctualAd.departureDateTime = new Date('05-06-2023');
expect(recurrentNormaliser.scheduleResolver(punctualAd, Day.sat)).toBe(
'00:00',
);
punctualAd.departureDateTime = new Date('05-07-2023');
expect(recurrentNormaliser.scheduleResolver(punctualAd, Day.sun)).toBe(
'00:00',
);
});
});