1+ import request from "supertest" ;
2+ import express , { Request , Response } from "express" ;
3+
4+ jest . mock ( "@/shared/middlewares/autenticacao.middleware" , ( ) => ( {
5+ middlewareAutenticacao : jest . fn ( ( req : import ( "express" ) . Request , res : import ( "express" ) . Response , next : import ( "express" ) . NextFunction ) => {
6+ next ( ) ;
7+ } ) ,
8+ } ) ) ;
9+
10+ jest . mock ( "@/shared/middlewares/proxy.middleware" , ( ) => ( {
11+ criarProxyHandler : jest . fn ( ( ) => {
12+ return ( req : import ( "express" ) . Request , res : import ( "express" ) . Response ) => {
13+ res . status ( 200 ) . json ( { interceptadoPeloProxy : true , rota : req . path } ) ;
14+ } ;
15+ } ) ,
16+ } ) ) ;
17+
18+ jest . mock ( "@/shared/clients/quiz.client" , ( ) => ( {
19+ quizClient : { } ,
20+ } ) ) ;
21+
22+ import { inventarioRouter } from "../../src/routes/inventario.routes" ;
23+ import { middlewareAutenticacao } from "@/shared/middlewares/autenticacao.middleware" ;
24+
25+ describe ( "BFF - Roteador de Inventário" , ( ) => {
26+ let app : express . Application ;
27+
28+ beforeEach ( ( ) => {
29+ jest . clearAllMocks ( ) ;
30+
31+ app = express ( ) ;
32+ app . use ( express . json ( ) ) ;
33+ app . use ( "/api/v1/inventario" , inventarioRouter ) ;
34+ } ) ;
35+
36+ describe ( "Caminho Feliz (Sucesso)" , ( ) => {
37+ it ( "deve interceptar um GET e repassar para o proxy após autenticar" , async ( ) => {
38+ const response = await request ( app ) . get ( "/api/v1/inventario/meu-perfil" ) ;
39+
40+ expect ( middlewareAutenticacao ) . toHaveBeenCalled ( ) ;
41+
42+ expect ( response . status ) . toBe ( 200 ) ;
43+ expect ( response . body ) . toEqual ( { interceptadoPeloProxy : true , rota : "/meu-perfil" } ) ;
44+ } ) ;
45+
46+ it ( "deve interceptar um PATCH e repassar para o proxy após autenticar" , async ( ) => {
47+ const response = await request ( app )
48+ . patch ( "/api/v1/inventario/equipar" )
49+ . send ( { itemLojaId : "item-123" } ) ;
50+
51+ expect ( middlewareAutenticacao ) . toHaveBeenCalled ( ) ;
52+
53+ expect ( response . status ) . toBe ( 200 ) ;
54+ expect ( response . body ) . toEqual ( { interceptadoPeloProxy : true , rota : "/equipar" } ) ;
55+ } ) ;
56+ } ) ;
57+
58+ describe ( "Caminho de Erro (Falha na Autenticação)" , ( ) => {
59+ it ( "não deve repassar para o proxy se o middleware de autenticação bloquear" , async ( ) => {
60+ ( middlewareAutenticacao as jest . Mock ) . mockImplementationOnce ( ( req : Request , res : Response ) => {
61+ res . status ( 401 ) . json ( { mensagem : "Não autorizado" } ) ;
62+ } ) ;
63+
64+ const response = await request ( app ) . get ( "/api/v1/inventario/meu-perfil" ) ;
65+
66+ expect ( middlewareAutenticacao ) . toHaveBeenCalled ( ) ;
67+ expect ( response . status ) . toBe ( 401 ) ;
68+ expect ( response . body ) . toEqual ( { mensagem : "Não autorizado" } ) ;
69+ } ) ;
70+ } ) ;
71+ } ) ;
0 commit comments