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