territory/src/modules/territories/tests/unit/find-territory-by-uuid.usec...

94 lines
2.9 KiB
TypeScript

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>(
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);
});
});
});