Skip to content

Commit ce4d3c6

Browse files
authored
Merge pull request #16 from fga-eps-mds/feat/dashboard-turma
Feat/dashboard turma
2 parents fb8a344 + 95dda36 commit ce4d3c6

3 files changed

Lines changed: 82 additions & 1 deletion

File tree

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Router } from "express";
2+
import { quizClient } from "@/shared/clients/quiz.client";
3+
import { middlewareAutenticacao } from "@/shared/middlewares/autenticacao.middleware";
4+
import { criarProxyHandler } from "@/shared/middlewares/proxy.middleware";
5+
6+
const router = Router();
7+
8+
router.use(middlewareAutenticacao);
9+
10+
router.all(/.*/, criarProxyHandler(quizClient));
11+
12+
export { router as turmaDashboardRouter };

src/routes/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { questoesRouter } from "@/routes/questoes.routes";
88
import { turmasRouter } from "@/routes/turmas.routes";
99
import { usuariosRouter } from "@/routes/usuarios.routes";
1010
import { listasRouter } from "./lista.routes";
11+
import { turmaDashboardRouter } from "./dashboardTurma.routes";
1112

1213
import { quizClient } from "@/shared/clients/quiz.client";
1314
import { criarProxyHandler } from "@/shared/middlewares/proxy.middleware";
@@ -23,6 +24,7 @@ apiRouter.use("/ia", iaRouter);
2324
apiRouter.use("/turmas", turmasRouter);
2425
apiRouter.use("/usuarios", usuariosRouter);
2526
apiRouter.use("/quiz", middlewareAutenticacao, criarProxyHandler(quizClient));
26-
apiRouter.use("/lista", listasRouter)
27+
apiRouter.use("/lista", listasRouter);
28+
apiRouter.use("/turmasDashboard", turmaDashboardRouter);
2729

2830
export { apiRouter };

tests/unit/dashboardTurma.test.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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

Comments
 (0)