diff --git a/__tests__/integration/plano.test.js b/__tests__/integration/plano.test.js new file mode 100644 index 0000000..5a57e27 --- /dev/null +++ b/__tests__/integration/plano.test.js @@ -0,0 +1,74 @@ +const request = require("supertest") +const app = require("../../src/app") +const truncate = require("../utils/truncate") +const factory = require("../utils/factories") +const faker = require("faker") + +faker.locale = "pt_BR" + +describe("CRUD", () => { + beforeEach(async () => { + await truncate() + }) + + it("deve cadastrar um novo plano", async () => { + + const resposta = await request(app) + .post("/plano") + .send({ + descricao: faker.company.bs(), + valor: faker.finance.amount() + }) + + expect(resposta.status).toBe(200) + }) + + it("não deve cadastrar com dados obrigatorios faltando", async () => { + const resposta = await request(app) + .post("/plano") + .send({}) + + expect(resposta.status).toBe(400) + }) + + it("deve editar um plano já criado", async () => { + const plano = await factory.create("Plano") + + const resposta = await request(app) + .put(`/plano/${plano.id}`) + .send({ + descricao: faker.company.bs(), + valor: faker.finance.amount() + }) + + expect(resposta.status).toBe(200) + }) + + it("deve deletar um plano já criado", async () => { + const plano = await factory.create("Plano") + + const resposta = await request(app) + .delete(`/plano/${plano.id}`) + + expect(resposta.status).toBe(200) + }) + + it("deve buscar todos os planos", async()=> { + await factory.create("Plano") + await factory.create("Plano") + + const resposta = await request(app) + .get("/planos") + + expect(resposta.status).toBe(200) + }) + + it("deve buscar os dados de um plano", async()=> { + const plano = await factory.create("Plano") + + const resposta = await request(app) + .get(`/plano/${plano.id}`) + + expect(resposta.status).toBe(200) + }) +}) \ No newline at end of file diff --git a/__tests__/utils/factories.js b/__tests__/utils/factories.js index 59335ee..9b26835 100644 --- a/__tests__/utils/factories.js +++ b/__tests__/utils/factories.js @@ -1,10 +1,10 @@ const {factory} = require("factory-girl") -const { Cliente, Usuario, Perito } = require("../../src/models") +const {Cliente, Usuario, Perito, Plano} = require("../../src/models") const faker = require("faker") faker.locale = "pt_BR" -factory.define("Cliente", Cliente, async () =>{ +factory.define("Cliente", Cliente, async () => { return { nome: faker.name.findName(), email: faker.internet.email(), @@ -22,10 +22,17 @@ factory.define("Usuario", Usuario, async () => { } }) -factory.define("Perito", Perito, async () =>{ +factory.define("Perito", Perito, async () => { return { nome: faker.name.findName(), } }) +factory.define("Plano", Plano, async () => { + return { + descricao: faker.company.bs(), + valor: faker.finance.amount() + } +}) + module.exports = factory \ No newline at end of file diff --git a/src/app.js b/src/app.js index 5712d07..7f9dd19 100644 --- a/src/app.js +++ b/src/app.js @@ -18,6 +18,7 @@ class AppController{ routes(){ this.express.use(require("./routes/clienteRouter")) this.express.use(require("./routes/peritoRouter")) + this.express.use(require("./routes/planoRouter")) this.express.use(require("./routes/usuarioRouter")) } } diff --git a/src/controllers/PlanoController.js b/src/controllers/PlanoController.js new file mode 100644 index 0000000..dad362c --- /dev/null +++ b/src/controllers/PlanoController.js @@ -0,0 +1,51 @@ +const {Plano} = require("../models"); + +class PlanoController { + async cadastrar(req, res) { + let {descricao, valor} = req.body + + if (!descricao || !valor) + return res.status(400).json({message: "Dados obrigatorios faltando"}) + + let plano = await Plano.create({descricao, valor}) + + return res.status(200).json({plano: plano}) + } + + async editar(req, res) { + let {descricao, valor} = req.body + let {id} = req.params + + let plano = await Plano.findOne({where: {id}}) + + await plano.update({descricao, valor}) + + return res.status(200).json({plano: plano}) + } + + async deletar(req, res) { + let {id} = req.params + + let plano = await Plano.findOne({where: {id}}) + + await plano.destroy() + + return res.status(200).json({plano: plano}) + } + + async buscarTodos(req, res) { + let planos = await Plano.findAll() + + return res.status(200).json({planos: planos}) + } + + async buscar(req, res) { + let {id} = req.params + + let plano = await Plano.findOne({where: {id}}) + + return res.status(200).json({plano: plano}) + } +} + +module.exports = new PlanoController() \ No newline at end of file diff --git a/src/database/migrations/20211129151251-Plano.js b/src/database/migrations/20211129151251-Plano.js new file mode 100644 index 0000000..d7c0e74 --- /dev/null +++ b/src/database/migrations/20211129151251-Plano.js @@ -0,0 +1,34 @@ +'use strict'; + +module.exports = { + up: async (queryInterface, Sequelize) => { + return queryInterface.createTable("Plano", { + id: { + type: Sequelize.INTEGER, + allowNull: false, + autoIncrement: true, + primaryKey: true + }, + descricao:{ + type: Sequelize.STRING, + allowNull:false, + }, + valor:{ + type: Sequelize.STRING, + allowNull:false, + }, + created_at:{ + type: Sequelize.DATE, + allowNull: false + }, + updated_at:{ + type: Sequelize.DATE, + allowNull: false + }, + }) + }, + + down: async (queryInterface, Sequelize) => { + return queryInterface.dropTable('Plano') + } +}; diff --git a/src/models/Plano.js b/src/models/Plano.js new file mode 100644 index 0000000..aa52489 --- /dev/null +++ b/src/models/Plano.js @@ -0,0 +1,12 @@ +module.exports = (sequelize, DataTypes) => { + const Plano = sequelize.define("Plano", { + descricao: DataTypes.STRING, + valor: DataTypes.STRING, + }, + { + freezeTableName: true, + } + ) + + return Plano +} \ No newline at end of file diff --git a/src/routes/planoRouter.js b/src/routes/planoRouter.js new file mode 100644 index 0000000..b18f6b0 --- /dev/null +++ b/src/routes/planoRouter.js @@ -0,0 +1,14 @@ +const routes = require("express").Router() +const PlanoController = require("../controllers/PlanoController") + +routes.post('/plano', PlanoController.cadastrar) + +routes.put("/plano/:id", PlanoController.editar) + +routes.delete("/plano/:id", PlanoController.deletar) + +routes.get("/planos", PlanoController.buscarTodos) + +routes.get("/plano/:id", PlanoController.buscar) + +module.exports = routes \ No newline at end of file