A simple API Mockup tool
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

177 lines
6.5 KiB

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("Default config (by id)", (done) => {
request(server)
.get('/config/things/')
.expect('Content-Type', /^application[/]json/)
.expect(200)
.expect((res) => {
assert.ok(res.body instanceof Object, "body is Object");
assert.ok(res.body.fields instanceof Object, "body.things.fields has fields");
assert.ok('name' in res.body.fields, "body.things.fields has a field named 'name'");
assert.ok('price' in res.body.fields, "body.things.fields has a field named 'price'");
})
.end(done);
});
it("Get the swagger of the default config", (done) => {
request(server)
.get('/config/things/swagger')
.expect('Content-Type', /^application[/]json/)
.expect(200)
.expect((res) => {
assert.ok(res.body instanceof Object, "body is Object");
assert.equal(res.body.info.title, "Mockup (things)", "search-and-replace worked");
assert.equal(res.body.definitions.PersistedThing.properties.id.required, true, "PersistedThing have a mandatory id");
assert.equal(res.body.definitions.Thing.properties.name.required, true, "Thing have a mandatory name");
assert.equal(res.body.definitions.Thing.properties.price.required, true, "Thing have a mandatory 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(200)
.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(200)
.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);
});
});