Created
February 26, 2019 20:08
-
-
Save Natedeploys/22ff5a8668382ecd020cf124bb910c18 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const request = require("supertest"); | |
const { Genre } = require("../../models/genre"); | |
const { User } = require("../../models/user"); | |
const mongoose = require("mongoose"); | |
let server; | |
describe("/api/genres", () => { | |
beforeEach(() => { | |
server = require("../../index"); | |
}); | |
afterEach(async () => { | |
await server.close(); | |
await Genre.remove({}); | |
}); | |
describe("GET /", () => { | |
it("should return all genres", async () => { | |
await Genre.collection.insertMany([ | |
{ name: "genre1" }, | |
{ name: "genre2" } | |
]); | |
const response = await request(server).get("/api/genres"); | |
expect(response.status).toBe(200); | |
expect(response.body.length).toBe(2); | |
expect(response.body.some(g => g.name === "genre1")).toBeTruthy(); | |
expect(response.body.some(g => g.name === "genre2")).toBeTruthy(); | |
}); | |
}); | |
describe("GET /:id", () => { | |
it("Should return a genre if valid id is passed", async () => { | |
const genre = new Genre({ name: "genre 1" }); | |
await genre.save(); | |
const res = await request(server).get("/api/genres/" + genre._id); | |
expect(res.status).toBe(200); | |
expect(res.body).toHaveProperty("_id", genre._id.toString()); | |
}); | |
it("Should return 404 if invalid id is passed", async () => { | |
const res = await request(server).get("/api/genres/1"); | |
expect(res.status).toBe(404); | |
}); | |
}); | |
describe("POST /", () => { | |
// We define the happy path, and then in each test, we change on parameter | |
// that clearly aligns with the name of the test | |
let token; | |
let name; | |
const exec = async () => { | |
return await request(server) | |
.post("/api/genres") | |
.set("x-auth-token", token) | |
.send({ | |
name | |
}); | |
}; | |
beforeEach(() => { | |
token = new User().generateAuthToken(); | |
name = "genre1"; | |
}); | |
it("should return a 401 if client is not logged in", async () => { | |
token = ""; | |
const response = await exec(); | |
expect(response.status).toBe(401); | |
}); | |
it("should return a 400 if genre is less than 5 characters", async () => { | |
name = "1234"; | |
const response = await exec(); | |
expect(response.status).toBe(400); | |
}); | |
it("should return a 400 if genre is more than 50 characters", async () => { | |
name = new Array(52).join("a"); | |
const response = await exec(); | |
expect(response.status).toBe(400); | |
}); | |
it("should save the genre if it is valid", async () => { | |
await exec(); | |
const genre = await Genre.find({ name: "genre1" }); | |
expect(genre).not.toBeNull(); | |
}); | |
it("should return the genre if it is valid", async () => { | |
const response = await exec(); | |
expect(response.body).toHaveProperty("_id"); | |
expect(response.body).toHaveProperty("name", "genre1"); | |
}); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment