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 { RouteKey } from '../../../domain/entities/geography'; const mockAdRepository = {}; const mockGeorouterCreator = { create: jest.fn().mockImplementation(() => ({ route: jest.fn().mockImplementation(() => [ { key: RouteKey.COMMON, points: [], }, ]), })), }; const mockParamsProvider = { getParams: jest.fn().mockImplementation(() => ({ DEFAULT_TIMEZONE: 'Europe/Paris', GEOROUTER_TYPE: 'graphhopper', GEOROUTER_URL: 'localhost', })), }; const mockTimezoneFinder = { timezones: jest.fn().mockImplementation(() => ['Europe/Paris']), }; const mockDirectionEncoder = {}; 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, }, { provide: 'GeorouterCreator', useValue: mockGeorouterCreator, }, { provide: 'ParamsProvider', useValue: mockParamsProvider, }, { provide: 'TimezoneFinder', useValue: mockTimezoneFinder, }, { provide: 'DirectionEncoder', useValue: mockDirectionEncoder, }, 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), // ); // expect(ad).toBeInstanceOf(Ad); // }); // }); });