Skip to content

Instantly share code, notes, and snippets.

@Natedeploys
Created February 26, 2019 20:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Natedeploys/22ff5a8668382ecd020cf124bb910c18 to your computer and use it in GitHub Desktop.
Save Natedeploys/22ff5a8668382ecd020cf124bb910c18 to your computer and use it in GitHub Desktop.
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