import { NotFoundException } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; import { LoggingMessager } from '../../adapters/secondaries/logging.messager'; import { TerritoriesRepository } from '../../adapters/secondaries/territories.repository'; import { FindTerritoryByUuidRequest } from '../../domain/dtos/find-territory-by-uuid.request'; import { FindTerritoryByUuidUseCase } from '../../domain/usecases/find-territory-by-uuid.usecase'; import { FindTerritoryByUuidQuery } from '../../queries/find-territory-by-uuid.query'; const mockTerritory = { uuid: 'bb281075-1b98-4456-89d6-c643d3044a91', name: 'Grand Est', shape: { type: 'MultiPolygon', coordinates: [ [ [ [838383.2, 6570485.8], [838483.8, 6570697.7], [838688.1, 6571298.4], [838809.5, 6571599.9], [838383.2, 6570485.8], ], ], ], }, }; const mockTerritoriesRepository = { findOneByUuid: jest .fn() // eslint-disable-next-line @typescript-eslint/no-unused-vars .mockImplementationOnce((query?: FindTerritoryByUuidQuery) => { return Promise.resolve(mockTerritory); }) .mockImplementation(() => { return Promise.resolve(undefined); }), }; const mockMessager = { publish: jest.fn().mockImplementation(), }; describe('FindTerritoryByUuidUseCase', () => { let findTerritoryByUuidUseCase: FindTerritoryByUuidUseCase; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [], providers: [ { provide: TerritoriesRepository, useValue: mockTerritoriesRepository, }, { provide: LoggingMessager, useValue: mockMessager, }, FindTerritoryByUuidUseCase, ], }).compile(); findTerritoryByUuidUseCase = module.get( FindTerritoryByUuidUseCase, ); }); it('should be defined', () => { expect(findTerritoryByUuidUseCase).toBeDefined(); }); describe('execute', () => { it('should return a territory', async () => { const findTerritoryByUuidRequest: FindTerritoryByUuidRequest = new FindTerritoryByUuidRequest(); findTerritoryByUuidRequest.uuid = 'bb281075-1b98-4456-89d6-c643d3044a91'; const territory = await findTerritoryByUuidUseCase.execute( new FindTerritoryByUuidQuery(findTerritoryByUuidRequest), ); expect(territory).toBe(mockTerritory); }); it('should throw an error if territory does not exist', async () => { const findTerritoryByUuidRequest: FindTerritoryByUuidRequest = new FindTerritoryByUuidRequest(); findTerritoryByUuidRequest.uuid = 'bb281075-1b98-4456-89d6-c643d3044a90'; await expect( findTerritoryByUuidUseCase.execute( new FindTerritoryByUuidQuery(findTerritoryByUuidRequest), ), ).rejects.toBeInstanceOf(NotFoundException); }); }); });