104 lines
2.8 KiB
TypeScript
104 lines
2.8 KiB
TypeScript
import { AD_REPOSITORY } from '@modules/ad/ad.di-tokens';
|
|
import { AdEntity } from '@modules/ad/core/domain/ad.entity';
|
|
import { CreateAdProps, Frequency } from '@modules/ad/core/domain/ad.types';
|
|
import { WaypointProps } from '@modules/ad/core/domain/value-objects/waypoint.value-object';
|
|
import { Test, TestingModule } from '@nestjs/testing';
|
|
import { FindAdsByUserIdQueryHandler } from '@modules/ad/core/application/queries/find-ads-by-user-id/find-ads-by-user-id.query-handler';
|
|
import { FindAdsByUserIdQuery } from '@modules/ad/core/application/queries/find-ads-by-user-id/find-ads-by-user-id.query';
|
|
|
|
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],
|
|
};
|
|
const punctualCreateAdProps = {
|
|
fromDate: '2023-06-22',
|
|
toDate: '2023-06-22',
|
|
schedule: [
|
|
{
|
|
time: '08:30',
|
|
},
|
|
],
|
|
frequency: Frequency.PUNCTUAL,
|
|
};
|
|
const punctualPassengerCreateAdProps: CreateAdProps = {
|
|
...baseCreateAdProps,
|
|
...punctualCreateAdProps,
|
|
driver: false,
|
|
passenger: true,
|
|
};
|
|
|
|
const ads: AdEntity[] = [
|
|
AdEntity.create(punctualPassengerCreateAdProps),
|
|
AdEntity.create(punctualPassengerCreateAdProps),
|
|
AdEntity.create(punctualPassengerCreateAdProps),
|
|
];
|
|
|
|
const mockAdRepository = {
|
|
findAll: jest.fn().mockImplementation(() => ads),
|
|
};
|
|
|
|
describe('Find Ads By User Id Query Handler', () => {
|
|
let findAdsByUserIdQueryHandler: FindAdsByUserIdQueryHandler;
|
|
|
|
beforeAll(async () => {
|
|
const module: TestingModule = await Test.createTestingModule({
|
|
providers: [
|
|
{
|
|
provide: AD_REPOSITORY,
|
|
useValue: mockAdRepository,
|
|
},
|
|
FindAdsByUserIdQueryHandler,
|
|
],
|
|
}).compile();
|
|
|
|
findAdsByUserIdQueryHandler = module.get<FindAdsByUserIdQueryHandler>(
|
|
FindAdsByUserIdQueryHandler,
|
|
);
|
|
});
|
|
|
|
it('should be defined', () => {
|
|
expect(findAdsByUserIdQueryHandler).toBeDefined();
|
|
});
|
|
|
|
describe('execution', () => {
|
|
it('should return an ad', async () => {
|
|
const findAdsByIdsQuery = new FindAdsByUserIdQuery(
|
|
'e8fe64b1-4c33-49e1-9f69-4db48b21df36',
|
|
);
|
|
const ads: AdEntity[] =
|
|
await findAdsByUserIdQueryHandler.execute(findAdsByIdsQuery);
|
|
expect(ads).toHaveLength(3);
|
|
expect(ads[1].getProps().fromDate).toBe('2023-06-22');
|
|
});
|
|
});
|
|
});
|