import { TicketDto } from '../src/interfaces/ticket/ticket.dto'; import { PassengerCount } from '../src/rules/ticket/passenger-count'; import { TICKET_ABONNEMENT_ANNUEL_MOINS_26_ANS, TICKET_ABONNEMENT_MENSUEL_MOINS_26_ANS_OCTOBRE, TICKET_UNITAIRE_MULHOUSE, } from './test-config'; describe('Passenger Count', () => { const rule = new PassengerCount(); beforeAll(() => { jest .spyOn(global.Date, 'now') .mockImplementation(() => new Date('2022-09-30 16:30:00').valueOf()); }); it('Valid Ticket, monthly subscription', () => { expect( rule.validate(TICKET_ABONNEMENT_MENSUEL_MOINS_26_ANS_OCTOBRE as unknown as TicketDto), ).toBe(true); }); it('Valid Ticket, yearly subscription', () => { expect(rule.validate(TICKET_ABONNEMENT_ANNUEL_MOINS_26_ANS as unknown as TicketDto)).toBe(true); }); it('Valid Ticket, passengers NULL', () => { const ticketPassengersNull = { ...TICKET_UNITAIRE_MULHOUSE, passengers: null, }; expect(rule.validate(ticketPassengersNull as unknown as TicketDto)).toBe(true); }); it('Valid Ticket, no passengers limit anyway', () => { const ticketNoPassengersLimit = { ...TICKET_UNITAIRE_MULHOUSE, passengers: [ { id: 'passenger-1' }, { id: 'passenger-2' }, { id: 'passenger-3' }, { id: 'passenger-4' }, ], maxPassengers: null, }; expect(rule.validate(ticketNoPassengersLimit as unknown as TicketDto)).toBe(true); }); it('Invalid ticket, too many passengers', () => { const ticket = { ...TICKET_UNITAIRE_MULHOUSE, maxPassengers: 1, passengers: [{ id: 'passenger-1' }, { id: 'passenger-2' }], }; expect(rule.validate(ticket as unknown as TicketDto)).toBe(false); }); it('Invalid ticket, not enough passengers', () => { const ticket = { ...TICKET_UNITAIRE_MULHOUSE, maxPassengers: 10, minPassengers: 2, passengers: [{ id: 'passenger-1' }], }; expect(rule.validate(ticket as unknown as TicketDto)).toBe(false); }); });