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