94 lines
2.9 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|