233 lines
7.4 KiB
TypeScript
233 lines
7.4 KiB
TypeScript
import { AdEntity } from '@modules/ad/core/domain/ad.entity';
|
|
import {
|
|
CreateAdProps,
|
|
Frequency,
|
|
Status,
|
|
} from '@modules/ad/core/domain/ad.types';
|
|
import { WaypointProps } from '@modules/ad/core/domain/value-objects/waypoint.value-object';
|
|
|
|
const originWaypointProps: WaypointProps = {
|
|
position: 0,
|
|
address: {
|
|
houseNumber: '5',
|
|
street: 'Avenue Foch',
|
|
locality: 'Nancy',
|
|
postalCode: '54000',
|
|
country: 'France',
|
|
coordinates: {
|
|
lat: 48.689445,
|
|
lon: 6.17651,
|
|
},
|
|
},
|
|
};
|
|
const destinationWaypointProps: WaypointProps = {
|
|
position: 1,
|
|
address: {
|
|
locality: 'Paris',
|
|
postalCode: '75000',
|
|
country: 'France',
|
|
coordinates: {
|
|
lat: 48.8566,
|
|
lon: 2.3522,
|
|
},
|
|
},
|
|
};
|
|
|
|
const baseCreateAdProps = {
|
|
userId: 'e8fe64b1-4c33-49e1-9f69-4db48b21df36',
|
|
seatsProposed: 3,
|
|
seatsRequested: 1,
|
|
strict: false,
|
|
waypoints: [originWaypointProps, destinationWaypointProps],
|
|
comment: "J'accepte les chiens mais pas les chats",
|
|
};
|
|
const punctualCreateAdProps = {
|
|
fromDate: '2023-06-21',
|
|
toDate: '2023-06-21',
|
|
schedule: [
|
|
{
|
|
day: 3,
|
|
time: '08:30',
|
|
margin: 600,
|
|
},
|
|
],
|
|
frequency: Frequency.PUNCTUAL,
|
|
};
|
|
const recurrentCreateAdProps = {
|
|
fromDate: '2023-06-21',
|
|
toDate: '2024-06-20',
|
|
schedule: [
|
|
{
|
|
day: 1,
|
|
time: '08:30',
|
|
margin: 600,
|
|
},
|
|
{
|
|
day: 2,
|
|
time: '08:30',
|
|
margin: 600,
|
|
},
|
|
{
|
|
day: 3,
|
|
time: '08:00',
|
|
margin: 600,
|
|
},
|
|
{
|
|
day: 4,
|
|
time: '08:30',
|
|
margin: 600,
|
|
},
|
|
{
|
|
day: 5,
|
|
time: '08:30',
|
|
margin: 600,
|
|
},
|
|
],
|
|
frequency: Frequency.RECURRENT,
|
|
};
|
|
const punctualPassengerCreateAdProps: CreateAdProps = {
|
|
...baseCreateAdProps,
|
|
...punctualCreateAdProps,
|
|
driver: false,
|
|
passenger: true,
|
|
};
|
|
const recurrentPassengerCreateAdProps: CreateAdProps = {
|
|
...baseCreateAdProps,
|
|
...recurrentCreateAdProps,
|
|
driver: false,
|
|
passenger: true,
|
|
};
|
|
const punctualDriverCreateAdProps: CreateAdProps = {
|
|
...baseCreateAdProps,
|
|
...punctualCreateAdProps,
|
|
driver: true,
|
|
passenger: false,
|
|
};
|
|
const recurrentDriverCreateAdProps: CreateAdProps = {
|
|
...baseCreateAdProps,
|
|
...recurrentCreateAdProps,
|
|
driver: true,
|
|
passenger: false,
|
|
};
|
|
const punctualDriverPassengerCreateAdProps: CreateAdProps = {
|
|
...baseCreateAdProps,
|
|
...punctualCreateAdProps,
|
|
driver: true,
|
|
passenger: true,
|
|
};
|
|
const recurrentDriverPassengerCreateAdProps: CreateAdProps = {
|
|
...baseCreateAdProps,
|
|
...recurrentCreateAdProps,
|
|
driver: true,
|
|
passenger: true,
|
|
};
|
|
|
|
describe('Ad entity create', () => {
|
|
describe('With complete props', () => {
|
|
it('should create a new punctual passenger ad entity', async () => {
|
|
const punctualPassengerAd: AdEntity = AdEntity.create(
|
|
punctualPassengerCreateAdProps,
|
|
);
|
|
expect(punctualPassengerAd.id.length).toBe(36);
|
|
expect(punctualPassengerAd.getProps().status).toBe(Status.PENDING);
|
|
expect(punctualPassengerAd.getProps().schedule.length).toBe(1);
|
|
expect(punctualPassengerAd.getProps().schedule[0].day).toBe(3);
|
|
expect(punctualPassengerAd.getProps().schedule[0].time).toBe('08:30');
|
|
expect(punctualPassengerAd.getProps().driver).toBeFalsy();
|
|
expect(punctualPassengerAd.getProps().passenger).toBeTruthy();
|
|
expect(punctualPassengerAd.getProps().comment).toBe(
|
|
"J'accepte les chiens mais pas les chats",
|
|
);
|
|
});
|
|
it('should create a new punctual driver ad entity', async () => {
|
|
const punctualDriverAd: AdEntity = AdEntity.create(
|
|
punctualDriverCreateAdProps,
|
|
);
|
|
expect(punctualDriverAd.id.length).toBe(36);
|
|
expect(punctualDriverAd.getProps().schedule.length).toBe(1);
|
|
expect(punctualDriverAd.getProps().schedule[0].day).toBe(3);
|
|
expect(punctualDriverAd.getProps().schedule[0].time).toBe('08:30');
|
|
expect(punctualDriverAd.getProps().driver).toBeTruthy();
|
|
expect(punctualDriverAd.getProps().passenger).toBeFalsy();
|
|
});
|
|
it('should create a new punctual driver and passenger ad entity', async () => {
|
|
const punctualDriverPassengerAd: AdEntity = AdEntity.create(
|
|
punctualDriverPassengerCreateAdProps,
|
|
);
|
|
expect(punctualDriverPassengerAd.id.length).toBe(36);
|
|
expect(punctualDriverPassengerAd.getProps().schedule.length).toBe(1);
|
|
expect(punctualDriverPassengerAd.getProps().schedule[0].day).toBe(3);
|
|
expect(punctualDriverPassengerAd.getProps().schedule[0].time).toBe(
|
|
'08:30',
|
|
);
|
|
expect(punctualDriverPassengerAd.getProps().driver).toBeTruthy();
|
|
expect(punctualDriverPassengerAd.getProps().passenger).toBeTruthy();
|
|
});
|
|
it('should create a new recurrent passenger ad entity', async () => {
|
|
const recurrentPassengerAd: AdEntity = AdEntity.create(
|
|
recurrentPassengerCreateAdProps,
|
|
);
|
|
expect(recurrentPassengerAd.id.length).toBe(36);
|
|
expect(recurrentPassengerAd.getProps().schedule.length).toBe(5);
|
|
expect(recurrentPassengerAd.getProps().schedule[0].day).toBe(1);
|
|
expect(recurrentPassengerAd.getProps().schedule[2].time).toBe('08:00');
|
|
expect(recurrentPassengerAd.getProps().driver).toBeFalsy();
|
|
expect(recurrentPassengerAd.getProps().passenger).toBeTruthy();
|
|
});
|
|
it('should create a new recurrent driver ad entity', async () => {
|
|
const recurrentDriverAd: AdEntity = AdEntity.create(
|
|
recurrentDriverCreateAdProps,
|
|
);
|
|
expect(recurrentDriverAd.id.length).toBe(36);
|
|
expect(recurrentDriverAd.getProps().schedule.length).toBe(5);
|
|
expect(recurrentDriverAd.getProps().schedule[1].day).toBe(2);
|
|
expect(recurrentDriverAd.getProps().schedule[0].time).toBe('08:30');
|
|
expect(recurrentDriverAd.getProps().driver).toBeTruthy();
|
|
expect(recurrentDriverAd.getProps().passenger).toBeFalsy();
|
|
});
|
|
it('should create a new recurrent driver and passenger ad entity', async () => {
|
|
const recurrentDriverPassengerAd: AdEntity = AdEntity.create(
|
|
recurrentDriverPassengerCreateAdProps,
|
|
);
|
|
expect(recurrentDriverPassengerAd.id.length).toBe(36);
|
|
expect(recurrentDriverPassengerAd.getProps().schedule.length).toBe(5);
|
|
expect(recurrentDriverPassengerAd.getProps().schedule[3].day).toBe(4);
|
|
expect(recurrentDriverPassengerAd.getProps().schedule[4].time).toBe(
|
|
'08:30',
|
|
);
|
|
expect(recurrentDriverPassengerAd.getProps().driver).toBeTruthy();
|
|
expect(recurrentDriverPassengerAd.getProps().passenger).toBeTruthy();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Ad entity validate status', () => {
|
|
it('should validate status of a pending ad entity', async () => {
|
|
const punctualPassengerAd: AdEntity = AdEntity.create(
|
|
punctualPassengerCreateAdProps,
|
|
);
|
|
punctualPassengerAd.valid();
|
|
expect(punctualPassengerAd.getProps().status).toBe(Status.VALID);
|
|
});
|
|
});
|
|
|
|
describe('Ad entity invalidate status', () => {
|
|
it('should invalidate status of a pending ad entity', async () => {
|
|
const punctualPassengerAd: AdEntity = AdEntity.create(
|
|
punctualPassengerCreateAdProps,
|
|
);
|
|
punctualPassengerAd.invalid();
|
|
expect(punctualPassengerAd.getProps().status).toBe(Status.INVALID);
|
|
});
|
|
});
|
|
|
|
describe('Ad entity suspend status', () => {
|
|
it('should suspend status of a pending ad entity', async () => {
|
|
const punctualPassengerAd: AdEntity = AdEntity.create(
|
|
punctualPassengerCreateAdProps,
|
|
);
|
|
punctualPassengerAd.suspend();
|
|
expect(punctualPassengerAd.getProps().status).toBe(Status.SUSPENDED);
|
|
});
|
|
});
|