Skip to content

Commit 92d9098

Browse files
committed
✔️test(categoria): implementa testes de unidade automatizados nos controllers | Parte 31
- Implementa Teste de Unidade no Controller "Recuperar Categoria por ID" - Implementa Teste de Unidade no Controller "Inserir Categoria"
1 parent 4473b8b commit 92d9098

File tree

2 files changed

+131
-0
lines changed

2 files changed

+131
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { Mock, afterEach, beforeAll, describe, expect, test, vi, vitest } from "vitest";
2+
import { MockProxy, mock, mockReset } from "vitest-mock-extended";
3+
import { Request, Response } from "express";
4+
import { CriarCategoriaProps, ICategoria } from "@modules/catalogo/domain/categoria/categoria.types";
5+
import { InserirCategoriaExpressController } from "./inserir-categoria.express.controller";
6+
import { InserirCategoriaUseCase } from "@modules/catalogo/application/use-cases/inserir-categoria/inserir-categoria.use-case";
7+
8+
9+
let inserirCategoriaUseCaseMock: MockProxy<InserirCategoriaUseCase>;
10+
let requestMock: MockProxy<Request>;
11+
let responseMock: MockProxy<Response>;
12+
let nextMock: Mock;
13+
let inserirCategoriaController: InserirCategoriaExpressController;
14+
15+
describe('Controller Express: Inserir Categoria por ID', () => {
16+
17+
beforeAll(async () => {
18+
inserirCategoriaUseCaseMock = mock<InserirCategoriaUseCase>();
19+
requestMock = mock<Request>();
20+
responseMock = mock<Response>();
21+
nextMock = vitest.fn();
22+
inserirCategoriaController = new InserirCategoriaExpressController(inserirCategoriaUseCaseMock);
23+
});
24+
25+
afterEach(() => {
26+
vi.restoreAllMocks();
27+
mockReset(requestMock);
28+
mockReset(responseMock);
29+
mockReset(inserirCategoriaUseCaseMock);
30+
});
31+
32+
test('Deve Inserir Uma Categoria por UUID', async () => {
33+
34+
//Dado (Given)
35+
const categoriaInputDTO: CriarCategoriaProps = {
36+
nome: "Cama"
37+
};
38+
39+
requestMock.body = categoriaInputDTO;
40+
inserirCategoriaUseCaseMock.execute.mockResolvedValue(categoriaInputDTO);
41+
responseMock.status.mockReturnThis();
42+
43+
//Quando (When)
44+
await inserirCategoriaController.inserir(requestMock, responseMock, nextMock);
45+
46+
//Então (Then)
47+
expect(inserirCategoriaUseCaseMock.execute).toHaveBeenCalledWith(categoriaInputDTO);
48+
expect(responseMock.status).toHaveBeenCalledWith(200);
49+
expect(responseMock.json).toHaveBeenCalledWith(categoriaInputDTO);
50+
expect(nextMock).not.toHaveBeenCalled();
51+
52+
});
53+
54+
});
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import { RecuperarCategoriaPorIdUseCase } from "@modules/catalogo/application/use-cases/recuperar-categoria-por-id/recuperar-categoria-por-id.use-case";
2+
import { Request, Response } from "express";
3+
import { Mock, afterEach, beforeAll, describe, expect, test, vi, vitest } from "vitest";
4+
import { MockProxy, mock, mockReset } from "vitest-mock-extended";
5+
import { RecuperarCategoriaPorIdExpressController } from "./recuperar-categoria-por-id.express.controller";
6+
import { ICategoria } from "@modules/catalogo/domain/categoria/categoria.types";
7+
import { CategoriaApplicationExceptions } from "@modules/catalogo/application/exceptions/categoria.application.exception";
8+
9+
10+
let requestMock: MockProxy<Request>;
11+
let responseMock: MockProxy<Response>;
12+
let nextMock: Mock;
13+
let recuperarCategoriaPorIdUseCaseMock: MockProxy<RecuperarCategoriaPorIdUseCase>;
14+
let recuperarCategoriaPorIdController: RecuperarCategoriaPorIdExpressController;
15+
16+
describe('Controller Express: Recuperar Categoria por ID', () => {
17+
18+
beforeAll(async () => {
19+
requestMock = mock<Request>();
20+
responseMock = mock<Response>();
21+
nextMock = vitest.fn();
22+
recuperarCategoriaPorIdUseCaseMock = mock<RecuperarCategoriaPorIdUseCase>();
23+
recuperarCategoriaPorIdController = new RecuperarCategoriaPorIdExpressController(recuperarCategoriaPorIdUseCaseMock);
24+
});
25+
26+
afterEach(() => {
27+
vi.restoreAllMocks();
28+
mockReset(requestMock);
29+
mockReset(responseMock);
30+
mockReset(recuperarCategoriaPorIdUseCaseMock);
31+
});
32+
33+
test('Deve Recuperar Uma Categoria por UUID', async () => {
34+
35+
//Dado (Given)
36+
const categoriaInputDTO: ICategoria = {
37+
id: "80830927-8c3e-4db9-9ddf-30ea191f139b",
38+
nome: "Cama"
39+
}
40+
41+
requestMock.params.id = categoriaInputDTO.id as string;
42+
recuperarCategoriaPorIdUseCaseMock.execute.mockResolvedValue(categoriaInputDTO);
43+
responseMock.status.mockReturnThis();
44+
45+
//Quando (When)
46+
await recuperarCategoriaPorIdController.recuperar(requestMock, responseMock, nextMock);
47+
48+
//Então (Then
49+
expect(recuperarCategoriaPorIdUseCaseMock.execute).toHaveBeenCalledWith(categoriaInputDTO.id);
50+
expect(responseMock.status).toHaveBeenCalledWith(200);
51+
expect(responseMock.json).toHaveBeenCalledWith(categoriaInputDTO);
52+
expect(nextMock).not.toHaveBeenCalled();
53+
54+
});
55+
56+
test('Deve Tratar uma Exceção de Categoria Não Encontrada', async () => {
57+
58+
//Dado (Given)
59+
const categoriaInputDTO: ICategoria = {
60+
id: "80830927-8c3e-4db9-9ddf-30ea191f139b",
61+
nome: "Cama"
62+
}
63+
64+
requestMock.params.id = categoriaInputDTO.id as string;
65+
recuperarCategoriaPorIdUseCaseMock.execute.mockRejectedValue(new CategoriaApplicationExceptions.CategoriaNaoEncontrada());
66+
responseMock.status.mockReturnThis();
67+
68+
//Quando (When)
69+
await recuperarCategoriaPorIdController.recuperar(requestMock, responseMock, nextMock);
70+
71+
expect(recuperarCategoriaPorIdUseCaseMock.execute).toHaveBeenCalledWith(categoriaInputDTO.id);
72+
expect(nextMock).toHaveBeenCalled();
73+
expect(nextMock.mock.lastCall[0].name).toBe(CategoriaApplicationExceptions.CategoriaNaoEncontrada.name);
74+
75+
});
76+
77+
});

0 commit comments

Comments
 (0)