var chai = require('chai'); var chaiHttp = require('chai-http'); var server = require('../server.js'); var should = chai.should(); var app = server.app; var storage = server.storage; chai.use(chaiHttp); describe('Shopping List', function() { it('should list items on GET', function(done) { chai.request(app) .get('/items') .end(function(err, res) { should.equal(err, null); res.should.have.status(200); res.should.be.json; res.body.should.be.a('array'); res.body.should.have.length(3); res.body[0].should.be.a('object'); res.body[0].should.have.property('id'); res.body[0].should.have.property('name'); res.body[0].id.should.be.a('number'); res.body[0].name.should.be.a('string'); res.body[0].name.should.equal('Broad beans'); res.body[1].name.should.equal('Tomatoes'); res.body[2].name.should.equal('Peppers'); done(); }); }); it('should add an item on post', function(done) { chai.request(app) .post('/items') .send({'name': 'Kale'}) .end(function(err, res) { should.equal(err, null); res.should.have.status(201); res.should.be.json; res.body.should.be.a('object'); res.body.should.have.property('name'); res.body.should.have.property('id'); res.body.name.should.be.a('string'); res.body.id.should.be.a('number'); res.body.name.should.equal('Kale'); res.body.id.should.equal(3); storage.items.should.be.a('array'); storage.items.should.have.length(4); storage.items[3].should.be.a('object'); storage.items[3].should.have.property('id'); storage.items[3].should.have.property('name'); storage.items[3].id.should.be.a('number'); storage.items[3].id.should.equal(3); storage.items[3].name.should.be.a('string'); storage.items[3].name.should.equal('Kale'); done(); }); }); it('should edit an item on put', function(done) { chai.request(app) .put('/items/3') .send({'name': 'Spork'}) .end(function(err, res) { should.equal(err, null); res.should.have.status(200); res.should.be.json; res.body.should.be.a('object'); res.body.should.have.property('name'); res.body.should.have.property('id'); res.body.name.should.be.a('string'); res.body.id.should.be.a('number'); res.body.name.should.equal('Spork'); res.body.id.should.equal(3); storage.items.should.be.a('array'); storage.items.should.have.length(4); storage.items[3].should.be.a('object'); storage.items[3].should.have.property('id'); storage.items[3].should.have.property('name'); storage.items[3].id.should.be.a('number'); storage.items[3].id.should.equal(3); storage.items[3].name.should.be.a('string'); storage.items[3].name.should.equal('Spork'); done(); }); }); it('should add a new item on put', function(done) { chai.request(app) .put('/items/999') .send({'name': 'Milkshake'}) .end(function(err, res) { should.equal(err, null); res.should.have.status(200); res.should.be.json; res.body.should.be.a('object'); res.body.should.have.property('name'); res.body.should.have.property('id'); res.body.name.should.be.a('string'); res.body.id.should.be.a('number'); res.body.name.should.equal('Milkshake'); res.body.id.should.equal(4); storage.items.should.be.a('array'); storage.items.should.have.length(5); storage.items[4].should.be.a('object'); storage.items[4].should.have.property('id'); storage.items[4].should.have.property('name'); storage.items[4].id.should.be.a('number'); storage.items[4].id.should.equal(4); storage.items[4].name.should.be.a('string'); storage.items[4].name.should.equal('Milkshake'); done(); }); }); it('should delete an item on delete', function(done) { chai.request(app) .delete('/items/1') .end(function(err, res) { should.equal(err, null); res.should.have.status(200); res.should.be.json; res.body.should.be.a('object'); res.body.should.have.property('name'); res.body.should.have.property('id'); res.body.name.should.be.a('string'); res.body.id.should.be.a('number'); res.body.name.should.equal('Tomatoes'); res.body.id.should.equal(1); storage.items.should.be.a('array'); storage.items.should.have.length(4); storage.items[0].should.be.a('object'); storage.items[0].should.have.property('id'); storage.items[0].should.have.property('name'); storage.items[0].id.should.be.a('number'); storage.items[0].id.should.equal(0); storage.items[0].name.should.be.a('string'); storage.items[0].name.should.equal('Broad beans'); storage.items[1].id.should.equal(2); storage.items[1].name.should.equal('Peppers'); storage.items[2].id.should.equal(3); storage.items[2].name.should.equal('Spork'); storage.items[3].id.should.equal(4); storage.items[3].name.should.equal('Milkshake'); done(); }); }); });