import { CreateAdRequest } from '../../../domain/dtos/create-ad.request'; import { CreateAdUseCase } from '../../../domain/usecases/create-ad.usecase'; import { Test, TestingModule } from '@nestjs/testing'; import { AutomapperModule } from '@automapper/nestjs'; import { classes } from '@automapper/classes'; import { AdRepository } from '../../../adapters/secondaries/ad.repository'; import { CreateAdCommand } from '../../../commands/create-ad.command'; import { Ad } from '../../../domain/entities/ad'; import { AdProfile } from '../../../mappers/ad.profile'; import { Frequency } from '../../../domain/types/frequency.enum'; import { IDefaultParams } from '../../../domain/types/default-params.type'; const mockAdRepository = {}; const mockGeorouterCreator = { create: jest.fn().mockImplementation(), }; const defaultParams: IDefaultParams = { GEOROUTER_TYPE: 'graphhopper', GEOROUTER_URL: 'http://localhost', }; const createAdRequest: CreateAdRequest = { uuid: '77c55dfc-c28b-4026-942e-f94e95401fb1', userUuid: 'dfd993f6-7889-4876-9570-5e1d7b6e3f42', driver: true, passenger: false, frequency: Frequency.RECURRENT, fromDate: new Date('2023-04-26'), toDate: new Date('2024-04-25'), monTime: '07:00', tueTime: '07:00', wedTime: '07:00', thuTime: '07:00', friTime: '07:00', satTime: null, sunTime: null, monMargin: 900, tueMargin: 900, wedMargin: 900, thuMargin: 900, friMargin: 900, satMargin: 900, sunMargin: 900, seatsDriver: 3, seatsPassenger: 1, strict: false, waypoints: [ { lon: 6, lat: 45 }, { lon: 6.5, lat: 45.5 }, ], }; describe('CreateAdUseCase', () => { let createAdUseCase: CreateAdUseCase; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [AutomapperModule.forRoot({ strategyInitializer: classes() })], providers: [ { provide: AdRepository, useValue: mockAdRepository, }, AdProfile, CreateAdUseCase, ], }).compile(); createAdUseCase = module.get(CreateAdUseCase); }); it('should be defined', () => { expect(createAdUseCase).toBeDefined(); }); describe('execute', () => { it('should create an ad', async () => { const ad = await createAdUseCase.execute( new CreateAdCommand( createAdRequest, defaultParams, mockGeorouterCreator, ), ); expect(ad).toBeInstanceOf(Ad); }); // it('should throw an exception when error occurs', async () => { // await expect( // createAdUseCase.execute( // new MatchQuery( // matchRequest, // defaultParams, // mockGeorouterCreator, // mockTimezoneFinder, // ), // ), // ).rejects.toBeInstanceOf(MatcherException); // }); }); });