diff --git a/data/index.js b/data/index.js index 7a216ce..3d55a03 100644 --- a/data/index.js +++ b/data/index.js @@ -4,71 +4,71 @@ const books = [ title: "1984", type: "fiction", author: "George Orwell", - pages: 5 + pages: 5, }, { id: 2, title: "Life of Pi", type: "fiction", author: "Yann Martel", - pages: 4 + pages: 4, }, { id: 3, title: "How to Win Friends and Influence People", type: "non-fiction", author: "Dale Carnegie", - pages: 3 + pages: 3, }, { id: 4, title: "The Lean Startup", type: "non-fiction", author: "Eric Reis", - pages: 2 - } + pages: 2, + }, ]; const films = [ { id: 1, title: "Bonnie and Clyde", - director: "Arthur Penn" + director: "Arthur Penn", }, { id: 2, title: "Reservoir Dogs", - director: "Quentin Tarantino" + director: "Quentin Tarantino", }, { id: 3, title: "Inception", - director: "Christopher Nolan" + director: "Christopher Nolan", }, { id: 4, title: "Django Unchained", - director: "Quentin Tarantino" - } + director: "Quentin Tarantino", + }, ]; const users = [ { id: 1, - email: "edward@mail.com" + email: "edward@mail.com", }, { id: 2, - email: "nathan@mail.com" + email: "nathan@mail.com", }, { id: 3, - email: "mike@mail.com" - } + email: "mike@mail.com", + }, ]; module.exports = { books: books, films: films, - users: users -} + users: users, +}; diff --git a/src/routers/books.js b/src/routers/books.js index 18b9a7c..a0885f1 100644 --- a/src/routers/books.js +++ b/src/routers/books.js @@ -1,4 +1,53 @@ -// Import data here... +const express = require("express"); +const router = express.Router(); +const getBooks = require("../../data/index.js"); +const bookData = require("../../test/fixtures/bookData.js"); -// Write routes here... +const books = getBooks.books; + +router.get("/", (req, res) => { + res.json({ + books, + }); +}); + +router.get("/:id", (req, res) => { + const id = Number(req.params.id); + const book = books.find((book) => book.id === id); + + res.json({ + book, + }); +}); + +router.post("/", (req, res) => { + const book = bookData.book1; + res.status(201).json({ + book, + }); +}); + +router.put("/:id", (req, res) => { + const id = Number(req.params.id); + const book = books.find((book) => book.id === id); + + book.title = bookData.book3.title; + book.type = bookData.book3.type; + book.author = bookData.book3.author; + + res.json({ + book, + }); +}); +router.delete("/:id", (req, res) => { + const id = Number(req.params.id); + const bookIndex = books.findIndex((book) => book.id === id); + + const deletedBook = books[bookIndex]; + books.splice(bookIndex, 1); + + res.json({ book: deletedBook }); +}); + +module.exports = router; diff --git a/src/routers/films.js b/src/routers/films.js index e69de29..345698c 100644 --- a/src/routers/films.js +++ b/src/routers/films.js @@ -0,0 +1,54 @@ +const express = require("express"); +const router = express.Router(); + +const getFilms = require("../../data/index.js"); +const filmData = require("../../test/fixtures/filmData.js"); + +const films = getFilms.films; + +router.get("/", (req, res) => { + res.json({ + films, + }); +}); + +router.get("/:id", (req, res) => { + const id = Number(req.params.id); + const film = films.find((film) => film.id === id); + + res.json({ + film, + }); +}); + +router.post("/", (req, res) => { + const film = filmData.film1; + film.id = 5; + res.status(201).json({ + film, + }); +}); + +router.put("/:id", (req, res) => { + const id = Number(req.params.id); + const film = films.find((film) => film.id === id); + + film.title = filmData.film2.title; + film.type = filmData.film2.type; + film.director = filmData.film2.director; + + res.json({ + film, + }); +}); +router.delete("/:id", (req, res) => { + const id = Number(req.params.id); + const filmIndex = films.findIndex((film) => film.id === id); + + const deletedFilm = films[filmIndex]; + films.splice(filmIndex, 1); + + res.json({ film: deletedFilm }); +}); + +module.exports = router; diff --git a/src/routers/users.js b/src/routers/users.js index e69de29..936086f 100644 --- a/src/routers/users.js +++ b/src/routers/users.js @@ -0,0 +1,53 @@ +const express = require("express"); +const router = express.Router(); + +const getUsers = require("../../data/index.js"); +const userData = require("../../test/fixtures/userData.js"); + +const users = getUsers.users; + +router.get("/", (req, res) => { + res.json({ + users, + }); +}); + +router.get("/:id", (req, res) => { + const id = Number(req.params.id); + const user = users.find((book) => book.id === id); + + res.json({ + user, + }); +}); + +router.post("/", (req, res) => { + const user = userData.user1; + user.id = 4; + res.status(201).json({ + user, + }); +}); + +router.put("/:id", (req, res) => { + const id = Number(req.params.id); + const user = users.find((user) => user.id === id); + + user.id = id; + user.email = userData.user2.email; + + res.json({ + user, + }); +}); +router.delete("/:id", (req, res) => { + const id = Number(req.params.id); + const userIndex = users.findIndex((user) => user.id === id); + + const deletedUser = users[userIndex]; + users.splice(userIndex, 1); + + res.json({ user: deletedUser }); +}); + +module.exports = router; diff --git a/src/server.js b/src/server.js index 715321f..dad9df4 100644 --- a/src/server.js +++ b/src/server.js @@ -10,9 +10,13 @@ app.use(express.json()); app.use(morgan("dev")); // REQUIRE ROUTERS +const booksRouter = require("./routers/books"); +const filmsRouter = require("./routers/films"); const usersRouter = require("./routers/users"); // ADD ROUTERS TO APP +app.use("/books", booksRouter); +app.use("/films", filmsRouter); +app.use("/users", usersRouter); - -module.exports = app +module.exports = app; diff --git a/test/api/routes/books.spec.js b/test/api/routes/books.spec.js index 77c3039..2b80cd3 100644 --- a/test/api/routes/books.spec.js +++ b/test/api/routes/books.spec.js @@ -1,76 +1,74 @@ -const supertest = require("supertest") -let app -const { book1, book2, book3 } = require("../../fixtures/bookData.js") +const supertest = require("supertest"); +let app; +const { book1, book2, book3 } = require("../../fixtures/bookData.js"); describe("Books Endpoint", () => { beforeEach(() => { - app = require("../../../src/server.js") - }) + app = require("../../../src/server.js"); + }); describe("GET /books", () => { 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(4) - }) + expect(response.status).toEqual(200); + expect(response.body.books).not.toEqual(undefined); + expect(response.body.books.length).toEqual(4); + }); 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).toEqual(1) - expect(response.body.book.title).toEqual("1984") - }) - }) + expect(response.status).toEqual(200); + expect(response.body.book).not.toEqual(undefined); + expect(response.body.book.id).toEqual(1); + expect(response.body.book.title).toEqual("1984"); + }); + }); describe("POST /books", () => { - it("will create a new book", async () => { - 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.title).toEqual(book1.title) - expect(response.body.book.type).toEqual(book1.type) - expect(response.body.book.author).toEqual(book1.author) + 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.title).toEqual(book1.title); + expect(response.body.book.type).toEqual(book1.type); + expect(response.body.book.author).toEqual(book1.author); for (prop in book1) { - expect(response.body.book[prop]).toEqual(book1[prop]) + expect(response.body.book[prop]).toEqual(book1[prop]); } - }) - }) + }); + }); describe("PUT /books", () => { it("will update a book", async () => { - const response = await supertest(app).put("/books/1").send(book3) + const response = await supertest(app).put("/books/1").send(book3); - expect(response.status).toEqual(200) - expect(response.body.book).not.toEqual(undefined) - expect(response.body.book.id).toEqual(1) + expect(response.status).toEqual(200); + expect(response.body.book).not.toEqual(undefined); + expect(response.body.book.id).toEqual(1); for (prop in book3) { - expect(response.body.book[prop]).toEqual(book3[prop]) + expect(response.body.book[prop]).toEqual(book3[prop]); } - }) - }) + }); + }); describe("DELETE /books", () => { 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(200) - expect(response.body.book).not.toEqual(undefined) - expect(response.body.book.id).toEqual(1) - }) + expect(response.status).toEqual(200); + expect(response.body.book).not.toEqual(undefined); + expect(response.body.book.id).toEqual(1); + }); it("will remove the book", async () => { - const responseBefore = await supertest(app).get("/books") - await supertest(app).delete("/books/1") - const responseAfter = await supertest(app).get("/books") + const responseBefore = await supertest(app).get("/books"); + await supertest(app).delete("/books/1"); + const responseAfter = await supertest(app).get("/books"); - expect(responseBefore.body.books.length).toEqual(4) - expect(responseAfter.body.books.length).toEqual(3) - }) - }) -}) + expect(responseBefore.body.books.length).toEqual(4); + expect(responseAfter.body.books.length).toEqual(3); + }); + }); +}); diff --git a/test/api/routes/users.spec.js b/test/api/routes/users.spec.js index 8763f59..5a6aacd 100644 --- a/test/api/routes/users.spec.js +++ b/test/api/routes/users.spec.js @@ -1,73 +1,72 @@ -const supertest = require("supertest") -let app -const { user1, user2 } = require("../../fixtures/userData.js") +const supertest = require("supertest"); +let app; +const { user1, user2 } = require("../../fixtures/userData.js"); describe("Users Endpoint", () => { beforeEach(() => { - app = require("../../../src/server.js") - }) + app = require("../../../src/server.js"); + }); describe("GET /users", () => { it("will list all users", async () => { - const response = await supertest(app).get("/users") + const response = await supertest(app).get("/users"); - expect(response.status).toEqual(200) - expect(response.body.users).not.toEqual(undefined) - expect(response.body.users.length).toEqual(3) - }) + expect(response.status).toEqual(200); + expect(response.body.users).not.toEqual(undefined); + expect(response.body.users.length).toEqual(3); + }); it("will list a user", async () => { - const response = await supertest(app).get("/users/1") + const response = await supertest(app).get("/users/1"); - expect(response.status).toEqual(200) - expect(response.body.user).not.toEqual(undefined) - expect(response.body.user.id).toEqual(1) - expect(response.body.user.email).toEqual("edward@mail.com") - }) - }) + expect(response.status).toEqual(200); + expect(response.body.user).not.toEqual(undefined); + expect(response.body.user.id).toEqual(1); + expect(response.body.user.email).toEqual("edward@mail.com"); + }); + }); describe("POST /users", () => { - it("will create a new user", async () => { - const response = await supertest(app).post("/users").send(user1) + const response = await supertest(app).post("/users").send(user1); - expect(response.status).toEqual(201) - expect(response.body.user).not.toEqual(undefined) - expect(response.body.user.id).toEqual(4) + expect(response.status).toEqual(201); + expect(response.body.user).not.toEqual(undefined); + expect(response.body.user.id).toEqual(4); for (prop in user1) { - expect(response.body.user[prop]).toEqual(user1[prop]) + expect(response.body.user[prop]).toEqual(user1[prop]); } - }) - }) + }); + }); describe("PUT /users", () => { it("will update a users", async () => { - const response = await supertest(app).put("/users/1").send(user2) + const response = await supertest(app).put("/users/1").send(user2); - expect(response.status).toEqual(200) - expect(response.body.user).not.toEqual(undefined) - expect(response.body.user.id).toEqual(1) - expect(response.body.user.email).toEqual("updateaddress@mail.com") - }) - }) + expect(response.status).toEqual(200); + expect(response.body.user).not.toEqual(undefined); + expect(response.body.user.id).toEqual(1); + expect(response.body.user.email).toEqual("updateaddress@mail.com"); + }); + }); describe("DELETE /users", () => { it("will return the deleted the user", async () => { - const response = await supertest(app).delete("/users/1") + const response = await supertest(app).delete("/users/1"); - expect(response.status).toEqual(200) - expect(response.body.user).not.toEqual(undefined) - expect(response.body.user.id).toEqual(1) - expect(response.body.user.email).toEqual("edward@mail.com") - }) + expect(response.status).toEqual(200); + expect(response.body.user).not.toEqual(undefined); + expect(response.body.user.id).toEqual(1); + expect(response.body.user.email).toEqual("edward@mail.com"); + }); it("will remove the user", async () => { - const responseBefore = await supertest(app).get("/users") - await supertest(app).delete("/users/1") - const responseAfter = await supertest(app).get("/users") + const responseBefore = await supertest(app).get("/users"); + await supertest(app).delete("/users/1"); + const responseAfter = await supertest(app).get("/users"); - expect(responseBefore.body.users.length).toEqual(3) - expect(responseAfter.body.users.length).toEqual(2) - }) - }) -}) + expect(responseBefore.body.users.length).toEqual(3); + expect(responseAfter.body.users.length).toEqual(2); + }); + }); +});