diff --git a/package.json b/package.json index 4ae9c82..53aa0cc 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,7 @@ "version": "0.0.1", "description": "A simple API Mockup tool", "main": "server.js", - "scripts": { - }, + "scripts": {}, "author": "Nicolas MASSE", "repository": "https://github.com/nmasse-itix/API-Mockup.git", "license": "MIT", @@ -12,5 +11,8 @@ "body-parser": "^1.17.2", "express": "latest", "underscore": "^1.8.3" + }, + "devDependencies": { + "supertest": "^3.0.0" } } diff --git a/test/specs.js b/test/specs.js new file mode 100644 index 0000000..93ea725 --- /dev/null +++ b/test/specs.js @@ -0,0 +1,148 @@ +const request = require('supertest'); +const assert = require('assert'); + +describe('server.js tests', function () { + var server = require("../server.js"); + + it("JSON Home", (done) => { + request(server) + .get('/') + .expect('Content-Type', /^application[/]json/) + .expect(200) + .expect((res) => { + assert.ok(res.body instanceof Object, "body is Object"); + assert.ok(res.body.documentation instanceof Object, "body.documentation is Object"); + assert.ok(res.body.documentation.GitHub != null, "body.documentation has a GitHub field"); + assert.ok(res.body.name != null, "body.name is not null"); + assert.ok(res.body.description != null, "body.description is not null"); + assert.ok(res.body.endpoints instanceof Object, "body.endpoints is Object"); + }) + .end(done); + }); + + it("Default config", (done) => { + request(server) + .get('/config') + .expect('Content-Type', /^application[/]json/) + .expect(200) + .expect((res) => { + assert.ok(res.body instanceof Object, "body is Object"); + assert.ok(res.body.things instanceof Object, "body.things is Object"); + assert.ok(res.body.things.fields instanceof Object, "body.things.fields has fields"); + assert.ok('name' in res.body.things.fields, "body.things.fields has a field named 'name'"); + assert.ok('price' in res.body.things.fields, "body.things.fields has a field named 'price'"); + }) + .end(done); + }); + + it("By default, the list of things is empty", (done) => { + request(server) + .get('/things/') + .expect('Content-Type', /^application[/]json/) + .expect(200) + .expect((res) => { + assert.ok(res.body instanceof Array, "body is Array"); + assert.equal(res.body.length, 0, "body has no item"); + }) + .end(done); + }); + + var id = null; + it("We can create a new thing", (done) => { + request(server) + .post('/things/') + .set('Content-Type', "application/json") + .send({ name: "Cat", price: 10 }) + .expect('Content-Type', /^application[/]json/) + .expect(201) + .expect((res) => { + assert.ok(res.body instanceof Object, "body is Object"); + assert.ok('id' in res.body, "the body contains an id"); + id = res.body.id; + }) + .end(done); + }); + + it("The new thing is in the list of things", (done) => { + request(server) + .get('/things/') + .expect('Content-Type', /^application[/]json/) + .expect(200) + .expect((res) => { + assert.ok(res.body instanceof Array, "body is Array"); + assert.equal(res.body.length, 1, "body has one item"); + assert.equal(res.body[0].name, "Cat", "item[0].name == cat"); + assert.equal(res.body[0].price, 10, "item[0].price == 10"); + assert.equal(res.body[0].id, id, "ids should be equal"); + }) + .end(done); + }); + + it("Query the things by id", (done) => { + request(server) + .get('/things/' + encodeURIComponent(id) + '/') + .expect('Content-Type', /^application[/]json/) + .expect(200) + .expect((res) => { + assert.ok(res.body instanceof Object, "body is Object"); + assert.equal(res.body.name, "Cat", "item.name == cat"); + assert.equal(res.body.price, 10, "item.price == 10"); + assert.equal(res.body.id, id, "ids should be equal"); + }) + .end(done); + }); + + it("We can update the thing", (done) => { + request(server) + .put('/things/' + encodeURIComponent(id) + '/') + .set('Content-Type', "application/json") + .send({ name: "Dog", price: 9, id: id }) + .expect('Content-Type', /^application[/]json/) + .expect(202) + .expect((res) => { + assert.equal(res.body.name, "Dog", "item.name == dog"); + assert.equal(res.body.price, 9, "item.price == 9"); + assert.equal(res.body.id, id, "ids should be equal"); + }) + .end(done); + }); + + it("Query the things by id and check updated fields", (done) => { + request(server) + .get('/things/' + encodeURIComponent(id) + '/') + .expect('Content-Type', /^application[/]json/) + .expect(200) + .expect((res) => { + assert.ok(res.body instanceof Object, "body is Object"); + assert.equal(res.body.name, "Dog", "item.name == dog"); + assert.equal(res.body.price, 9, "item.price == 9"); + assert.equal(res.body.id, id, "ids should be equal"); + }) + .end(done); + }); + + it("We can delete the thing", (done) => { + request(server) + .delete('/things/' + encodeURIComponent(id) + '/') + .expect('Content-Type', /^application[/]json/) + .expect(202) + .expect((res) => { + assert.equal(res.body.name, "Dog", "item.name == dog"); + assert.equal(res.body.price, 9, "item.price == 9"); + assert.equal(res.body.id, id, "ids should be equal"); + }) + .end(done); + }); + + it("Query the things by id and check it has been deleted", (done) => { + request(server) + .get('/things/' + encodeURIComponent(id) + '/') + .expect('Content-Type', /^application[/]json/) + .expect(404) + .expect((res) => { + assert.ok(res.body instanceof Object, "body is Object"); + assert.equal(res.body.status, 404, "body.status == 404"); + }) + .end(done); + }); +});