1+ import express from 'express' ;
2+ import request from 'supertest' ;
3+ import { turmaDashboardRouter } from '../../src/routes/dashboardTurma.routes' ;
4+ import { middlewareAutenticacao } from '@/shared/middlewares/autenticacao.middleware' ;
5+ import type { Request , Response } from 'express' ;
6+
7+
8+ jest . mock ( '@/shared/middlewares/autenticacao.middleware' , ( ) => ( {
9+ middlewareAutenticacao : jest . fn ( ) ,
10+ } ) ) ;
11+
12+ jest . mock ( '@/shared/middlewares/proxy.middleware' , ( ) => ( {
13+ criarProxyHandler : jest . fn ( ) . mockReturnValue ( ( req : Request , res : Response ) => {
14+ res . status ( 200 ) . json ( { mockProxy : true , url : req . url } ) ;
15+ } ) ,
16+ } ) ) ;
17+
18+ jest . mock ( '@/shared/clients/quiz.client' , ( ) => ( {
19+ quizClient : { baseURL : 'http://mock-quiz-service' } ,
20+ } ) ) ;
21+
22+ describe ( 'TurmaDashboard Router (BFF)' , ( ) => {
23+ let app : express . Express ;
24+
25+ beforeEach ( ( ) => {
26+ jest . clearAllMocks ( ) ;
27+
28+ ( middlewareAutenticacao as jest . Mock ) . mockImplementation ( ( req , res , next ) => {
29+ next ( ) ;
30+ } ) ;
31+
32+ app = express ( ) ;
33+ app . use ( express . json ( ) ) ;
34+ app . use ( '/api/v1/turmasDashboard' , turmaDashboardRouter ) ;
35+ } ) ;
36+
37+ it ( 'deve repassar a requisição para o proxy se o usuário estiver autenticado' , async ( ) => {
38+
39+ const response = await request ( app ) . get ( '/api/v1/turmasDashboard/turma-123/macro' ) ;
40+
41+ expect ( response . status ) . toBe ( 200 ) ;
42+ expect ( response . body ) . toEqual ( {
43+ mockProxy : true ,
44+ url : '/turma-123/macro' ,
45+ } ) ;
46+
47+ expect ( middlewareAutenticacao ) . toHaveBeenCalled ( ) ;
48+ } ) ;
49+
50+ it ( 'deve bloquear a requisição com 401 se a autenticação falhar' , async ( ) => {
51+ ( middlewareAutenticacao as jest . Mock ) . mockImplementationOnce ( ( req , res ) => {
52+ res . status ( 401 ) . json ( { erro : 'Não autorizado' } ) ;
53+ } ) ;
54+
55+ const response = await request ( app ) . get ( '/api/v1/turmasDashboard/turma-123/macro' ) ;
56+
57+ expect ( response . status ) . toBe ( 401 ) ;
58+ expect ( response . body ) . toEqual ( { erro : 'Não autorizado' } ) ;
59+ } ) ;
60+
61+ it ( 'deve repassar qualquer método HTTP (POST, PATCH, DELETE) para o proxy' , async ( ) => {
62+ const response = await request ( app ) . post ( '/api/v1/turmasDashboard/turma-123/outra-rota' ) ;
63+
64+ expect ( response . status ) . toBe ( 200 ) ;
65+ expect ( response . body . url ) . toBe ( '/turma-123/outra-rota' ) ;
66+ } ) ;
67+ } ) ;
0 commit comments