Step 29: Test Bookmarks route

Here I have update the tests in the tests/routes/Bookmars.test.js file so that we use the test database for testing the bookmarks routes.

import { describe, it, expect, beforeEach, afterAll, beforeAll } from "vitest"; import app from "../../src/index.js"; import supertest from "supertest"; import { faker } from "@faker-js/faker"; import { bookmarkDao } from "../../src/routes/bookmarks.js"; import * as db from "../../src/data/db.js"; import * as dotenv from "dotenv"; dotenv.config(); const request = new supertest(app); describe("Test API /bookmarks endpoints", () => { const numBookmarks = 5; beforeAll(async () => { db.connect(process.env.DB_TEST_URI); await bookmarkDao.deleteAll(); }); beforeEach(async () => { await bookmarkDao.deleteAll(); const cutoff = 2; for (let index = 0; index < cutoff; index++) { await bookmarkDao.create({ title: "Fake title", url: `url-${index}`, }); } for (let index = cutoff; index < numBookmarks; index++) { await bookmarkDao.create({ title: faker.lorem.sentence(), url: faker.internet.url(), }); } }); it("GET all bookmarks", async () => { const response = await request.get("/bookmarks"); expect(response.status).toBe(200); expect(response.body.data.length).toBe(numBookmarks); }); describe("GET with query parameters", async () => { it("GET all bookmarks given title", async () => { const title = "Fake title"; const response = await request.get(`/bookmarks?title=${title}`); expect(response.status).toBe(200); expect(response.body.data.length).toBe(2); }); it("GET all bookmarks given URL", async () => { const url = "url-0"; const response = await request.get(`/bookmarks?url=${url}`); expect(response.status).toBe(200); expect(response.body.data.length).toBe(1); }); }); it("POST a bookmark", async () => { const title = faker.lorem.sentence(); const url = faker.internet.url(); const response = await request.post("/bookmarks").send({ title, url, }); expect(response.status).toBe(201); expect(response.body.data._id).toBeDefined(); expect(response.body.data.title).toBe(title); expect(response.body.data.url).toBe(url); }); it("GET a bookmark given its ID", async () => { const index = Math.floor(Math.random() * numBookmarks); const bookmarks = await bookmarkDao.readAll({}); const bookmark = bookmarks[index]; const response = await request.get(`/bookmarks/${bookmark.id}`); expect(response.status).toBe(200); expect(response.body.data._id).toBe(bookmark.id); expect(response.body.data.title).toBe(bookmark.title); expect(response.body.data.url).toBe(bookmark.url); }); it("Update a bookmark given its ID", async () => { const index = Math.floor(Math.random() * numBookmarks); const bookmarks = await bookmarkDao.readAll({}); const bookmark = bookmarks[index]; const response = await request.put(`/bookmarks/${bookmark.id}`).send({ title: "Update title", url: "Update url", }); expect(response.status).toBe(200); expect(response.body.data._id).toBe(bookmark.id); expect(response.body.data.title).toBe("Update title"); expect(response.body.data.url).toBe("Update url"); }); it("Delete a bookmark given its ID", async () => { const index = Math.floor(Math.random() * numBookmarks); const bookmarks = await bookmarkDao.readAll({}); const bookmark = bookmarks[index]; const response = await request.delete(`/bookmarks/${bookmark.id}`); expect(response.status).toBe(200); expect(response.body.data._id).toBe(bookmark.id); expect(response.body.data.title).toBe(bookmark.title); expect(response.body.data.url).toBe(bookmark.url); }); afterAll(async () => { await bookmarkDao.deleteAll(); }); });