diff --git a/master.spec.js b/master.spec.js index 23c87b45..814b7153 100644 --- a/master.spec.js +++ b/master.spec.js @@ -7,35 +7,35 @@ const validateHTML = require('html5-validator'); describe('Master server endpoint testing', function() { describe('#GET /api/getFactorioLocale', function() { it('should get the basegame factorio locale', function(done) { - request(app).get('/api/getFactorioLocale') - .end(function(err, res) { - assert.equal(res.statusCode, 200); + request(app).get('/api/getFactorioLocale').end(function(err, res) { + assert.equal(res.statusCode, 200); + + let object = res.body; + + // test that it is actual factorio locale, copied from getFactorioLocale.spec.js + assert.equal(typeof object, "object"); + assert.equal(object["entity-name"]["fish"], "Fish"); + assert.equal(object["entity-name"]["small-lamp"], "Lamp"); + Object.keys(object).forEach(key => { + // first level of the nested object is always an object + assert.equal(typeof object[key], "object"); - let object = res.body; - - // test that it is actual factorio locale, copied from getFactorioLocale.spec.js - assert.equal(typeof object, "object"); - assert.equal(object["entity-name"]["fish"], "Fish"); - assert.equal(object["entity-name"]["small-lamp"], "Lamp"); - Object.keys(object).forEach(key => { - // first level of the nested object is always an object - assert.equal(typeof object[key], "object"); - - Object.keys(object[key]).forEach(key2 => { - // second level of the nested object is always a string, nearly always truthy - if(key2 != "so-long-and-thanks-for-all-the-fish"){ - assert.ok(object[key][key2]); - assert.equal(typeof object[key][key2], "string"); - } - }); + Object.keys(object[key]).forEach(key2 => { + // second level of the nested object is always a string, nearly always truthy + if(key2 != "so-long-and-thanks-for-all-the-fish"){ + assert.ok(object[key][key2]); + assert.equal(typeof object[key][key2], "string"); + } }); - done(); - }); + }); + done(); + }); }); }); // describe("#GET /api/") describe("#GET static website data", function() { it("sends some HTML when accessing /", function(done){ + this.timeout(6000); request(app).get("/").end(function(err,res){ assert.equal(res.statusCode, 200); validateHTML(res.text).then(result => { @@ -45,6 +45,7 @@ describe('Master server endpoint testing', function() { }); }); it("sends some HTML when accessing /nodes",function(done){ + this.timeout(6000); request(app).get("/nodes").end(function(err,res){ assert.equal(res.statusCode, 200); validateHTML(res.text).then(result => { @@ -54,6 +55,7 @@ describe('Master server endpoint testing', function() { }); }); it("sends some HTML when accessing /settings",function(done){ + this.timeout(6000); request(app).get("/settings").end(function(err,res){ assert.equal(res.statusCode, 200); validateHTML(res.text).then(result => { @@ -63,6 +65,7 @@ describe('Master server endpoint testing', function() { }); }); it("sends some HTML when accessing /nodeDetails",function(done){ + this.timeout(6000); request(app).get("/nodeDetails").end(function(err,res){ assert.equal(res.statusCode, 200); validateHTML(res.text).then(result => { @@ -72,4 +75,42 @@ describe('Master server endpoint testing', function() { }); }); }); -}); \ No newline at end of file + let persistentMaster = request(app); + describe("#POST /api/place", function(){ + it("adds an itemStack to the masters inventory", function(done){ + persistentMaster.post("/api/place") + .send({ + name:"steel-plate", + count:20, + instanceName:"unitTest" + }) + .end(function(err,res){ + assert(!err) + assert.equal(res.text, "success", "something went wrong with the request") + done(); + }) + }); + }); + describe("#GET /api/inventory", function(){ + it("returns the masters current inventory", function(done){ + persistentMaster.get("/api/inventory").end(function(err,res){ + assert.equal(res.statusCode, 200); + let inventory + try { + inventory = JSON.parse(res.text); + } catch (e){ + assert(!e); + } + assert.equal(typeof inventory, "object", "Inventory should be an object"); + assert(inventory.length >= 1, "There should be at least 1 entry in the inventory"); + + let contains20SteelPlate = false; + inventory.forEach(itemStack => { + if(itemStack.name == "steel-plate" && itemStack.count >= 20) contains20SteelPlate = true; + }); + assert(contains20SteelPlate, "Please ensure there are at least 20 steel plate in the inventory") + done(); + }); + }); + }); +});