diff --git a/lib/getFactorioLocale.spec.js b/lib/getFactorioLocale.spec.js index 084ce986..a9ba1f3b 100644 --- a/lib/getFactorioLocale.spec.js +++ b/lib/getFactorioLocale.spec.js @@ -1,74 +1,74 @@ const assert = require("assert"); -const getFactorioLocale = require("./getFactorioLocale"); +const util = require("util"); -describe("getFactorioLocale.js", () => { - describe("asObject()", () => { - it("requires 2 strings and a function as parameters", () => { - let validate = (err) => { - return err == "Error: wrong parameters provided" +const getFactorioLocale = require("./getFactorioLocale"); +const asObjectAsync = util.promisify(getFactorioLocale.asObject); + +describe("getFactorioLocale.js", function() { + describe("asObject()", function() { + it("requires 2 strings and a function as parameters", function() { + function validate(err) { + return err.message == "Error: wrong parameters provided" } let message = "getFactorioLocale is responding incorrectly to invalid arguments" let callback = (err,object) => true; - + assert.throws(() => getFactorioLocale.asObject(), validate, message); assert.throws(() => getFactorioLocale.asObject("hello", "I forgot my callback"), validate, message); assert.throws(() => getFactorioLocale.asObject(undefined, undefined, callback), validate, message); - + // the proper way to do it - assert.doesNotThrow(() => getFactorioLocale.asObject("factorio_0.15.27", "en", callback), validate, message); + getFactorioLocale.asObject("factorio_0.15.27", "en", callback); }); - it("returns a nested object with base game locale information", (done) => { - getFactorioLocale.asObject("factorio", "en", callback); - - function callback(err, object){ - 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"); - } - }); + it("returns a nested object with base game locale information", async function() { + let object = await asObjectAsync("factorio", "en"); + + assert.equal(typeof object, "object"); + assert.equal(object["entity-name"]["fish"], "Fish"); + assert.equal(object["entity-name"]["small-lamp"], "Lamp"); + let empty_keys = 0; + 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 (!object[key][key2]) { + empty_keys++; + } + assert.equal(typeof object[key][key2], "string"); }); - done(); - } + + }); + assert(empty_keys < 10, `Got unusually high amount (${empty_keys}) of empty keys`); }); - it("has some duplicate keys", (done) => { - getFactorioLocale.asObject("factorio", "en", callback); - - function callback(err, object){ - let arrayOfKeys = []; - // collect all keys in a single array - Object.keys(object).forEach(key => { - arrayOfKeys.push(key); - Object.keys(object[key]).forEach(key2 => { - arrayOfKeys.push(key2); - }); + it("has some duplicate keys", async function() { + let object = await asObjectAsync("factorio", "en"); + + let arrayOfKeys = []; + // collect all keys in a single array + Object.keys(object).forEach(key => { + arrayOfKeys.push(key); + Object.keys(object[key]).forEach(key2 => { + arrayOfKeys.push(key2); }); - - // check for duplicates - let duplicateKeys = []; - let i = 0; - arrayOfKeys.forEach(key => { - let o = 0; - arrayOfKeys.forEach(key2 => { - if(i != o && key == key2){ - duplicateKeys.push(key); - } - o++ - }); - i++; + }); + + // check for duplicates + let duplicateKeys = []; + let i = 0; + arrayOfKeys.forEach(key => { + let o = 0; + arrayOfKeys.forEach(key2 => { + if(i != o && key == key2){ + duplicateKeys.push(key); + } + o++ }); - // we got 704 but this is a very unexact number - assert(duplicateKeys.length > 10) - done(); - } + i++; + }); + // we got 704 but this is a very unexact number + assert(duplicateKeys.length > 10) }); }); }); \ No newline at end of file diff --git a/master.spec.js b/master.spec.js index 7ad872d5..a7fac60a 100644 --- a/master.spec.js +++ b/master.spec.js @@ -26,22 +26,11 @@ describe('Master server endpoint testing', function() { it('should get the basegame factorio locale', async function() { let res = await get('/api/getFactorioLocale'); let object = res.body; - // test that it is actual factorio locale, copied from getFactorioLocale.spec.js + + // test that it is looks like a factorio locale 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], `${key}.${key2} is falsy (${object[key][key2]})`); - assert.equal(typeof object[key][key2], "string"); - } - }); - }); }); }); // describe("#GET /api/")