From 173f71352ca1824aef6bb186faa6f951d43f7650 Mon Sep 17 00:00:00 2001 From: Guilherme Peixoto Date: Wed, 15 Jan 2025 23:30:35 -0300 Subject: [PATCH 1/6] redone e write permissions to routes --- src/Middlewares/accessControlMiddleware.js | 26 +++++++++++++ src/routes.js | 44 ++++++++++++++++++---- 2 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 src/Middlewares/accessControlMiddleware.js diff --git a/src/Middlewares/accessControlMiddleware.js b/src/Middlewares/accessControlMiddleware.js new file mode 100644 index 0000000..f283d00 --- /dev/null +++ b/src/Middlewares/accessControlMiddleware.js @@ -0,0 +1,26 @@ +const jwt = require('jsonwebtoken'); + + +const checkPermissions = (permissionName) => { + return async (req, res, next) => { + try{ + const decoded = jwt.decode(req.headers.authorization?.split(" ")[1]); + + const permission = decoded._doc.permissions.find( + (perm) => perm.name === permissionName + ); + + if (!permission) { + return res + .status(400) + .send("user has no permission to access resource"); + } + next(); + } + catch(error){ + next(error); + } + }; +}; + +module.exports = { checkPermissions }; diff --git a/src/routes.js b/src/routes.js index c57ca5d..23b318e 100644 --- a/src/routes.js +++ b/src/routes.js @@ -4,64 +4,94 @@ const bankAccountController = require("./Controllers/bankAccountController"); const supplierFormController = require("./Controllers/supplierFormController"); const financialMovementsController = require("./Controllers/financialMovementsController"); const financialReportController = require("./Controllers/financialReportController"); +const {checkPermissions} = require("./Middlewares/accessControlMiddleware"); + -// Rotas Privadas (Comentadas por enquanto, você pode descomentar quando implementar a validação de token) -// router.get('/finance', tokenValidation, ???.getUsers); -// router.get('/finance/:id', tokenValidation, ???.getUserById); // Rotas Contas Bancárias routes.post( "/finance/createBankAccount", + checkPermissions("contas_bancarias_criar"), bankAccountController.createBankAccount ); routes.get( "/finance/bankAccount/:id", + checkPermissions("contas_bancarias_visualizar"), bankAccountController.getBankAccountbyId ); routes.delete( "/finance/deleteBankAccount/:id", + checkPermissions("contas_bancarias_deletar"), bankAccountController.deleteBankAccount ); routes.patch( "/finance/updateBankAccount/:id", + checkPermissions("contas_bancarias_editar"), bankAccountController.updateBankAccount ); -routes.get("/finance/getBankAccount", bankAccountController.getAll); +routes.get( + "/finance/getBankAccount", + checkPermissions("contas_bancarias_visualizar"), + bankAccountController.getAll +); // Rotas Fornecedores -routes.post("/SupplierForm/create", supplierFormController.createSupplierForm); -routes.get("/SupplierForm", supplierFormController.getSupplierForm); -routes.get("/SupplierForm/:id", supplierFormController.getSupplierFormById); +routes.post( + "/SupplierForm/create", + checkPermissions("fornecedores_criar"), + supplierFormController.createSupplierForm +); +routes.get( + "/SupplierForm", + checkPermissions("fornecedores_visualizar"), + supplierFormController.getSupplierForm +); +routes.get( + "/SupplierForm/:id", + checkPermissions("fornecedores_visualizar"), + supplierFormController.getSupplierFormById +); routes.delete( "/SupplierForm/delete/:id", + checkPermissions("fornecedores_deletar"), supplierFormController.deleteSupplierFormById ); routes.patch( "/SupplierForm/update/:id", + checkPermissions("fornecedores_editar"), supplierFormController.updateSupplierFormById ); + +// Rotas Movimentações Financeiras routes.post( "/financialMovements/create", + checkPermissions("movimentacao_financeira_criar"), financialMovementsController.createFinancialMovements ); routes.get( "/financialMovements", + checkPermissions("movimentacao_financeira_visualizar"), financialMovementsController.getFinancialMovements ); routes.get( "/financialMovements/:id", + checkPermissions("movimentacao_financeira_visualizar"), financialMovementsController.getFinancialMovementsById ); routes.delete( "/financialMovements/delete/:id", + checkPermissions("movimentacao_financeira_deletar"), financialMovementsController.deleteFinancialMovementsById ); routes.patch( "/financialMovements/update/:id", + checkPermissions("movimentacao_financeira_editar"), financialMovementsController.updateFinancialMovementsById ); routes.post( "/financialMovements/report", + checkPermissions("movimentacao_financeira_visualizar"), financialReportController.generateFinancialReport ); + module.exports = routes; From eb23cd484bbf04a2c52434614c997525e7d003c7 Mon Sep 17 00:00:00 2001 From: Guilherme Peixoto Date: Thu, 30 Jan 2025 20:32:00 -0300 Subject: [PATCH 2/6] init tests fixes --- src/Middlewares/accessControlMiddleware.js | 26 ++-- src/__tests__/bankAccountController.test.js | 117 +++++++++++------- .../financialMovementsController.test.js | 22 +++- src/__tests__/suppllierFormController.test.js | 20 +-- src/__tests__/utils.test.js | 77 ++++++++++++ 5 files changed, 190 insertions(+), 72 deletions(-) diff --git a/src/Middlewares/accessControlMiddleware.js b/src/Middlewares/accessControlMiddleware.js index f283d00..f92ad09 100644 --- a/src/Middlewares/accessControlMiddleware.js +++ b/src/Middlewares/accessControlMiddleware.js @@ -1,23 +1,27 @@ -const jwt = require('jsonwebtoken'); - +const jwt = require("jsonwebtoken"); const checkPermissions = (permissionName) => { return async (req, res, next) => { - try{ - const decoded = jwt.decode(req.headers.authorization?.split(" ")[1]); - - const permission = decoded._doc.permissions.find( - (perm) => perm.name === permissionName + try { + const decoded = jwt.decode( + req.headers.authorization?.split(" ")[1] + ); + if (!decoded) { + return res + .status(401) + .json({ mensagem: "Tokem não fornecido." }); + } + const permission = decoded.permissions.find( + (perm) => perm === permissionName ); - + if (!permission) { return res .status(400) .send("user has no permission to access resource"); } - next(); - } - catch(error){ + next(); + } catch (error) { next(error); } }; diff --git a/src/__tests__/bankAccountController.test.js b/src/__tests__/bankAccountController.test.js index a7b0da5..9767a4f 100644 --- a/src/__tests__/bankAccountController.test.js +++ b/src/__tests__/bankAccountController.test.js @@ -3,10 +3,14 @@ const express = require("express"); const mongoose = require("mongoose"); const { MongoMemoryServer } = require("mongodb-memory-server"); const bankAccountRouter = require("../routes"); // Atualize o caminho para o arquivo de rotas +const { mockedToken } = require('./utils.test') + let mongoServer; let app = express(); + + beforeAll(async () => { mongoServer = await MongoMemoryServer.create(); const uri = mongoServer.getUri(); @@ -24,10 +28,13 @@ afterAll(async () => { await mongoServer.stop(); }); + + describe("BankAccount API", () => { - it("should create a new bank account", async () => { + it("should create a new bank account", async () => { const response = await request(app) - .post("/finance/createBankAccount") // Atualize o caminho da rota + .post("/finance/createBankAccount") + .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ formData: { name: "Conta Teste", @@ -38,15 +45,14 @@ describe("BankAccount API", () => { }, }); - console.log("Create Response:", response); // Adicione um log para depuração - expect(response.status).toBe(201); expect(response.body).toHaveProperty("name", "Conta Teste"); }); it("should not create a bank account with an existing name", async () => { await request(app) - .post("/finance/createBankAccount") // Atualize o caminho da rota + .post("/finance/createBankAccount") + .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ formData: { name: "Conta Teste", @@ -58,7 +64,8 @@ describe("BankAccount API", () => { }); const response = await request(app) - .post("/finance/createBankAccount") // Atualize o caminho da rota + .post("/finance/createBankAccount") + .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ formData: { name: "Conta Teste", @@ -76,6 +83,7 @@ describe("BankAccount API", () => { it("should not create a bank account with a blank name", async () => { const response = await request(app) .post("/finance/createBankAccount") // Atualize o caminho da rota + .set("Authorization", `Bearer ${mockedToken()}`) .send({ formData: { name: "", @@ -93,6 +101,7 @@ describe("BankAccount API", () => { it("should fetch a bank account by ID", async () => { const newAccount = await request(app) .post("/finance/createBankAccount") // Atualize o caminho da rota + .set("Authorization", `Bearer ${mockedToken()}`) .send({ formData: { name: "Conta Teste ID", @@ -105,7 +114,7 @@ describe("BankAccount API", () => { const response = await request(app).get( `/finance/bankAccount/${newAccount.body._id}` - ); // Atualize o caminho da rota + ).set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota console.log("Fetch By ID Response:", response.body); // Adicione um log para depuração @@ -115,7 +124,8 @@ describe("BankAccount API", () => { it("should not fetch a bank account without ID", async () => { await request(app) - .post("/finance/createBankAccount") // Atualize o caminho da rota + .post("/finance/createBankAccount") + .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ formData: { name: "Conta Teste ID", @@ -126,14 +136,14 @@ describe("BankAccount API", () => { }, }); - const response = await request(app).get(`/finance/bankAccount/${null}`); // Atualize o caminho da rota + const response = await request(app).get(`/finance/bankAccount/${null}`).set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota console.log("Fetch By ID Response:", response.body); // Adicione um log para depuração expect(response.status).toBe(500); }); it("should fetch all bank accounts", async () => { - const response = await request(app).get("/finance/getBankAccount"); // Atualize o caminho da rota + const response = await request(app).get("/finance/getBankAccount").set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota console.log("Fetch All Response:", response.body); // Adicione um log para depuração @@ -143,7 +153,8 @@ describe("BankAccount API", () => { it("should update a bank account", async () => { const newAccount = await request(app) - .post("/finance/createBankAccount") // Atualize o caminho da rota + .post("/finance/createBankAccount") + .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ formData: { name: "Conta a ser Atualizada", @@ -155,7 +166,8 @@ describe("BankAccount API", () => { }); const response = await request(app) - .patch(`/finance/updateBankAccount/${newAccount.body._id}`) // Atualize o caminho da rota + .patch(`/finance/updateBankAccount/${newAccount.body._id}`) + .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ name: "Conta Atualizada" }); console.log("Update Response:", response.body); // Adicione um log para depuração @@ -166,7 +178,8 @@ describe("BankAccount API", () => { it("should not update a bank account without id", async () => { await request(app) - .post("/finance/createBankAccount") // Atualize o caminho da rota + .post("/finance/createBankAccount") + .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ formData: { name: "Conta a ser Atualizada", @@ -178,7 +191,8 @@ describe("BankAccount API", () => { }); const response = await request(app) - .patch(`/finance/updateBankAccount/${null}`) // Atualize o caminho da rota + .patch(`/finance/updateBankAccount/${null}`) + .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ name: "Conta Atualizada" }); console.log("Update Response:", response.body); // Adicione um log para depuração @@ -188,7 +202,8 @@ describe("BankAccount API", () => { it("should delete a bank account", async () => { const newAccount = await request(app) - .post("/finance/createBankAccount") // Atualize o caminho da rota + .post("/finance/createBankAccount") + .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ formData: { name: "Conta a ser Deletada", @@ -201,7 +216,7 @@ describe("BankAccount API", () => { const response = await request(app).delete( `/finance/deleteBankAccount/${newAccount.body._id}` - ); // Atualize o caminho da rota + ).set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota console.log("Delete Response:", response.body); // Adicione um log para depuração @@ -211,7 +226,7 @@ describe("BankAccount API", () => { it("should delete a bank account", async () => { const response = await request(app).delete( `/finance/deleteBankAccount/${null}` - ); // Atualize o caminho da rota + ).set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota expect(response.status).toBe(500); }); @@ -221,13 +236,13 @@ describe("BankAccount API", () => { const response = await request(app).get( `/finance/getBankAccountbyId/${invalidId}` - ); + ).set("Authorization", `Bearer ${mockedToken()}`); expect(response.status).toBe(404); }); }); it("should return 500 when fetching a bank account with invalid ID", async () => { - const response = await request(app).get(`/finance/bankAccount/${null}`); + const response = await request(app).get(`/finance/bankAccount/${null}`).set("Authorization", `Bearer ${mockedToken()}`); expect(response.status).toBe(500); expect(response.body.error).toBe("ID inválido ou ausente"); @@ -235,52 +250,58 @@ it("should return 500 when fetching a bank account with invalid ID", async () => it("should return 500 when updating a bank account with invalid ID", async () => { const response = await request(app) .patch(`/finance/updateBankAccount/${null}`) + .set("Authorization", `Bearer ${mockedToken()}`) .send({ name: "Conta Atualizada" }); expect(response.status).toBe(500); expect(response.body.error).toBe("ID inválido ou ausente"); }); - it("should delete a bank account", async () => { +it("should delete a bank account", async () => { const newAccount = await request(app) .post("/finance/createBankAccount") + .set("Authorization", `Bearer ${mockedToken()}`) .send({ formData: { - name: "Conta a ser Deletada", + name: "Conta a ser Deletada 2", bank: "Banco Teste Deletar", - + accaccountNumber: "33333333", status: "Ativo", accountType: "Conta Corrente", }, - }); const response = await request(app).delete( + }); + + console.log("TESTEEEEEEEEEEEEEEEE", newAccount.body) + + const response = await request(app).delete( `/finance/deleteBankAccount/${newAccount.body._id}` - ); + ).set("Authorization", `Bearer ${mockedToken()}`); - expect(response.status).toBe(200); - expect(response.body.message).toBe("Conta deletada com sucesso"); - }); + expect(response.status).toBe(200); + expect(response.body.message).toBe("Conta deletada com sucesso"); +}); - it("should return 500 when deleting a bank account with invalid ID", async () => { - const response = await request(app).delete(`/finance/deleteBankAccount/${null}`); +it("should return 500 when deleting a bank account with invalid ID", async () => { + const response = await request(app).delete(`/finance/deleteBankAccount/${null}`).set("Authorization", `Bearer ${mockedToken()}`); - expect(response.status).toBe(500); - expect(response.body.error).toBe("ID inválido ou ausente"); - }); + expect(response.status).toBe(500); + expect(response.body.error).toBe("ID inválido ou ausente"); +}); - it("should return 500 if the name is invalid", async () => { - const response = await request(app) - .post("/finance/createBankAccount") - .send({ - formData: { - name: 12345, // Tipo inválido - bank: "Banco Teste", - accountNumber: "98765432", - status: "Ativo", - accountType: "Conta Corrente", - }, - }); +it("should return 500 if the name is invalid", async () => { + const response = await request(app) + .post("/finance/createBankAccount") + .set("Authorization", `Bearer ${mockedToken()}`) + .send({ + formData: { + name: 12345, // Tipo inválido + bank: "Banco Teste", + accountNumber: "98765432", + status: "Ativo", + accountType: "Conta Corrente", + }, + }); - expect(response.status).toBe(500); - expect(response.body.error).toBe("Tipo de dado incorreto"); - }); - \ No newline at end of file + expect(response.status).toBe(500); + expect(response.body.error).toBe("Tipo de dado incorreto"); +}); diff --git a/src/__tests__/financialMovementsController.test.js b/src/__tests__/financialMovementsController.test.js index 74a4595..2d8d289 100644 --- a/src/__tests__/financialMovementsController.test.js +++ b/src/__tests__/financialMovementsController.test.js @@ -5,6 +5,7 @@ const cors = require("cors"); const routes = require("../routes"); const financialMovementsModel = require("../Models/financialMovementsSchema"); const { MongoMemoryServer } = require("mongodb-memory-server"); +const { mockedToken } = require('./utils.test') let mongoServer; let app = express(); @@ -42,6 +43,7 @@ describe("FinancialMovements API", () => { it("should create a new financial movement", async () => { const res = await request(app) .post("/financialMovements/create") + .set("Authorization", `Bearer ${mockedToken()}`) .send({ financialMovementsData: { contaOrigem: "12345", @@ -69,6 +71,7 @@ describe("FinancialMovements API", () => { it("should get financial movement by id", async () => { const { body: createdFMovements } = await request(app) .post("/financialMovements/create") + .set("Authorization", `Bearer ${mockedToken()}`) .send({ financialMovementsData: { contaOrigem: "12345", @@ -92,7 +95,7 @@ describe("FinancialMovements API", () => { const res = await request(app).get( `/financialMovements/${createdFMovements._id}` - ); + ).set("Authorization", `Bearer ${mockedToken()}`); expect(res.body).toMatchObject(createdFMovements); expect(res.status).toBe(200); @@ -101,7 +104,7 @@ describe("FinancialMovements API", () => { it("should get financial movements", async () => { const financialMovementsModelCount = await financialMovementsModel.countDocuments({}); - const res = await request(app).get("/financialMovements"); + const res = await request(app).get("/financialMovements").set("Authorization", `Bearer ${mockedToken()}`); expect(res.body.length).toBe(financialMovementsModelCount); expect(res.status).toBe(200); @@ -110,6 +113,7 @@ describe("FinancialMovements API", () => { it("should delete financial movement", async () => { const { body: createdFMovements } = await request(app) .post("/financialMovements/create") + .set("Authorization", `Bearer ${mockedToken()}`) .send({ financialMovementsData: { contaOrigem: "12345", @@ -133,7 +137,7 @@ describe("FinancialMovements API", () => { const res = await request(app).delete( `/financialMovements/delete/${createdFMovements._id}` - ); + ).set("Authorization", `Bearer ${mockedToken()}`); expect(res.body).toMatchObject(createdFMovements); expect(res.status).toBe(200); @@ -142,6 +146,7 @@ describe("FinancialMovements API", () => { it("should update financial movement", async () => { const { body: createdFMovements } = await request(app) .post("/financialMovements/create") + .set("Authorization", `Bearer ${mockedToken()}`) .send({ financialMovementsData: { contaOrigem: "12345", @@ -165,7 +170,7 @@ describe("FinancialMovements API", () => { const res = await request(app).patch( `/financialMovements/update/${createdFMovements._id}` - ); + ).set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(200); }); @@ -173,6 +178,7 @@ describe("FinancialMovements API", () => { it("should reject creating financial movement with missing data", async () => { const res = await request(app) .post("/financialMovements/create") + .set("Authorization", `Bearer ${mockedToken()}`) .send({}); // Enviar dados incompletos expect(res.status).toBe(400); @@ -180,7 +186,7 @@ describe("FinancialMovements API", () => { }); it("should return 404 if financial movement not found on GET by ID", async () => { const nonExistingId = "60f8e8b1d3b99c4b8c6c3bbd"; // ID fictício - const res = await request(app).get(`/financialMovements/${nonExistingId}`); + const res = await request(app).get(`/financialMovements/${nonExistingId}`).set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(404); expect(res.body).toHaveProperty("error", "Financial Movement not found"); @@ -188,7 +194,7 @@ describe("FinancialMovements API", () => { it("should return 404 if financial movement not found on DELETE", async () => { const nonExistingId = "60f8e8b1d3b99c4b8c6c3bbd"; // ID fictício - const res = await request(app).delete(`/financialMovements/delete/${nonExistingId}`); + const res = await request(app).delete(`/financialMovements/delete/${nonExistingId}`).set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(404); expect(res.body).toHaveProperty("error", "Financial Movement not found"); @@ -196,6 +202,7 @@ describe("FinancialMovements API", () => { it("should update a financial movement with partial data", async () => { const { body: createdFMovements } = await request(app) .post("/financialMovements/create") + .set("Authorization", `Bearer ${mockedToken()}`) .send({ financialMovementsData: { contaOrigem: "12345", @@ -223,6 +230,7 @@ describe("FinancialMovements API", () => { const res = await request(app) .patch(`/financialMovements/update/${createdFMovements._id}`) + .set("Authorization", `Bearer ${mockedToken()}`) .send({ financialMovementsData: updatedData }); expect(res.status).toBe(200); @@ -233,6 +241,7 @@ describe("FinancialMovements API", () => { it("should update 'baixada' status", async () => { const { body: createdFMovements } = await request(app) .post("/financialMovements/create") + .set("Authorization", `Bearer ${mockedToken()}`) .send({ financialMovementsData: { contaOrigem: "12345", @@ -255,6 +264,7 @@ describe("FinancialMovements API", () => { const res = await request(app) .patch(`/financialMovements/update/${createdFMovements._id}`) + .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ financialMovementsData: { baixada: true } }); expect(res.status).toBe(200); diff --git a/src/__tests__/suppllierFormController.test.js b/src/__tests__/suppllierFormController.test.js index 2b17c38..193666b 100644 --- a/src/__tests__/suppllierFormController.test.js +++ b/src/__tests__/suppllierFormController.test.js @@ -4,6 +4,7 @@ const mongoose = require("mongoose"); const cors = require("cors"); const routes = require("../routes"); const { MongoMemoryServer } = require("mongodb-memory-server"); +const { mockedToken } = require('./utils.test') const app = express(); let mongoServer; @@ -45,6 +46,7 @@ describe("Supplier Form Controller Tests", () => { it("should create a new supplier form", async () => { const res = await request(app) .post("/SupplierForm/create") + .set("Authorization", `Bearer ${mockedToken()}`) .send({ supplierData: { nome: "Test Supplier", @@ -79,6 +81,7 @@ describe("Supplier Form Controller Tests", () => { it("should fail create a new supplier form without name", async () => { const res = await request(app) .post("/SupplierForm/create") + .set("Authorization", `Bearer ${mockedToken()}`) .send({ supplierData: { nome: "", @@ -107,21 +110,21 @@ describe("Supplier Form Controller Tests", () => { }); it("should get all supplier forms", async () => { - const res = await request(app).get("/SupplierForm"); + const res = await request(app).get("/SupplierForm").set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(200); expect(Array.isArray(res.body)).toBe(true); }); it("should get a supplier form by ID", async () => { - const res = await request(app).get(`/SupplierForm/${supplierId}`); + const res = await request(app).get(`/SupplierForm/${supplierId}`).set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(200); expect(res.body).toHaveProperty("nome", "Test Supplier"); }); it("should fail get a supplier form without ID", async () => { - const res = await request(app).get(`/SupplierForm/${null}`); + const res = await request(app).get(`/SupplierForm/${null}`).set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(400); }); @@ -129,6 +132,7 @@ describe("Supplier Form Controller Tests", () => { it("should update a supplier form by ID", async () => { const res = await request(app) .patch(`/SupplierForm/update/${supplierId}`) + .set("Authorization", `Bearer ${mockedToken()}`) .send({ supplierData: { nome: "Updated Supplier" } }); expect(res.status).toBe(200); @@ -138,6 +142,7 @@ describe("Supplier Form Controller Tests", () => { it("should fail to update a supplier form without ID", async () => { const res = await request(app) .patch(`/SupplierForm/update/${null}`) + .set("Authorization", `Bearer ${mockedToken()}`) .send({ supplierData: { nome: "Updated Supplier" } }); expect(res.status).toBe(400); @@ -146,26 +151,27 @@ describe("Supplier Form Controller Tests", () => { it("should delete a supplier form by ID", async () => { const res = await request(app).delete( `/SupplierForm/delete/${supplierId}` - ); + ).set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(200); const checkSupplier = await request(app).get( `/SupplierForm/delete/${supplierId}` - ); + ).set("Authorization", `Bearer ${mockedToken()}`); expect(checkSupplier.status).toBe(404); }); it("should fail to delete a supplier form without ID", async () => { const res = await request(app).delete( `/SupplierForm/delete/${supplierId}` - ); + ).set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota + ; expect(res.status).toBe(200); const checkSupplier = await request(app).get( `/SupplierForm/delete/${supplierId}` - ); + ).set("Authorization", `Bearer ${mockedToken()}`); expect(checkSupplier.status).toBe(404); }); }); diff --git a/src/__tests__/utils.test.js b/src/__tests__/utils.test.js index 299aa79..4f29076 100644 --- a/src/__tests__/utils.test.js +++ b/src/__tests__/utils.test.js @@ -1,4 +1,80 @@ const { validator } = require("../Util/utils"); +const jwt = require("jsonwebtoken"); +require("dotenv").config(); + +mockedToken = () =>{ + let jwtTemp = { + "id": "6783471ed9b501ccc074f977", + "_id": "6783471ed9b501ccc074f96a", + "name": "administrador", + "permissions": [ + "perfis_editar", + "perfis_deletar", + "perfis_visualizar", + "orgaos_criar", + "orgaos_editar", + "orgaos_deletar", + "orgaos_visualizar", + "fornecedores_criar", + "fornecedores_editar", + "fornecedores_deletar", + "fornecedores_visualizar", + "contas_bancarias_criar", + "contas_bancarias_editar", + "contas_bancarias_deletar", + "contas_bancarias_visualizar", + "movimentacao_financeira_criar", + "movimentacao_financeira_editar", + "movimentacao_financeira_deletar", + "movimentacao_financeira_visualizar", + "permissoes_criar", + "permissoes_editar", + "permissoes_deletar", + "permissoes_visualizar", + "beneficios_criar", + "beneficios_visualizar", + "beneficios_editar", + "beneficios_deletar", + "usuarios_visualizar", + "usuarios_editar", + "usuarios_deletar", + "usuarios_criar", + "create", + "read", + "update", + "delete", + "usuarios_visualizar_historico\t", + "associados_criar", + "associados_deletar", + "associados_editar", + "associados_visualizar", + "perfis_criar", + "filiados_cadastrar", + "usuarios_visualizar_historico", + "sindicalizado_visualizar_status", + "filiado_visualizar_carteirinha" + ] + , + "user": { + "situation": "", + "description": "", + "_id": "6783471ed9b501ccc074f977", + "name": "Admin", + "email": "admin@admin.com", + "phone": "1234567890", + "role": "6783471ed9b501ccc074f96a", + "status": true, + "isProtected": true, + "createdAt": "2025-01-12T04:37:50.966Z", + "updatedAt": "2025-01-12T04:37:50.966Z", + "__v": 0 + }, + } + const token = jwt.sign(jwtTemp, process.env.SECRET, { + expiresIn: "30d", + }); + return token.trim(); +} describe("Supplier Data Validator", () => { it("should return an error for invalid nome", () => { @@ -136,3 +212,4 @@ describe("Supplier Data Validator", () => { expect(result).toBeNull(); }); }); +module.exports = { mockedToken } \ No newline at end of file From 23ae4a8130664ca189ce63174c56f97490fe153e Mon Sep 17 00:00:00 2001 From: Guilherme Peixoto Date: Thu, 30 Jan 2025 20:34:04 -0300 Subject: [PATCH 3/6] adding default project secret --- src/__tests__/utils.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/__tests__/utils.test.js b/src/__tests__/utils.test.js index 4f29076..a444b02 100644 --- a/src/__tests__/utils.test.js +++ b/src/__tests__/utils.test.js @@ -70,7 +70,7 @@ mockedToken = () =>{ "__v": 0 }, } - const token = jwt.sign(jwtTemp, process.env.SECRET, { + const token = jwt.sign(jwtTemp, process.env.SECRET ?? 'S3T1N3L3L4', { expiresIn: "30d", }); return token.trim(); From db9e5f75dc3a7b4d3b8c92963de2d7bb306e74e1 Mon Sep 17 00:00:00 2001 From: Guilherme Peixoto Date: Thu, 30 Jan 2025 20:36:20 -0300 Subject: [PATCH 4/6] added forced .env --- .env | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..91489f8 --- /dev/null +++ b/.env @@ -0,0 +1,10 @@ +# CHANGE ALL VARIABLES ON DEPLOY + +NODE_ENV=development +MONGO_URI=mongodb://root:password@financedb:27017/ +MONGO_INITDB_ROOT_USERNAME=root +MONGO_INITDB_ROOT_PASSWORD=password +DB_HOST=financedb +PORT=3002 +BACK_USERS_URL=http://127.0.0.1:3001/ +SECRET = S3T1N3L3L4 From 711dcaff65182ce4c0b2bc46874536e80d550d04 Mon Sep 17 00:00:00 2001 From: Guilherme Peixoto Date: Thu, 30 Jan 2025 20:38:28 -0300 Subject: [PATCH 5/6] fixing tests on deploy attempt --- src/__tests__/bankAccountController.test.js | 1 - src/__tests__/utils.test.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/__tests__/bankAccountController.test.js b/src/__tests__/bankAccountController.test.js index 9767a4f..5fa42de 100644 --- a/src/__tests__/bankAccountController.test.js +++ b/src/__tests__/bankAccountController.test.js @@ -271,7 +271,6 @@ it("should delete a bank account", async () => { }, }); - console.log("TESTEEEEEEEEEEEEEEEE", newAccount.body) const response = await request(app).delete( `/finance/deleteBankAccount/${newAccount.body._id}` diff --git a/src/__tests__/utils.test.js b/src/__tests__/utils.test.js index a444b02..401b0a0 100644 --- a/src/__tests__/utils.test.js +++ b/src/__tests__/utils.test.js @@ -70,7 +70,7 @@ mockedToken = () =>{ "__v": 0 }, } - const token = jwt.sign(jwtTemp, process.env.SECRET ?? 'S3T1N3L3L4', { + const token = jwt.sign(jwtTemp, 'S3T1N3L3L4', { expiresIn: "30d", }); return token.trim(); From e869908f9c36ae58dc04a5075ff74e21f56757a1 Mon Sep 17 00:00:00 2001 From: Guilherme Peixoto Date: Thu, 30 Jan 2025 20:41:40 -0300 Subject: [PATCH 6/6] fixing tests on deploy attempt --- src/Controllers/bankAccountController.js | 2 - .../financialMovementsController.js | 7 +- src/Controllers/financialReportController.js | 10 +- src/Models/csvGenerator.js | 32 ++- src/__tests__/bankAccountController.test.js | 58 ++--- src/__tests__/csvGenerator.test.js | 221 ++++++++++------- .../financialMovementsController.test.js | 62 +++-- .../financialReportController.test.js | 226 ++++++++++-------- src/__tests__/suppllierFormController.test.js | 40 ++-- src/__tests__/utils.test.js | 141 ++++++----- src/routes.js | 4 +- 11 files changed, 447 insertions(+), 356 deletions(-) diff --git a/src/Controllers/bankAccountController.js b/src/Controllers/bankAccountController.js index daf3f21..de66c7a 100644 --- a/src/Controllers/bankAccountController.js +++ b/src/Controllers/bankAccountController.js @@ -65,10 +65,8 @@ const getBankAccountbyId = async (req, res) => { } }; - const deleteBankAccount = async (req, res) => { try { - const { id } = req.params; if (!id || !mongoose.Types.ObjectId.isValid(id)) { diff --git a/src/Controllers/financialMovementsController.js b/src/Controllers/financialMovementsController.js index 4266681..d2ff926 100644 --- a/src/Controllers/financialMovementsController.js +++ b/src/Controllers/financialMovementsController.js @@ -4,7 +4,6 @@ const validateCPF = (cpf) => { return /\d{3}\.\d{3}\.\d{3}-\d{2}/.test(cpf); }; - const createFinancialMovements = async (req, res) => { try { console.log("Dados recebidos:", req.body); @@ -13,10 +12,10 @@ const createFinancialMovements = async (req, res) => { return res.status(400).send({ error: "No data provided" }); } if (!validateCPF(financialMovementsData.cpFCnpj)) { - return res.status(400).send({ error: "Invalid CPF" }); + return res.status(400).send({ error: "Invalid CPF" }); } - if (!financialMovementsData.contaOrigem) { - throw new Error("Database error"); + if (!financialMovementsData.contaOrigem) { + throw new Error("Database error"); } // Criação da movimentação financeira diff --git a/src/Controllers/financialReportController.js b/src/Controllers/financialReportController.js index 5ec04fa..5b9255c 100644 --- a/src/Controllers/financialReportController.js +++ b/src/Controllers/financialReportController.js @@ -64,9 +64,9 @@ const generateFinancialReport = async (req, res) => { const query = { sitPagamento: sanitizedSitPagamento, datadeVencimento: { - $gte: new Date(dataInicio), - $lte: new Date(dataFinal), - } + $gte: new Date(dataInicio), + $lte: new Date(dataFinal), + }, }; if (sanitizedNomeOrigem) query.nomeOrigem = sanitizedNomeOrigem; if (sanitizedContaOrigem) query.contaOrigem = sanitizedContaOrigem; @@ -80,7 +80,7 @@ const generateFinancialReport = async (req, res) => { if (req.body.contaOrigem) { query.contaOrigem = req.body.contaOrigem; } - + if (sanitizedSitPagamento) { const today = new Date(); // Data atual @@ -93,7 +93,7 @@ const generateFinancialReport = async (req, res) => { { datadePagamento: { $eq: null } }, { datadePagamento: { $gt: today } }, ]; - }else { + } else { delete query.datadePagamento; } } diff --git a/src/Models/csvGenerator.js b/src/Models/csvGenerator.js index 8720916..2b850a7 100644 --- a/src/Models/csvGenerator.js +++ b/src/Models/csvGenerator.js @@ -13,7 +13,11 @@ const formatNumericDate = (date) => { return `${day}/${month}/${year}`; }; -const generateFinancialReportCSV = (financialMovements, filePath, includeFields) => { +const generateFinancialReportCSV = ( + financialMovements, + filePath, + includeFields +) => { return new Promise((resolve, reject) => { try { if (financialMovements.length === 0) { @@ -22,7 +26,10 @@ const generateFinancialReportCSV = (financialMovements, filePath, includeFields) } const allFields = { - tipoDocumento: { label: "Tipo Documento", value: "tipoDocumento" }, + tipoDocumento: { + label: "Tipo Documento", + value: "tipoDocumento", + }, valorBruto: { label: "Valor Bruto", value: "valorBruto" }, valorLiquido: { label: "Valor Líquido", value: "valorLiquido" }, contaOrigem: { label: "Conta Origem", value: "contaOrigem" }, @@ -37,37 +44,42 @@ const generateFinancialReportCSV = (financialMovements, filePath, includeFields) label: "Data de Pagamento", value: (row) => formatNumericDate(row.datadePagamento), }, - formaPagamento: { label: "Forma de Pagamento", value: "formaPagamento" }, + formaPagamento: { + label: "Forma de Pagamento", + value: "formaPagamento", + }, sitPagamento: { label: "Situação de Pagamento", value: (row) => { // Verificar se a linha ou o campo de data está ausente ou inválido if (!row || row.datadePagamento == null) { console.log("Linha sem data de pagamento:", row); // Log para debugar - return "Não pago"; // Retorna 'Não pago' se não houver data + return "Não pago"; // Retorna 'Não pago' se não houver data } - + // Verificar se a data é válida const paymentDate = new Date(row.datadePagamento); if (isNaN(paymentDate.getTime())) { console.log("Data inválida:", row.datadePagamento); // Log para debugar - return "Não pago"; // Retorna 'Não pago' se a data for inválida + return "Não pago"; // Retorna 'Não pago' se a data for inválida } - + const today = new Date(); return paymentDate <= today ? "Pago" : "Não pago"; }, }, - + descricao: { label: "Descrição", value: "descricao" }, }; - + if (!includeFields || includeFields.length === 0) { fs.writeFileSync(filePath, ""); return resolve(); } - const fields = includeFields.map((field) => allFields[field]).filter(Boolean); + const fields = includeFields + .map((field) => allFields[field]) + .filter(Boolean); if (fields.length === 0) { fs.writeFileSync(filePath, ""); diff --git a/src/__tests__/bankAccountController.test.js b/src/__tests__/bankAccountController.test.js index 5fa42de..4071b7d 100644 --- a/src/__tests__/bankAccountController.test.js +++ b/src/__tests__/bankAccountController.test.js @@ -3,14 +3,11 @@ const express = require("express"); const mongoose = require("mongoose"); const { MongoMemoryServer } = require("mongodb-memory-server"); const bankAccountRouter = require("../routes"); // Atualize o caminho para o arquivo de rotas -const { mockedToken } = require('./utils.test') - +const { mockedToken } = require("./utils.test"); let mongoServer; let app = express(); - - beforeAll(async () => { mongoServer = await MongoMemoryServer.create(); const uri = mongoServer.getUri(); @@ -28,10 +25,8 @@ afterAll(async () => { await mongoServer.stop(); }); - - describe("BankAccount API", () => { - it("should create a new bank account", async () => { + it("should create a new bank account", async () => { const response = await request(app) .post("/finance/createBankAccount") .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota @@ -112,9 +107,9 @@ describe("BankAccount API", () => { }, }); - const response = await request(app).get( - `/finance/bankAccount/${newAccount.body._id}` - ).set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota + const response = await request(app) + .get(`/finance/bankAccount/${newAccount.body._id}`) + .set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota console.log("Fetch By ID Response:", response.body); // Adicione um log para depuração @@ -136,14 +131,18 @@ describe("BankAccount API", () => { }, }); - const response = await request(app).get(`/finance/bankAccount/${null}`).set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota + const response = await request(app) + .get(`/finance/bankAccount/${null}`) + .set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota console.log("Fetch By ID Response:", response.body); // Adicione um log para depuração expect(response.status).toBe(500); }); it("should fetch all bank accounts", async () => { - const response = await request(app).get("/finance/getBankAccount").set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota + const response = await request(app) + .get("/finance/getBankAccount") + .set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota console.log("Fetch All Response:", response.body); // Adicione um log para depuração @@ -214,9 +213,9 @@ describe("BankAccount API", () => { }, }); - const response = await request(app).delete( - `/finance/deleteBankAccount/${newAccount.body._id}` - ).set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota + const response = await request(app) + .delete(`/finance/deleteBankAccount/${newAccount.body._id}`) + .set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota console.log("Delete Response:", response.body); // Adicione um log para depuração @@ -224,9 +223,9 @@ describe("BankAccount API", () => { expect(response.body.message).toBe("Conta deletada com sucesso"); }); it("should delete a bank account", async () => { - const response = await request(app).delete( - `/finance/deleteBankAccount/${null}` - ).set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota + const response = await request(app) + .delete(`/finance/deleteBankAccount/${null}`) + .set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota expect(response.status).toBe(500); }); @@ -234,15 +233,17 @@ describe("BankAccount API", () => { it("should return 404 if bank account is not found by ID", async () => { const invalidId = new mongoose.Types.ObjectId(); // Gerar um ID válido, mas que não está no banco - const response = await request(app).get( - `/finance/getBankAccountbyId/${invalidId}` - ).set("Authorization", `Bearer ${mockedToken()}`); + const response = await request(app) + .get(`/finance/getBankAccountbyId/${invalidId}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(response.status).toBe(404); }); }); it("should return 500 when fetching a bank account with invalid ID", async () => { - const response = await request(app).get(`/finance/bankAccount/${null}`).set("Authorization", `Bearer ${mockedToken()}`); + const response = await request(app) + .get(`/finance/bankAccount/${null}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(response.status).toBe(500); expect(response.body.error).toBe("ID inválido ou ausente"); @@ -270,18 +271,19 @@ it("should delete a bank account", async () => { accountType: "Conta Corrente", }, }); - - - const response = await request(app).delete( - `/finance/deleteBankAccount/${newAccount.body._id}` - ).set("Authorization", `Bearer ${mockedToken()}`); + + const response = await request(app) + .delete(`/finance/deleteBankAccount/${newAccount.body._id}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(response.status).toBe(200); expect(response.body.message).toBe("Conta deletada com sucesso"); }); it("should return 500 when deleting a bank account with invalid ID", async () => { - const response = await request(app).delete(`/finance/deleteBankAccount/${null}`).set("Authorization", `Bearer ${mockedToken()}`); + const response = await request(app) + .delete(`/finance/deleteBankAccount/${null}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(response.status).toBe(500); expect(response.body.error).toBe("ID inválido ou ausente"); diff --git a/src/__tests__/csvGenerator.test.js b/src/__tests__/csvGenerator.test.js index 660d320..f3bf1a1 100644 --- a/src/__tests__/csvGenerator.test.js +++ b/src/__tests__/csvGenerator.test.js @@ -27,131 +27,166 @@ test("deve gerar CSV corretamente com apenas um campo incluído", async () => { return `"${fields.join('","')}"\n${rows.join("\n")}`; }); - const writeFileSyncMock = jest.spyOn(fs, "writeFileSync").mockImplementation(() => {}); + const writeFileSyncMock = jest + .spyOn(fs, "writeFileSync") + .mockImplementation(() => {}); const expectedCsv = `"Tipo Documento"\n"Fatura"\n"Nota"`; - await generateFinancialReportCSV(financialMovements, filePath, includeFields); + await generateFinancialReportCSV( + financialMovements, + filePath, + includeFields + ); expect(writeFileSyncMock).toHaveBeenCalledWith(filePath, expectedCsv); - }); - - - test("deve retornar CSV vazio se campos inválidos forem passados", async () => { +}); + +test("deve retornar CSV vazio se campos inválidos forem passados", async () => { const financialMovements = [ - { - tipoDocumento: "Fatura", - valorBruto: 1000, - }, + { + tipoDocumento: "Fatura", + valorBruto: 1000, + }, ]; - + const includeFields = ["campoInvalido"]; // Campo inválido const filePath = "/caminho/para/arquivo.csv"; - - const writeFileSyncMock = jest.spyOn(fs, "writeFileSync").mockImplementation(() => {}); - - await generateFinancialReportCSV(financialMovements, filePath, includeFields); - + + const writeFileSyncMock = jest + .spyOn(fs, "writeFileSync") + .mockImplementation(() => {}); + + await generateFinancialReportCSV( + financialMovements, + filePath, + includeFields + ); + expect(writeFileSyncMock).toHaveBeenCalledWith(filePath, ""); - }); - - test("deve gerar CSV vazio se não houver movimentos financeiros", async () => { +}); + +test("deve gerar CSV vazio se não houver movimentos financeiros", async () => { const financialMovements = []; const includeFields = ["tipoDocumento"]; const filePath = "/caminho/para/arquivo.csv"; - const writeFileSyncMock = jest.spyOn(fs, "writeFileSync").mockImplementation(() => {}); + const writeFileSyncMock = jest + .spyOn(fs, "writeFileSync") + .mockImplementation(() => {}); - await generateFinancialReportCSV(financialMovements, filePath, includeFields); + await generateFinancialReportCSV( + financialMovements, + filePath, + includeFields + ); expect(writeFileSyncMock).toHaveBeenCalledWith(filePath, ""); - }); +}); - test("deve gerar CSV vazio se não houver campos para incluir", async () => { +test("deve gerar CSV vazio se não houver campos para incluir", async () => { const financialMovements = [ - { - tipoDocumento: "Fatura", - valorBruto: 1000, - valorLiquido: 900, - contaOrigem: "1234", - nomeOrigem: "Empresa A", - contaDestino: "5678", - nomeDestino: "Empresa B", - datadeVencimento: "2024-01-01", - datadePagamento: "2024-01-10", - formadePagamento: "Boleto", - sitPagamento: "Pago", - descricao: "Pagamento de serviços", - }, + { + tipoDocumento: "Fatura", + valorBruto: 1000, + valorLiquido: 900, + contaOrigem: "1234", + nomeOrigem: "Empresa A", + contaDestino: "5678", + nomeDestino: "Empresa B", + datadeVencimento: "2024-01-01", + datadePagamento: "2024-01-10", + formadePagamento: "Boleto", + sitPagamento: "Pago", + descricao: "Pagamento de serviços", + }, ]; const includeFields = []; // Nenhum campo incluído const filePath = "/caminho/para/arquivo.csv"; - const writeFileSyncMock = jest.spyOn(fs, "writeFileSync").mockImplementation(() => {}); + const writeFileSyncMock = jest + .spyOn(fs, "writeFileSync") + .mockImplementation(() => {}); - await generateFinancialReportCSV(financialMovements, filePath, includeFields); + await generateFinancialReportCSV( + financialMovements, + filePath, + includeFields + ); expect(writeFileSyncMock).toHaveBeenCalledWith(filePath, ""); - }); +}); - test("deve retornar CSV vazio se campos inválidos forem passados", async () => { +test("deve retornar CSV vazio se campos inválidos forem passados", async () => { const financialMovements = [ - { - tipoDocumento: "Fatura", - valorBruto: 1000, - valorLiquido: 900, - contaOrigem: "1234", - nomeOrigem: "Empresa A", - contaDestino: "5678", - nomeDestino: "Empresa B", - datadeVencimento: "2024-01-01", - datadePagamento: "2024-01-10", - formadePagamento: "Boleto", - sitPagamento: "Pago", - descricao: "Pagamento de serviços", - }, + { + tipoDocumento: "Fatura", + valorBruto: 1000, + valorLiquido: 900, + contaOrigem: "1234", + nomeOrigem: "Empresa A", + contaDestino: "5678", + nomeDestino: "Empresa B", + datadeVencimento: "2024-01-01", + datadePagamento: "2024-01-10", + formadePagamento: "Boleto", + sitPagamento: "Pago", + descricao: "Pagamento de serviços", + }, ]; const includeFields = ["invalidField"]; // Campo inválido const filePath = "/caminho/para/arquivo.csv"; - const writeFileSyncMock = jest.spyOn(fs, "writeFileSync").mockImplementation(() => {}); + const writeFileSyncMock = jest + .spyOn(fs, "writeFileSync") + .mockImplementation(() => {}); - await generateFinancialReportCSV(financialMovements, filePath, includeFields); + await generateFinancialReportCSV( + financialMovements, + filePath, + includeFields + ); expect(writeFileSyncMock).toHaveBeenCalledWith(filePath, ""); - }); +}); - test("deve retornar erro se houver falha ao gerar o arquivo", async () => { +test("deve retornar erro se houver falha ao gerar o arquivo", async () => { const financialMovements = [ - { - tipoDocumento: "Fatura", - valorBruto: 1000, - valorLiquido: 900, - contaOrigem: "1234", - nomeOrigem: "Empresa A", - contaDestino: "5678", - nomeDestino: "Empresa B", - datadeVencimento: "2024-01-01", - datadePagamento: "2024-01-10", - formadePagamento: "Boleto", - sitPagamento: "Pago", - descricao: "Pagamento de serviços", - }, + { + tipoDocumento: "Fatura", + valorBruto: 1000, + valorLiquido: 900, + contaOrigem: "1234", + nomeOrigem: "Empresa A", + contaDestino: "5678", + nomeDestino: "Empresa B", + datadeVencimento: "2024-01-01", + datadePagamento: "2024-01-10", + formadePagamento: "Boleto", + sitPagamento: "Pago", + descricao: "Pagamento de serviços", + }, ]; const includeFields = ["tipoDocumento"]; const filePath = "/caminho/para/arquivo.csv"; const error = new Error("Erro ao salvar arquivo"); - jest.spyOn(fs, "writeFileSync").mockImplementation(() => { throw error }); + jest.spyOn(fs, "writeFileSync").mockImplementation(() => { + throw error; + }); try { - await generateFinancialReportCSV(financialMovements, filePath, includeFields); + await generateFinancialReportCSV( + financialMovements, + filePath, + includeFields + ); } catch (err) { - expect(err).toBe(error); + expect(err).toBe(error); } - }); +}); - test("deve formatar uma data válida corretamente", () => { +test("deve formatar uma data válida corretamente", () => { const date = "2024-12-16"; expect(formatNumericDate(date)).toBe("16/12/2024"); }); @@ -166,32 +201,36 @@ test("deve retornar string vazia se data não for fornecida", () => { }); test("deve gerar CSV vazio se includeFields estiver vazio", async () => { - const financialMovements = [ - { tipoDocumento: "Fatura", valorBruto: 1000 }, - ]; + const financialMovements = [{ tipoDocumento: "Fatura", valorBruto: 1000 }]; const includeFields = []; const filePath = "/caminho/para/arquivo.csv"; - const writeFileSyncMock = jest.spyOn(fs, "writeFileSync").mockImplementation(() => {}); + const writeFileSyncMock = jest + .spyOn(fs, "writeFileSync") + .mockImplementation(() => {}); - await generateFinancialReportCSV(financialMovements, filePath, includeFields); + await generateFinancialReportCSV( + financialMovements, + filePath, + includeFields + ); expect(writeFileSyncMock).toHaveBeenCalledWith(filePath, ""); }); test("deve retornar erro se a data de pagamento for inválida", () => { const financialMovements = [ - { datadePagamento: "2024-12-10" }, - { datadePagamento: "invalid-date" }, // Dados inválidos - { datadePagamento: "2024-12-12" }, + { datadePagamento: "2024-12-10" }, + { datadePagamento: "invalid-date" }, // Dados inválidos + { datadePagamento: "2024-12-12" }, ]; const includeFields = ["sitPagamento"]; const filePath = "/caminho/para/arquivo.csv"; - + try { - generateFinancialReportCSV(financialMovements, filePath, includeFields); + generateFinancialReportCSV(financialMovements, filePath, includeFields); } catch (e) { - console.log(e); // Verifique se o erro está sendo capturado - expect(e.message).toBe("Data de pagamento inválida"); + console.log(e); // Verifique se o erro está sendo capturado + expect(e.message).toBe("Data de pagamento inválida"); } - }); \ No newline at end of file +}); diff --git a/src/__tests__/financialMovementsController.test.js b/src/__tests__/financialMovementsController.test.js index 2d8d289..b1b0e93 100644 --- a/src/__tests__/financialMovementsController.test.js +++ b/src/__tests__/financialMovementsController.test.js @@ -5,7 +5,7 @@ const cors = require("cors"); const routes = require("../routes"); const financialMovementsModel = require("../Models/financialMovementsSchema"); const { MongoMemoryServer } = require("mongodb-memory-server"); -const { mockedToken } = require('./utils.test') +const { mockedToken } = require("./utils.test"); let mongoServer; let app = express(); @@ -93,9 +93,9 @@ describe("FinancialMovements API", () => { contaOrigem: "Get By ID Mock", }); - const res = await request(app).get( - `/financialMovements/${createdFMovements._id}` - ).set("Authorization", `Bearer ${mockedToken()}`); + const res = await request(app) + .get(`/financialMovements/${createdFMovements._id}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(res.body).toMatchObject(createdFMovements); expect(res.status).toBe(200); @@ -104,7 +104,9 @@ describe("FinancialMovements API", () => { it("should get financial movements", async () => { const financialMovementsModelCount = await financialMovementsModel.countDocuments({}); - const res = await request(app).get("/financialMovements").set("Authorization", `Bearer ${mockedToken()}`); + const res = await request(app) + .get("/financialMovements") + .set("Authorization", `Bearer ${mockedToken()}`); expect(res.body.length).toBe(financialMovementsModelCount); expect(res.status).toBe(200); @@ -135,9 +137,9 @@ describe("FinancialMovements API", () => { contaOrigem: "Delete By ID Mock", }); - const res = await request(app).delete( - `/financialMovements/delete/${createdFMovements._id}` - ).set("Authorization", `Bearer ${mockedToken()}`); + const res = await request(app) + .delete(`/financialMovements/delete/${createdFMovements._id}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(res.body).toMatchObject(createdFMovements); expect(res.status).toBe(200); @@ -168,9 +170,9 @@ describe("FinancialMovements API", () => { contaOrigem: "Update By ID Mock", }); - const res = await request(app).patch( - `/financialMovements/update/${createdFMovements._id}` - ).set("Authorization", `Bearer ${mockedToken()}`); + const res = await request(app) + .patch(`/financialMovements/update/${createdFMovements._id}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(200); }); @@ -180,24 +182,34 @@ describe("FinancialMovements API", () => { .post("/financialMovements/create") .set("Authorization", `Bearer ${mockedToken()}`) .send({}); // Enviar dados incompletos - + expect(res.status).toBe(400); expect(res.body).toHaveProperty("error"); }); it("should return 404 if financial movement not found on GET by ID", async () => { const nonExistingId = "60f8e8b1d3b99c4b8c6c3bbd"; // ID fictício - const res = await request(app).get(`/financialMovements/${nonExistingId}`).set("Authorization", `Bearer ${mockedToken()}`); - + const res = await request(app) + .get(`/financialMovements/${nonExistingId}`) + .set("Authorization", `Bearer ${mockedToken()}`); + expect(res.status).toBe(404); - expect(res.body).toHaveProperty("error", "Financial Movement not found"); + expect(res.body).toHaveProperty( + "error", + "Financial Movement not found" + ); }); - + it("should return 404 if financial movement not found on DELETE", async () => { const nonExistingId = "60f8e8b1d3b99c4b8c6c3bbd"; // ID fictício - const res = await request(app).delete(`/financialMovements/delete/${nonExistingId}`).set("Authorization", `Bearer ${mockedToken()}`); - + const res = await request(app) + .delete(`/financialMovements/delete/${nonExistingId}`) + .set("Authorization", `Bearer ${mockedToken()}`); + expect(res.status).toBe(404); - expect(res.body).toHaveProperty("error", "Financial Movement not found"); + expect(res.body).toHaveProperty( + "error", + "Financial Movement not found" + ); }); it("should update a financial movement with partial data", async () => { const { body: createdFMovements } = await request(app) @@ -222,17 +234,17 @@ describe("FinancialMovements API", () => { descricao: "Pagamento de serviço", }, }); - + const updatedData = { nomeOrigem: "João Silva Atualizado", valorBruto: 1200, }; - + const res = await request(app) .patch(`/financialMovements/update/${createdFMovements._id}`) .set("Authorization", `Bearer ${mockedToken()}`) .send({ financialMovementsData: updatedData }); - + expect(res.status).toBe(200); expect(res.body).toHaveProperty("nomeOrigem", "João Silva Atualizado"); expect(res.body).toHaveProperty("valorBruto", 1200); @@ -261,15 +273,13 @@ describe("FinancialMovements API", () => { descricao: "Pagamento de serviço", }, }); - + const res = await request(app) .patch(`/financialMovements/update/${createdFMovements._id}`) .set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota .send({ financialMovementsData: { baixada: true } }); - + expect(res.status).toBe(200); expect(res.body).toHaveProperty("baixada", true); }); - - }); diff --git a/src/__tests__/financialReportController.test.js b/src/__tests__/financialReportController.test.js index 6366c77..9fa2448 100644 --- a/src/__tests__/financialReportController.test.js +++ b/src/__tests__/financialReportController.test.js @@ -1,6 +1,8 @@ const path = require("path"); const fs = require("fs"); -const { generateFinancialReport } = require("../Controllers/financialReportController"); +const { + generateFinancialReport, +} = require("../Controllers/financialReportController"); const { generateFinancialReportPDF } = require("../Models/pdfGenerator"); const { generateFinancialReportCSV } = require("../Models/csvGenerator"); const FinancialMovements = require("../Models/financialMovementsSchema"); @@ -212,9 +214,9 @@ describe("generateFinancialReport Controller", () => { req.body.nomeDestino = "Empresa B"; req.body.nomeOrigem = "Empresa A"; req.body.tipoDocumento = "Fatura"; - + await generateFinancialReport(req, res); - + expect(FinancialMovements.find).toHaveBeenCalledWith( expect.objectContaining({ sitPagamento: "Pago", // Espera-se que o filtro sitPagamento esteja presente @@ -223,119 +225,147 @@ describe("generateFinancialReport Controller", () => { $lte: new Date("2024-12-31T00:00:00.000Z"), }, datadePagamento: { $exists: true, $lte: expect.any(Date) }, - contaDestino: "5678", - contaOrigem: "1234", - nomeDestino: "Empresa B", + contaDestino: "5678", + contaOrigem: "1234", + nomeDestino: "Empresa B", nomeOrigem: "Empresa A", - tipoDocumento: "Fatura", + tipoDocumento: "Fatura", }) ); - }); - - + }); -it("não deve recriar o diretório se ele já existir", async () => { - req.body.formArquivo = "PDF"; - const filePath = path.join(__dirname, "../../PDF/financial_report.pdf"); + it("não deve recriar o diretório se ele já existir", async () => { + req.body.formArquivo = "PDF"; + const filePath = path.join(__dirname, "../../PDF/financial_report.pdf"); - generateFinancialReportPDF.mockResolvedValueOnce(); + generateFinancialReportPDF.mockResolvedValueOnce(); - // Simula que o diretório já existe - fs.existsSync.mockReturnValue(true); - fs.mkdirSync.mockReturnValue(); // Não deve ser chamada, já que o diretório existe + // Simula que o diretório já existe + fs.existsSync.mockReturnValue(true); + fs.mkdirSync.mockReturnValue(); // Não deve ser chamada, já que o diretório existe - await generateFinancialReport(req, res); + await generateFinancialReport(req, res); - expect(fs.existsSync).toHaveBeenCalledWith(path.dirname(filePath)); - expect(fs.mkdirSync).not.toHaveBeenCalled(); // Verifica que mkdirSync não foi chamada -}); -it("deve retornar 500 se houver erro ao enviar o arquivo", async () => { - res.sendFile = jest.fn((filePath, callback) => callback(new Error("Erro ao enviar arquivo"))); + expect(fs.existsSync).toHaveBeenCalledWith(path.dirname(filePath)); + expect(fs.mkdirSync).not.toHaveBeenCalled(); // Verifica que mkdirSync não foi chamada + }); + it("deve retornar 500 se houver erro ao enviar o arquivo", async () => { + res.sendFile = jest.fn((filePath, callback) => + callback(new Error("Erro ao enviar arquivo")) + ); - await generateFinancialReport(req, res); + await generateFinancialReport(req, res); - expect(res.status).toHaveBeenCalledWith(500); - expect(res.send).toHaveBeenCalledWith("Erro ao enviar o arquivo."); -}); -it("deve aplicar o filtro tipoDocumento corretamente", async () => { - req.body.tipoDocumento = "Fatura"; + expect(res.status).toHaveBeenCalledWith(500); + expect(res.send).toHaveBeenCalledWith("Erro ao enviar o arquivo."); + }); + it("deve aplicar o filtro tipoDocumento corretamente", async () => { + req.body.tipoDocumento = "Fatura"; - await generateFinancialReport(req, res); + await generateFinancialReport(req, res); - expect(FinancialMovements.find).toHaveBeenCalledWith( - expect.objectContaining({ - tipoDocumento: "Fatura", - }) - ); -}); -it("deve gerar o relatório financeiro quando includeFields não for fornecido", async () => { - const reqWithoutIncludeFields = { ...req, body: { ...req.body, includeFields: {} } }; + expect(FinancialMovements.find).toHaveBeenCalledWith( + expect.objectContaining({ + tipoDocumento: "Fatura", + }) + ); + }); + it("deve gerar o relatório financeiro quando includeFields não for fornecido", async () => { + const reqWithoutIncludeFields = { + ...req, + body: { ...req.body, includeFields: {} }, + }; - await generateFinancialReport(reqWithoutIncludeFields, res); + await generateFinancialReport(reqWithoutIncludeFields, res); - // Verifique se o relatório foi gerado sem campos adicionais - expect(generateFinancialReportPDF).toHaveBeenCalledWith( - expect.any(Array), - expect.any(String), - expect.arrayContaining(["contaOrigem", "contaDestino", "nomeOrigem", "nomeDestino"]) - ); -}); -it("deve gerar a consulta corretamente quando apenas dataInicio é fornecida", async () => { - const reqWithOnlyDataInicio = { ...req, body: { ...req.body, dataFinal: undefined } }; + // Verifique se o relatório foi gerado sem campos adicionais + expect(generateFinancialReportPDF).toHaveBeenCalledWith( + expect.any(Array), + expect.any(String), + expect.arrayContaining([ + "contaOrigem", + "contaDestino", + "nomeOrigem", + "nomeDestino", + ]) + ); + }); + it("deve gerar a consulta corretamente quando apenas dataInicio é fornecida", async () => { + const reqWithOnlyDataInicio = { + ...req, + body: { ...req.body, dataFinal: undefined }, + }; - await generateFinancialReport(reqWithOnlyDataInicio, res); + await generateFinancialReport(reqWithOnlyDataInicio, res); - expect(FinancialMovements.find).toHaveBeenCalledWith( - expect.objectContaining({ - datadeVencimento: { $gte: new Date("2024-01-01") }, - }) - ); -}); + expect(FinancialMovements.find).toHaveBeenCalledWith( + expect.objectContaining({ + datadeVencimento: { $gte: new Date("2024-01-01") }, + }) + ); + }); -it("deve gerar a consulta corretamente quando apenas dataFinal é fornecida", async () => { - const reqWithOnlyDataFinal = { ...req, body: { ...req.body, dataInicio: undefined } }; + it("deve gerar a consulta corretamente quando apenas dataFinal é fornecida", async () => { + const reqWithOnlyDataFinal = { + ...req, + body: { ...req.body, dataInicio: undefined }, + }; - await generateFinancialReport(reqWithOnlyDataFinal, res); + await generateFinancialReport(reqWithOnlyDataFinal, res); - expect(FinancialMovements.find).toHaveBeenCalledWith( - expect.objectContaining({ - datadeVencimento: { $lte: new Date("2024-12-31") }, - }) - ); -}); -it("deve gerar o relatório financeiro corretamente quando alguns parâmetros são ausentes", async () => { - const reqWithoutSitPagamento = { ...req }; - delete reqWithoutSitPagamento.body.sitPagamento; - - await generateFinancialReport(reqWithoutSitPagamento, res); - - // Verifique se a consulta gerada não inclui 'sitPagamento' - expect(FinancialMovements.find).toHaveBeenCalledWith( - expect.objectContaining({ - sitPagamento: undefined, - }) - ); -}); -it("deve gerar um arquivo CSV e enviá-lo", async () => { - req.body.formArquivo = "CSV"; - const filePath = path.join(__dirname, "../../CSV/financial_report.csv"); - - generateFinancialReportCSV.mockResolvedValueOnce(); - - await generateFinancialReport(req, res); - - expect(generateFinancialReportCSV).toHaveBeenCalledWith( - expect.any(Array), - filePath, - expect.arrayContaining([ - "contaOrigem", "contaDestino", "nomeOrigem", "nomeDestino", "valorBruto", "valorLiquido", - "formadePagamento", "datadeVencimento", "datadePagamento", "baixada", "descricao" - ]) - ); - expect(res.setHeader).toHaveBeenCalledWith("Content-Type", "text/csv"); - expect(res.setHeader).toHaveBeenCalledWith("Content-Disposition", expect.stringContaining("financial_report.csv")); - expect(res.sendFile).toHaveBeenCalledWith(filePath, expect.any(Function)); - expect(fs.unlinkSync).toHaveBeenCalledWith(filePath); -}); + expect(FinancialMovements.find).toHaveBeenCalledWith( + expect.objectContaining({ + datadeVencimento: { $lte: new Date("2024-12-31") }, + }) + ); + }); + it("deve gerar o relatório financeiro corretamente quando alguns parâmetros são ausentes", async () => { + const reqWithoutSitPagamento = { ...req }; + delete reqWithoutSitPagamento.body.sitPagamento; + await generateFinancialReport(reqWithoutSitPagamento, res); + + // Verifique se a consulta gerada não inclui 'sitPagamento' + expect(FinancialMovements.find).toHaveBeenCalledWith( + expect.objectContaining({ + sitPagamento: undefined, + }) + ); + }); + it("deve gerar um arquivo CSV e enviá-lo", async () => { + req.body.formArquivo = "CSV"; + const filePath = path.join(__dirname, "../../CSV/financial_report.csv"); + + generateFinancialReportCSV.mockResolvedValueOnce(); + + await generateFinancialReport(req, res); + + expect(generateFinancialReportCSV).toHaveBeenCalledWith( + expect.any(Array), + filePath, + expect.arrayContaining([ + "contaOrigem", + "contaDestino", + "nomeOrigem", + "nomeDestino", + "valorBruto", + "valorLiquido", + "formadePagamento", + "datadeVencimento", + "datadePagamento", + "baixada", + "descricao", + ]) + ); + expect(res.setHeader).toHaveBeenCalledWith("Content-Type", "text/csv"); + expect(res.setHeader).toHaveBeenCalledWith( + "Content-Disposition", + expect.stringContaining("financial_report.csv") + ); + expect(res.sendFile).toHaveBeenCalledWith( + filePath, + expect.any(Function) + ); + expect(fs.unlinkSync).toHaveBeenCalledWith(filePath); + }); }); diff --git a/src/__tests__/suppllierFormController.test.js b/src/__tests__/suppllierFormController.test.js index 193666b..bf28f96 100644 --- a/src/__tests__/suppllierFormController.test.js +++ b/src/__tests__/suppllierFormController.test.js @@ -4,7 +4,7 @@ const mongoose = require("mongoose"); const cors = require("cors"); const routes = require("../routes"); const { MongoMemoryServer } = require("mongodb-memory-server"); -const { mockedToken } = require('./utils.test') +const { mockedToken } = require("./utils.test"); const app = express(); let mongoServer; @@ -110,21 +110,27 @@ describe("Supplier Form Controller Tests", () => { }); it("should get all supplier forms", async () => { - const res = await request(app).get("/SupplierForm").set("Authorization", `Bearer ${mockedToken()}`); + const res = await request(app) + .get("/SupplierForm") + .set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(200); expect(Array.isArray(res.body)).toBe(true); }); it("should get a supplier form by ID", async () => { - const res = await request(app).get(`/SupplierForm/${supplierId}`).set("Authorization", `Bearer ${mockedToken()}`); + const res = await request(app) + .get(`/SupplierForm/${supplierId}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(200); expect(res.body).toHaveProperty("nome", "Test Supplier"); }); it("should fail get a supplier form without ID", async () => { - const res = await request(app).get(`/SupplierForm/${null}`).set("Authorization", `Bearer ${mockedToken()}`); + const res = await request(app) + .get(`/SupplierForm/${null}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(400); }); @@ -149,29 +155,27 @@ describe("Supplier Form Controller Tests", () => { }); it("should delete a supplier form by ID", async () => { - const res = await request(app).delete( - `/SupplierForm/delete/${supplierId}` - ).set("Authorization", `Bearer ${mockedToken()}`); + const res = await request(app) + .delete(`/SupplierForm/delete/${supplierId}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(res.status).toBe(200); - const checkSupplier = await request(app).get( - `/SupplierForm/delete/${supplierId}` - ).set("Authorization", `Bearer ${mockedToken()}`); + const checkSupplier = await request(app) + .get(`/SupplierForm/delete/${supplierId}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(checkSupplier.status).toBe(404); }); it("should fail to delete a supplier form without ID", async () => { - const res = await request(app).delete( - `/SupplierForm/delete/${supplierId}` - ).set("Authorization", `Bearer ${mockedToken()}`) // Atualize o caminho da rota - ; - + const res = await request(app) + .delete(`/SupplierForm/delete/${supplierId}`) + .set("Authorization", `Bearer ${mockedToken()}`); // Atualize o caminho da rota expect(res.status).toBe(200); - const checkSupplier = await request(app).get( - `/SupplierForm/delete/${supplierId}` - ).set("Authorization", `Bearer ${mockedToken()}`); + const checkSupplier = await request(app) + .get(`/SupplierForm/delete/${supplierId}`) + .set("Authorization", `Bearer ${mockedToken()}`); expect(checkSupplier.status).toBe(404); }); }); diff --git a/src/__tests__/utils.test.js b/src/__tests__/utils.test.js index 401b0a0..d01ad41 100644 --- a/src/__tests__/utils.test.js +++ b/src/__tests__/utils.test.js @@ -2,79 +2,78 @@ const { validator } = require("../Util/utils"); const jwt = require("jsonwebtoken"); require("dotenv").config(); -mockedToken = () =>{ - let jwtTemp = { - "id": "6783471ed9b501ccc074f977", - "_id": "6783471ed9b501ccc074f96a", - "name": "administrador", - "permissions": [ - "perfis_editar", - "perfis_deletar", - "perfis_visualizar", - "orgaos_criar", - "orgaos_editar", - "orgaos_deletar", - "orgaos_visualizar", - "fornecedores_criar", - "fornecedores_editar", - "fornecedores_deletar", - "fornecedores_visualizar", - "contas_bancarias_criar", - "contas_bancarias_editar", - "contas_bancarias_deletar", - "contas_bancarias_visualizar", - "movimentacao_financeira_criar", - "movimentacao_financeira_editar", - "movimentacao_financeira_deletar", - "movimentacao_financeira_visualizar", - "permissoes_criar", - "permissoes_editar", - "permissoes_deletar", - "permissoes_visualizar", - "beneficios_criar", - "beneficios_visualizar", - "beneficios_editar", - "beneficios_deletar", - "usuarios_visualizar", - "usuarios_editar", - "usuarios_deletar", - "usuarios_criar", - "create", - "read", - "update", - "delete", - "usuarios_visualizar_historico\t", - "associados_criar", - "associados_deletar", - "associados_editar", - "associados_visualizar", - "perfis_criar", - "filiados_cadastrar", - "usuarios_visualizar_historico", - "sindicalizado_visualizar_status", - "filiado_visualizar_carteirinha" - ] - , - "user": { - "situation": "", - "description": "", - "_id": "6783471ed9b501ccc074f977", - "name": "Admin", - "email": "admin@admin.com", - "phone": "1234567890", - "role": "6783471ed9b501ccc074f96a", - "status": true, - "isProtected": true, - "createdAt": "2025-01-12T04:37:50.966Z", - "updatedAt": "2025-01-12T04:37:50.966Z", - "__v": 0 +mockedToken = () => { + let jwtTemp = { + id: "6783471ed9b501ccc074f977", + _id: "6783471ed9b501ccc074f96a", + name: "administrador", + permissions: [ + "perfis_editar", + "perfis_deletar", + "perfis_visualizar", + "orgaos_criar", + "orgaos_editar", + "orgaos_deletar", + "orgaos_visualizar", + "fornecedores_criar", + "fornecedores_editar", + "fornecedores_deletar", + "fornecedores_visualizar", + "contas_bancarias_criar", + "contas_bancarias_editar", + "contas_bancarias_deletar", + "contas_bancarias_visualizar", + "movimentacao_financeira_criar", + "movimentacao_financeira_editar", + "movimentacao_financeira_deletar", + "movimentacao_financeira_visualizar", + "permissoes_criar", + "permissoes_editar", + "permissoes_deletar", + "permissoes_visualizar", + "beneficios_criar", + "beneficios_visualizar", + "beneficios_editar", + "beneficios_deletar", + "usuarios_visualizar", + "usuarios_editar", + "usuarios_deletar", + "usuarios_criar", + "create", + "read", + "update", + "delete", + "usuarios_visualizar_historico\t", + "associados_criar", + "associados_deletar", + "associados_editar", + "associados_visualizar", + "perfis_criar", + "filiados_cadastrar", + "usuarios_visualizar_historico", + "sindicalizado_visualizar_status", + "filiado_visualizar_carteirinha", + ], + user: { + situation: "", + description: "", + _id: "6783471ed9b501ccc074f977", + name: "Admin", + email: "admin@admin.com", + phone: "1234567890", + role: "6783471ed9b501ccc074f96a", + status: true, + isProtected: true, + createdAt: "2025-01-12T04:37:50.966Z", + updatedAt: "2025-01-12T04:37:50.966Z", + __v: 0, }, - } - const token = jwt.sign(jwtTemp, 'S3T1N3L3L4', { + }; + const token = jwt.sign(jwtTemp, "S3T1N3L3L4", { expiresIn: "30d", - }); + }); return token.trim(); -} +}; describe("Supplier Data Validator", () => { it("should return an error for invalid nome", () => { @@ -212,4 +211,4 @@ describe("Supplier Data Validator", () => { expect(result).toBeNull(); }); }); -module.exports = { mockedToken } \ No newline at end of file +module.exports = { mockedToken }; diff --git a/src/routes.js b/src/routes.js index 23b318e..ac1e582 100644 --- a/src/routes.js +++ b/src/routes.js @@ -4,8 +4,7 @@ const bankAccountController = require("./Controllers/bankAccountController"); const supplierFormController = require("./Controllers/supplierFormController"); const financialMovementsController = require("./Controllers/financialMovementsController"); const financialReportController = require("./Controllers/financialReportController"); -const {checkPermissions} = require("./Middlewares/accessControlMiddleware"); - +const { checkPermissions } = require("./Middlewares/accessControlMiddleware"); // Rotas Contas Bancárias routes.post( @@ -93,5 +92,4 @@ routes.post( financialReportController.generateFinancialReport ); - module.exports = routes;