"use strict";
|
|
const app = require("../../app");
|
const request = require("supertest");
|
require("should");
|
|
describe("GET /api/todos", function() {
|
it("should respond with JSON array", function(done) {
|
request(app)
|
.get("/api/todos")
|
.expect(200)
|
.expect("Content-Type", /json/)
|
.end(function(err, res) {
|
if (err) return done(err);
|
res.body.should.be.instanceof(Array);
|
done();
|
});
|
});
|
});
|
|
describe("POST /api/todos", function() {
|
it("should create the todo and return with the todo", function(done) {
|
request(app)
|
.post("/api/todos")
|
.send({
|
title: "learn about endpoint/server side testing",
|
completed: false
|
})
|
.expect(201)
|
.expect("Content-Type", /json/)
|
.end(function(err, res) {
|
if (err) return done(err);
|
res.body.should.have.property("_id");
|
res.body.title.should.equal("learn about endpoint/server side testing");
|
res.body.completed.should.equal(false);
|
done();
|
});
|
});
|
});
|
|
describe("GET /api/todos/:id", function() {
|
let todoId;
|
beforeEach(function createObjectToUpdate(done) {
|
request(app)
|
.post("/api/todos")
|
.send({
|
title: "learn about endpoint/server side testing",
|
completed: false
|
})
|
.expect(201)
|
.expect("Content-Type", /json/)
|
.end(function(err, res) {
|
if (err) return done(err);
|
todoId = res.body._id;
|
done();
|
});
|
});
|
it("should update the todo", function(done) {
|
request(app)
|
.get("/api/todos/" + todoId)
|
.expect(200)
|
.expect("Content-Type", /json/)
|
.end(function(err, res) {
|
if (err) return done(err);
|
res.body._id.should.equal(todoId);
|
res.body.title.should.equal("learn about endpoint/server side testing");
|
res.body.completed.should.equal(false);
|
done();
|
});
|
});
|
it("should return 404 for valid mongo object id that does not exist", function(done) {
|
request(app)
|
.get("/api/todos/" + "abcdef0123456789ABCDEF01")
|
.expect(404)
|
.end(function(err) {
|
if (err) return done(err);
|
done();
|
});
|
});
|
it("should return 400 for invalid object ids", function(done) {
|
request(app)
|
.get("/api/todos/" + 123)
|
.expect(400)
|
.end(function(err, res) {
|
if (err) return done(err);
|
res.text.should.equal("not a valid mongo object id");
|
done();
|
});
|
});
|
});
|
|
describe("DELETE /api/todos/:id", function() {
|
let todoId;
|
beforeEach(function createObjectToUpdate(done) {
|
request(app)
|
.post("/api/todos")
|
.send({
|
title: "learn about endpoint/server side testing",
|
completed: false
|
})
|
.expect(201)
|
.expect("Content-Type", /json/)
|
.end(function(err, res) {
|
if (err) return done(err);
|
todoId = res.body._id;
|
done();
|
});
|
});
|
it("should delete the todo", function(done) {
|
request(app)
|
.delete("/api/todos/" + todoId)
|
.expect(204)
|
.end(function(err) {
|
if (err) return done(err);
|
done();
|
});
|
});
|
it("should return 404 for valid mongo object id that does not exist", function(done) {
|
request(app)
|
.delete("/api/todos/" + "abcdef0123456789ABCDEF01")
|
.expect(404)
|
.end(function(err) {
|
if (err) return done(err);
|
done();
|
});
|
});
|
it("should return 400 for invalid object ids", function(done) {
|
request(app)
|
.delete("/api/todos/" + 123)
|
.send({ title: "LOVE endpoint/server side testing!", completed: true })
|
.expect(400)
|
.end(function(err, res) {
|
if (err) return done(err);
|
res.text.should.equal("not a valid mongo object id");
|
done();
|
});
|
});
|
});
|
|
describe("PUT /api/todos/:id", function() {
|
let todoId;
|
beforeEach(function createObjectToUpdate(done) {
|
request(app)
|
.post("/api/todos")
|
.send({
|
title: "learn about endpoint/server side testing",
|
completed: false
|
})
|
.expect(201)
|
.expect("Content-Type", /json/)
|
.end(function(err, res) {
|
if (err) return done(err);
|
todoId = res.body._id;
|
done();
|
});
|
});
|
it("should update the todo", function(done) {
|
request(app)
|
.put("/api/todos/" + todoId)
|
.send({ title: "LOVE endpoint/server side testing!", completed: true })
|
.expect(200)
|
.expect("Content-Type", /json/)
|
.end(function(err, res) {
|
if (err) return done(err);
|
res.body.should.have.property("_id");
|
res.body.title.should.equal("LOVE endpoint/server side testing!");
|
res.body.completed.should.equal(true);
|
done();
|
});
|
});
|
it("should return 404 for valid mongo object id that does not exist", function(done) {
|
request(app)
|
.put("/api/todos/" + "abcdef0123456789ABCDEF01")
|
.send({ title: "LOVE endpoint/server side testing!", completed: true })
|
.expect(404)
|
.end(function(err) {
|
if (err) return done(err);
|
done();
|
});
|
});
|
it("should return 400 for invalid object ids", function(done) {
|
request(app)
|
.put("/api/todos/" + 123)
|
.send({ title: "LOVE endpoint/server side testing!", completed: true })
|
.expect(400)
|
.end(function(err, res) {
|
if (err) return done(err);
|
res.text.should.equal("not a valid mongo object id");
|
done();
|
});
|
});
|
|
|
|
// Exercise 3 test case!
|
it("should mark todo as important and persist it", function(done) {
|
request(app)
|
.put("/api/todos/" + todoId)
|
.send({ title: "LOVE endpoint/server side testing!", completed: true, important: true })
|
.expect(200)
|
.expect("Content-Type", /json/)
|
.end(function(err, res) {
|
if (err) return done(err);
|
res.body.should.have.property("_id");
|
res.body.title.should.equal("LOVE endpoint/server side testing!");
|
// YOUR TEST GO HERE
|
res.body.important.should.equal(true);
|
done();
|
});
|
});
|
|
});
|