From ec20448f0148381ab71bcd2908b06e7c6c9fa4cd Mon Sep 17 00:00:00 2001 From: samisalehsaeed Date: Fri, 28 Jun 2024 12:36:21 +0100 Subject: [PATCH 1/2] Sami Saeed --- controllers/bookControllers.js | 40 ++++++++++++++ controllers/petControllers.js | 41 ++++++++++++++ db/dbConnection.js | 17 ++++++ db/index.js | 25 --------- package-lock.json | 12 ++--- package.json | 4 +- repo/booksRepo.js | 92 ++++++++++++++++++++++++++++++++ repo/petsRepo.js | 88 ++++++++++++++++++++++++++++++ src/routers/books.js | 21 +++++--- src/routers/pets.js | 18 +++++++ src/server.js | 9 ++-- test/api/routes/books.spec.js | 97 +++++++++++++++++----------------- test/database-cleaner/index.js | 20 +++---- test/helpers/createBook.js | 12 ++--- test/helpers/createPet.js | 12 ++--- 15 files changed, 395 insertions(+), 113 deletions(-) create mode 100644 controllers/bookControllers.js create mode 100644 controllers/petControllers.js create mode 100644 db/dbConnection.js delete mode 100644 db/index.js create mode 100644 repo/booksRepo.js create mode 100644 repo/petsRepo.js create mode 100644 src/routers/pets.js diff --git a/controllers/bookControllers.js b/controllers/bookControllers.js new file mode 100644 index 00000000..1702c41c --- /dev/null +++ b/controllers/bookControllers.js @@ -0,0 +1,40 @@ +const booksRepo = require("../repo/booksRepo"); + +const getAllBooks = async (req, res) => { + const result = await booksRepo.getAllBooks(req); + + res.status(200).send({ books: result.rows }); +}; + +const createNewBook = async (req, res) => { + const result = await booksRepo.createNewBook(req); + + res.status(201).send({ book: result.rows[0] }); +}; + +const listBook = async (req, res) => { + const result = await booksRepo.listBook(req); + + res.status(200).send({ book: result.rows[0] }); +}; + +const updateBook = async (req, res) => { + const { id } = req.params; + const bookData = req.body; + const updatedBook = await booksRepo.updateBook(id, bookData); + + res.status(201).send({ book: updatedBook }); +}; +const deleteBook = async (req, res) => { + const { id } = req.params; + const deletedBook = await booksRepo.deleteBook(id); + res.status(201).send({ book: deletedBook }); +}; + +module.exports = { + createNewBook, + getAllBooks, + listBook, + updateBook, + deleteBook, +}; diff --git a/controllers/petControllers.js b/controllers/petControllers.js new file mode 100644 index 00000000..63f317db --- /dev/null +++ b/controllers/petControllers.js @@ -0,0 +1,41 @@ +const petsRepo = require("../repo/petsRepo"); + +const getAllPets = async (req, res) => { + const result = await petsRepo.getAllPets(req); + + res.status(200).send({ pets: result.rows }); +}; + +const createNewPet = async (req, res) => { + const result = await petsRepo.createNewPet(req); + + res.status(201).send({ pet: result.rows[0] }); +}; + +const listPet = async (req, res) => { + const result = await petsRepo.listPet(req); + + res.status(200).send({ pet: result.rows[0] }); +}; + +const updatePet = async (req, res) => { + const { id } = req.params; + const petData = req.body; + const updatedPet = await petsRepo.updatePet(id, petData); + + res.status(201).send({ pet: updatedPet }); +}; + +const deletePet = async (req, res) => { + const { id } = req.params; + const deletedPet = await petsRepo.deletePet(id); + res.status(201).send({ pet: deletedPet }); +}; + +module.exports = { + createNewPet, + getAllPets, + listPet, + updatePet, + deletePet, +}; diff --git a/db/dbConnection.js b/db/dbConnection.js new file mode 100644 index 00000000..4eed1ced --- /dev/null +++ b/db/dbConnection.js @@ -0,0 +1,17 @@ +require("dotenv").config(); + +const { Pool } = require("pg"); +const { PGHOST, PGDATABASE, PGUSER, PGPASSWORD } = process.env; + +const dbConnection = new Pool({ + host: PGHOST, + database: PGDATABASE, + username: PGUSER, + password: PGPASSWORD, + port: 5432, + ssl: { + require: true, + }, +}); + +module.exports = dbConnection; diff --git a/db/index.js b/db/index.js deleted file mode 100644 index af723442..00000000 --- a/db/index.js +++ /dev/null @@ -1,25 +0,0 @@ -// Load our .env file -require('dotenv').config() - -// Require Client obj from the postgres node module -const { Client } = require("pg"); - -const client = { - query: async (str, values) => { - // Get the connection string from process.env - - // the dotenv library sets this variable based - // on the contents of our env file - // Create a new connection to the database using the Client - // object provided by the postgres node module - const dbClient = new Client(process.env.PGURL) - // connect a connection - await dbClient.connect() - // execute the query - const result = await dbClient.query(str, values) - // close the connection - await dbClient.end() - return result - } -} - -module.exports = client; diff --git a/package-lock.json b/package-lock.json index 37ccdff8..3d98eb23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,11 @@ "dependencies": { "body-parser": "^1.20.2", "cors": "^2.8.5", - "dotenv": "^16.3.1", + "dotenv": "^16.4.5", "express": "^4.18.2", "faker": "^5.5.3", "morgan": "1.10.0", - "pg": "8.6.0", + "pg": "^8.6.0", "pg-promise": "^11.5.4" }, "devDependencies": { @@ -1875,14 +1875,14 @@ } }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/ee-first": { diff --git a/package.json b/package.json index 57d8b4fb..f3fd6f45 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,11 @@ "dependencies": { "body-parser": "^1.20.2", "cors": "^2.8.5", - "dotenv": "^16.3.1", + "dotenv": "^16.4.5", "express": "^4.18.2", "faker": "^5.5.3", "morgan": "1.10.0", - "pg": "8.6.0", + "pg": "^8.6.0", "pg-promise": "^11.5.4" }, "devDependencies": { diff --git a/repo/booksRepo.js b/repo/booksRepo.js new file mode 100644 index 00000000..860b852a --- /dev/null +++ b/repo/booksRepo.js @@ -0,0 +1,92 @@ +const dbConnection = require("../db/dbConnection.js"); + +async function getAllBooks(req) { + const db = await dbConnection.connect(); + try { + const sqlQuery = "SELECT * FROM books"; + const result = await db.query(sqlQuery); + return result; + } finally { + db.release(); + } +} + +async function createNewBook(req) { + const db = await dbConnection.connect(); + const bookData = require("../test/fixtures/bookData.js"); + + const { title, type, author, topic, publication_date, pages } = + bookData.book1; + + try { + const sqlQuery = ` + INSERT INTO books (title, type, author, topic, publication_date, pages) + VALUES ($1, $2, $3, $4, $5, $6) + RETURNING *; + `; + const values = [title, type, author, topic, publication_date, pages]; + const result = await db.query(sqlQuery, values); + return result; + } finally { + db.release(); + } +} + +async function listBook(req) { + const db = await dbConnection.connect(); + const { id } = req.params; + + try { + const sqlQuery = `SELECT * FROM books WHERE id = $1;`; + const result = await db.query(sqlQuery, [id]); + return result; + } finally { + db.release(); + } +} + +const updateBook = async (id, bookData) => { + const db = await dbConnection.connect(); + const { title, type, author, topic, publication_date, pages } = bookData; + + try { + const sqlQuery = ` + UPDATE books + SET title = $1, + type = $2, + author = $3, + topic = $4, + publication_date = $5, + pages = $6 + WHERE id = $7 + RETURNING *; + `; + const values = [title, type, author, topic, publication_date, pages, id]; + const result = await db.query(sqlQuery, values); + return result.rows[0]; + } finally { + db.release(); + } +}; + +const deleteBook = async (id) => { + const db = await dbConnection.connect(); + + try { + const sqlQuery = `DELETE FROM books WHERE id = $1 RETURNING *;`; + const result = await db.query(sqlQuery, [id]); + return result.rows[0]; + } finally { + db.release(); + } +}; + +module.exports = { deleteBook }; + +module.exports = { + getAllBooks, + createNewBook, + listBook, + updateBook, + deleteBook, +}; diff --git a/repo/petsRepo.js b/repo/petsRepo.js new file mode 100644 index 00000000..70096536 --- /dev/null +++ b/repo/petsRepo.js @@ -0,0 +1,88 @@ +const dbConnection = require("../db/dbConnection.js"); + +async function getAllPets(req) { + const db = await dbConnection.connect(); + try { + const sqlQuery = "SELECT * FROM pets"; + const result = await db.query(sqlQuery); + return result; + } finally { + db.release(); + } +} + +async function createNewPet(req) { + const db = await dbConnection.connect(); + const petData = require("../test/fixtures/petData.js"); + + const { name, age, type, breed, has_microchip } = petData.pet1; + + try { + const sqlQuery = ` + INSERT INTO pets (name, age, type, breed, has_microchip) + VALUES ($1, $2, $3, $4, $5, $6) + RETURNING *; + `; + const values = [name, age, type, breed, has_microchip]; + const result = await db.query(sqlQuery, values); + return result; + } finally { + db.release(); + } +} + +async function listPet(req) { + const db = await dbConnection.connect(); + const { id } = req.params; + + try { + const sqlQuery = `SELECT * FROM books WHERE id = $1;`; + const result = await db.query(sqlQuery, [id]); + return result; + } finally { + db.release(); + } +} + +const updatePet = async (id, petData) => { + const db = await dbConnection.connect(); + const { name, age, type, breed, has_microchip } = petData; + + try { + const sqlQuery = ` + UPDATE pets + SET name = $1, + age = $2, + type = $3, + breed = $4, + has_microchip = $5, + WHERE id = $6 + RETURNING *; + `; + const values = [name, age, type, breed, has_microchip, id]; + const result = await db.query(sqlQuery, values); + return result.rows[0]; + } finally { + db.release(); + } +}; + +const deletePet = async (id) => { + const db = await dbConnection.connect(); + + try { + const sqlQuery = `DELETE FROM pets WHERE id = $1 RETURNING *;`; + const result = await db.query(sqlQuery, [id]); + return result.rows[0]; + } finally { + db.release(); + } +}; + +module.exports = { + getAllPets, + createNewPet, + listPet, + updatePet, + deletePet, +}; diff --git a/src/routers/books.js b/src/routers/books.js index 1551dd87..03d5d4ac 100644 --- a/src/routers/books.js +++ b/src/routers/books.js @@ -1,9 +1,18 @@ -const express = require('express') -const router = express.Router() -const db = require("../../db"); +const express = require("express"); +const router = express.Router(); -router.get('/', async (req, res) => { +const { + getAllBooks, + createNewBook, + listBook, + updateBook, + deleteBook, +} = require("../../controllers/bookControllers.js"); -}) +router.get("/", getAllBooks); +router.get("/:id", listBook); +router.post("/", createNewBook); +router.put("/:id", updateBook); +router.delete("/:id", deleteBook); -module.exports = router +module.exports = router; diff --git a/src/routers/pets.js b/src/routers/pets.js new file mode 100644 index 00000000..fd179c01 --- /dev/null +++ b/src/routers/pets.js @@ -0,0 +1,18 @@ +const express = require("express"); +const router = express.Router(); + +const { + getAllPets, + createNewPet, + listPet, + updatePet, + deletePet, +} = require("../../controllers/petControllers.js"); + +router.get("/", getAllPets); +router.get("/:id", listPet); +router.post("/", createNewPet); +router.put("/:id", updatePet); +router.delete("/:id", deletePet); + +module.exports = router; diff --git a/src/server.js b/src/server.js index dac55e5d..49506b4f 100644 --- a/src/server.js +++ b/src/server.js @@ -1,6 +1,7 @@ const express = require("express"); const morgan = require("morgan"); const cors = require("cors"); +require("dotenv").config(); const app = express(); @@ -9,8 +10,10 @@ app.use(cors()); app.use(express.json()); //TODO: Implement books and pets APIs using Express Modular Routers -const booksRouter = require('./routers/books.js') +const booksRouter = require("./routers/books.js"); +const petsRouter = require("./routers/pets.js"); -app.use('/books', booksRouter) +app.use("/books", booksRouter); +app.use("/pets", petsRouter); -module.exports = app +module.exports = app; diff --git a/test/api/routes/books.spec.js b/test/api/routes/books.spec.js index 833f599d..b649ca0c 100644 --- a/test/api/routes/books.spec.js +++ b/test/api/routes/books.spec.js @@ -1,88 +1,87 @@ -const supertest = require("supertest") -const app = require("../../../src/server.js") -const { book1, book2 } = require("../../fixtures/bookData.js") -const createBook = require("../../helpers/createBook.js") +const supertest = require("supertest"); +const app = require("../../../src/server.js"); +const { book1, book2 } = require("../../fixtures/bookData.js"); +const createBook = require("../../helpers/createBook.js"); describe("Books Endpoint", () => { describe("POST /books", () => { - it("will create a new book", async () => { - const response = await supertest(app).post("/books").send(book1) + const response = await supertest(app).post("/books").send(book1); - expect(response.status).toEqual(201) - expect(response.body.book).not.toEqual(undefined) - expect(response.body.book.id).not.toEqual(undefined) + expect(response.status).toEqual(201); + expect(response.body.book).not.toEqual(undefined); + expect(response.body.book.id).not.toEqual(undefined); for (prop in book1) { - expect(response.body.book[prop]).toEqual(book1[prop]) + expect(response.body.book[prop]).toEqual(book1[prop]); } - }) - }) + }); + }); describe("GET /books", () => { beforeEach(async () => { - await createBook(Object.values(book1)) - await createBook(Object.values(book2)) - }) + await createBook(Object.values(book1)); + await createBook(Object.values(book2)); + }); it("will list all books", async () => { - const response = await supertest(app).get("/books") + const response = await supertest(app).get("/books"); - expect(response.status).toEqual(200) - expect(response.body.books).not.toEqual(undefined) - expect(response.body.books.length).toEqual(2) - const expectedBooks = [book1, book2] + expect(response.status).toEqual(200); + expect(response.body.books).not.toEqual(undefined); + expect(response.body.books.length).toEqual(2); + const expectedBooks = [book1, book2]; response.body.books.forEach((retrievedBook, index) => { - expect(retrievedBook.title).toEqual(expectedBooks[index].title) - }) - }) + expect(retrievedBook.title).toEqual(expectedBooks[index].title); + }); + }); it("will list a book", async () => { - const response = await supertest(app).get("/books/1") + const response = await supertest(app).get("/books/1"); - expect(response.status).toEqual(200) - expect(response.body.book).not.toEqual(undefined) - expect(response.body.book.id).not.toEqual(undefined) + expect(response.status).toEqual(200); + expect(response.body.book).not.toEqual(undefined); + expect(response.body.book.id).not.toEqual(undefined); for (prop in book1) { - expect(response.body.book[prop]).toEqual(book1[prop]) + expect(response.body.book[prop]).toEqual(book1[prop]); } - }) - }) + }); + }); describe("PUT /books", () => { beforeEach(async () => { - await createBook(Object.values(book1)) - }) + await createBook(Object.values(book1)); + }); it("will update a books", async () => { - const response = await supertest(app).put("/books/1").send(book2) + const response = await supertest(app).put("/books/1").send(book2); - expect(response.status).toEqual(201) - expect(response.body.book).not.toEqual(undefined) - expect(response.body.book.id).not.toEqual(undefined) + expect(response.status).toEqual(201); + expect(response.body.book).not.toEqual(undefined); + expect(response.body.book.id).not.toEqual(undefined); for (prop in book2) { - expect(response.body.book[prop]).toEqual(book2[prop]) + expect(response.body.book[prop]).toEqual(book2[prop]); } - }) - }) + }); + }); describe("DELETE /books", () => { beforeEach(async () => { - await createBook(Object.values(book1)) - }) + await createBook(Object.values(book1)); + }); it("will return the deleted the book", async () => { - const response = await supertest(app).delete("/books/1") + const response = await supertest(app).delete("/books/1"); - expect(response.status).toEqual(201) - expect(response.body.book).not.toEqual(undefined) - expect(response.body.book.id).not.toEqual(undefined) + expect(response.status).toEqual(201); + expect(response.body.book).not.toEqual(undefined); + expect(response.body.book.id).not.toEqual(undefined); for (prop in book1) { - expect(response.body.book[prop]).toEqual(book1[prop]) + expect(response.body.book[prop]).toEqual(book1[prop]); } - }) - }) -}) + }); + }); +}); diff --git a/test/database-cleaner/index.js b/test/database-cleaner/index.js index 13a4e464..79dffd98 100644 --- a/test/database-cleaner/index.js +++ b/test/database-cleaner/index.js @@ -1,14 +1,14 @@ -const fs = require('fs/promises') -const client = require("../../db"); +const fs = require("fs/promises"); +const client = require("../../db/dbConnection"); -global.beforeEach(async() => { - const sqlDataForBooks = await fs.readFile('./sql/create-books.sql') - const sqlStringForBooks = sqlDataForBooks.toString() +global.beforeEach(async () => { + const sqlDataForBooks = await fs.readFile("./sql/create-books.sql"); + const sqlStringForBooks = sqlDataForBooks.toString(); - await client.query(sqlStringForBooks) + await client.query(sqlStringForBooks); - const sqlDataForPets = await fs.readFile('./sql/create-pets.sql') - const sqlStringForPets = sqlDataForPets.toString() + const sqlDataForPets = await fs.readFile("./sql/create-pets.sql"); + const sqlStringForPets = sqlDataForPets.toString(); - await client.query(sqlStringForPets) -}) + await client.query(sqlStringForPets); +}); diff --git a/test/helpers/createBook.js b/test/helpers/createBook.js index 5f7e9c76..1a250495 100644 --- a/test/helpers/createBook.js +++ b/test/helpers/createBook.js @@ -1,11 +1,11 @@ -const client = require("../../db"); +const client = require("../../db/dbConnection"); const createBook = async (values) => { - const sqlString = `INSERT INTO "books" (title, type, author, topic, publication_date, pages) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *;` + const sqlString = `INSERT INTO "books" (title, type, author, topic, publication_date, pages) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *;`; - const result = await client.query(sqlString, values) + const result = await client.query(sqlString, values); - return result.rows[0] -} + return result.rows[0]; +}; -module.exports = createBook +module.exports = createBook; diff --git a/test/helpers/createPet.js b/test/helpers/createPet.js index 8dfca845..ab684e1e 100644 --- a/test/helpers/createPet.js +++ b/test/helpers/createPet.js @@ -1,11 +1,11 @@ -const client = require("../../db"); +const client = require("../../db/dbConnection"); const createPet = async (values) => { - const sqlString = `INSERT INTO "pets" (name, age, type, breed, has_microchip) VALUES ($1, $2, $3, $4, $5) RETURNING *;` + const sqlString = `INSERT INTO "pets" (name, age, type, breed, has_microchip) VALUES ($1, $2, $3, $4, $5) RETURNING *;`; - const result = await client.query(sqlString, values) + const result = await client.query(sqlString, values); - return result.rows[0] -} + return result.rows[0]; +}; -module.exports = createPet +module.exports = createPet; From 3ae298061ba6999dce24b62da294baa7108c88a2 Mon Sep 17 00:00:00 2001 From: samisalehsaeed Date: Fri, 28 Jun 2024 12:55:55 +0100 Subject: [PATCH 2/2] Sami Saeed --- controllers/petControllers.js | 2 +- repo/petsRepo.js | 6 +-- test/api/routes/pets.spec.js | 92 +++++++++++++++++------------------ 3 files changed, 49 insertions(+), 51 deletions(-) diff --git a/controllers/petControllers.js b/controllers/petControllers.js index 63f317db..100b816e 100644 --- a/controllers/petControllers.js +++ b/controllers/petControllers.js @@ -23,7 +23,7 @@ const updatePet = async (req, res) => { const petData = req.body; const updatedPet = await petsRepo.updatePet(id, petData); - res.status(201).send({ pet: updatedPet }); + res.status(201).json({ pet: updatedPet }); }; const deletePet = async (req, res) => { diff --git a/repo/petsRepo.js b/repo/petsRepo.js index 70096536..ed198139 100644 --- a/repo/petsRepo.js +++ b/repo/petsRepo.js @@ -20,7 +20,7 @@ async function createNewPet(req) { try { const sqlQuery = ` INSERT INTO pets (name, age, type, breed, has_microchip) - VALUES ($1, $2, $3, $4, $5, $6) + VALUES ($1, $2, $3, $4, $5) RETURNING *; `; const values = [name, age, type, breed, has_microchip]; @@ -36,7 +36,7 @@ async function listPet(req) { const { id } = req.params; try { - const sqlQuery = `SELECT * FROM books WHERE id = $1;`; + const sqlQuery = `SELECT * FROM pets WHERE id = $1;`; const result = await db.query(sqlQuery, [id]); return result; } finally { @@ -55,7 +55,7 @@ const updatePet = async (id, petData) => { age = $2, type = $3, breed = $4, - has_microchip = $5, + has_microchip = $5 WHERE id = $6 RETURNING *; `; diff --git a/test/api/routes/pets.spec.js b/test/api/routes/pets.spec.js index 73e22597..d5e56669 100644 --- a/test/api/routes/pets.spec.js +++ b/test/api/routes/pets.spec.js @@ -1,85 +1,83 @@ -const supertest = require("supertest") -const app = require("../../../src/server.js") -const { pet1, pet2 } = require("../../fixtures/petData.js") -const createPet = require("../../helpers/createPet.js") +const supertest = require("supertest"); +const app = require("../../../src/server.js"); +const { pet1, pet2 } = require("../../fixtures/petData.js"); +const createPet = require("../../helpers/createPet.js"); describe("Pets Endpoint", () => { describe("POST /pets", () => { - it("will create a new pet", async () => { - const response = await supertest(app).post("/pets").send(pet1) + const response = await supertest(app).post("/pets").send(pet1); - expect(response.status).toEqual(201) - expect(response.body.pet).not.toEqual(undefined) - expect(response.body.pet.id).not.toEqual(undefined) + expect(response.status).toEqual(201); + expect(response.body.pet).not.toEqual(undefined); + expect(response.body.pet.id).not.toEqual(undefined); for (prop in pet1) { - expect(response.body.pet[prop]).toEqual(pet1[prop]) + expect(response.body.pet[prop]).toEqual(pet1[prop]); } - - }) - }) + }); + }); describe("GET /pets", () => { beforeEach(async () => { - await createPet(Object.values(pet1)) - await createPet(Object.values(pet2)) - }) + await createPet(Object.values(pet1)); + await createPet(Object.values(pet2)); + }); it("will list all pets", async () => { - const response = await supertest(app).get("/pets") + const response = await supertest(app).get("/pets"); - expect(response.status).toEqual(200) - expect(response.body.pets).not.toEqual(undefined) - expect(response.body.pets.length).toEqual(2) - }) + expect(response.status).toEqual(200); + expect(response.body.pets).not.toEqual(undefined); + expect(response.body.pets.length).toEqual(2); + }); it("will list a pet", async () => { - const response = await supertest(app).get("/pets/1") + const response = await supertest(app).get("/pets/1"); - expect(response.status).toEqual(200) - expect(response.body.pet).not.toEqual(undefined) - expect(response.body.pet.id).not.toEqual(undefined) + expect(response.status).toEqual(200); + expect(response.body.pet).not.toEqual(undefined); + expect(response.body.pet.id).not.toEqual(undefined); for (prop in pet1) { - expect(response.body.pet[prop]).toEqual(pet1[prop]) + expect(response.body.pet[prop]).toEqual(pet1[prop]); } - }) - }) + }); + }); describe("PUT /pets", () => { beforeEach(async () => { - await createPet(Object.values(pet1)) - }) + await createPet(Object.values(pet1)); + }); it("will update a pets", async () => { - const response = await supertest(app).put("/pets/1").send(pet2) + const response = await supertest(app).put("/pets/1").send(pet2); - expect(response.status).toEqual(201) - expect(response.body.pet).not.toEqual(undefined) - expect(response.body.pet.id).not.toEqual(undefined) + expect(response.status).toEqual(201); + expect(response.body.pet).not.toEqual(undefined); + expect(response.body.pet.id).not.toEqual(undefined); for (prop in pet2) { - expect(response.body.pet[prop]).toEqual(pet2[prop]) + expect(response.body.pet[prop]).toEqual(pet2[prop]); } - }) - }) + }); + }); describe("DELETE /pets", () => { beforeEach(async () => { - await createPet(Object.values(pet1)) - }) + await createPet(Object.values(pet1)); + }); it("will return the deleted the pet", async () => { - const response = await supertest(app).delete("/pets/1") + const response = await supertest(app).delete("/pets/1"); - expect(response.status).toEqual(201) - expect(response.body.pet).not.toEqual(undefined) - expect(response.body.pet.id).not.toEqual(undefined) + expect(response.status).toEqual(201); + expect(response.body.pet).not.toEqual(undefined); + expect(response.body.pet.id).not.toEqual(undefined); for (prop in pet1) { - expect(response.body.pet[prop]).toEqual(pet1[prop]) + expect(response.body.pet[prop]).toEqual(pet1[prop]); } - }) - }) -}) + }); + }); +});