From 152ab23104ce0d63f7b640e12f9abdf239874b07 Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+samtv12345@users.noreply.github.com> Date: Thu, 21 Mar 2024 18:41:41 +0100 Subject: [PATCH] Added test cases. --- src/node/utils/Settings.ts | 9 +- src/node/utils/SettingsTree.ts | 17 ---- src/tests/backend/specs/settings.ts | 127 +++++++++++++++++----------- 3 files changed, 82 insertions(+), 71 deletions(-) diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts index 887aa284d..0fd964872 100644 --- a/src/node/utils/Settings.ts +++ b/src/node/utils/Settings.ts @@ -705,8 +705,6 @@ const lookupEnvironmentVariables = (obj: MapArrayType) => { replaceEnvs(obj); - const envVars: MapArrayType = {} - // Add plugin ENV variables /** @@ -720,7 +718,6 @@ const lookupEnvironmentVariables = (obj: MapArrayType) => { if (!env.startsWith("EP")) continue treeEntries.set(env, envVal) } - treeEntries.forEach((value, key) => { let pathToKey = key.split("__") let currentNode = root @@ -730,9 +727,9 @@ const lookupEnvironmentVariables = (obj: MapArrayType) => { }) //console.log(root.collectFromLeafsUpwards()) - //const rooting = root.collectFromLeafsUpwards() - - obj = Object.assign(obj, envVars) + const rooting = root.collectFromLeafsUpwards() + console.log("Rooting is", rooting.ADMIN) + obj = Object.assign(obj, rooting) return obj; }; diff --git a/src/node/utils/SettingsTree.ts b/src/node/utils/SettingsTree.ts index 33e2e5527..c505f2ebb 100644 --- a/src/node/utils/SettingsTree.ts +++ b/src/node/utils/SettingsTree.ts @@ -73,23 +73,6 @@ export class SettingsNode { return collected; } - - public transformObjectWithArrays() { - function isNumeric(str: string|object) { - if (typeof str != "string") return false // we only process strings! - // @ts-ignore - return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)... - !isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail - } - let collected: MapArrayType = {}; - for (const key in this.children) { - if (isNumeric(key)) { - Object.entries(this.children).map(([key, value]) => { - }) - } - } - } - coerceValue = (stringValue: string) => { // cooked from https://stackoverflow.com/questions/175739/built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number // @ts-ignore diff --git a/src/tests/backend/specs/settings.ts b/src/tests/backend/specs/settings.ts index 4ed447931..d9bfe4f6d 100644 --- a/src/tests/backend/specs/settings.ts +++ b/src/tests/backend/specs/settings.ts @@ -6,56 +6,87 @@ import path from 'path'; import process from 'process'; describe(__filename, function () { - describe('parseSettings', function () { - let settings:any; - const envVarSubstTestCases = [ - {name: 'true', val: 'true', var: 'SET_VAR_TRUE', want: true}, - {name: 'false', val: 'false', var: 'SET_VAR_FALSE', want: false}, - {name: 'null', val: 'null', var: 'SET_VAR_NULL', want: null}, - {name: 'undefined', val: 'undefined', var: 'SET_VAR_UNDEFINED', want: undefined}, - {name: 'number', val: '123', var: 'SET_VAR_NUMBER', want: 123}, - {name: 'string', val: 'foo', var: 'SET_VAR_STRING', want: 'foo'}, - {name: 'empty string', val: '', var: 'SET_VAR_EMPTY_STRING', want: ''}, - ]; + describe('parseSettings', function () { + let settings: any; + const envVarSubstTestCases = [ + {name: 'true', val: 'true', var: 'SET_VAR_TRUE', want: true}, + {name: 'false', val: 'false', var: 'SET_VAR_FALSE', want: false}, + {name: 'null', val: 'null', var: 'SET_VAR_NULL', want: null}, + {name: 'undefined', val: 'undefined', var: 'SET_VAR_UNDEFINED', want: undefined}, + {name: 'number', val: '123', var: 'SET_VAR_NUMBER', want: 123}, + {name: 'string', val: 'foo', var: 'SET_VAR_STRING', want: 'foo'}, + {name: 'empty string', val: '', var: 'SET_VAR_EMPTY_STRING', want: ''}, + ]; - before(async function () { - for (const tc of envVarSubstTestCases) process.env[tc.var] = tc.val; - delete process.env.UNSET_VAR; - settings = parseSettings(path.join(__dirname, 'settings.json'), true); - assert(settings != null); - }); - - describe('environment variable substitution', function () { - describe('set', function () { - for (const tc of envVarSubstTestCases) { - it(tc.name, async function () { - const obj = settings['environment variable substitution'].set; - if (tc.name === 'undefined') { - assert(!(tc.name in obj)); - } else { - assert.equal(obj[tc.name], tc.want); - } - }); - } - }); - - describe('unset', function () { - it('no default', async function () { - const obj = settings['environment variable substitution'].unset; - assert.equal(obj['no default'], null); + before(async function () { + for (const tc of envVarSubstTestCases) process.env[tc.var] = tc.val; + delete process.env.UNSET_VAR; + settings = parseSettings(path.join(__dirname, 'settings.json'), true); + assert(settings != null); }); - for (const tc of envVarSubstTestCases) { - it(tc.name, async function () { - const obj = settings['environment variable substitution'].unset; - if (tc.name === 'undefined') { - assert(!(tc.name in obj)); - } else { - assert.equal(obj[tc.name], tc.want); - } - }); - } - }); + describe('environment variable substitution', function () { + describe('set', function () { + for (const tc of envVarSubstTestCases) { + it(tc.name, async function () { + const obj = settings['environment variable substitution'].set; + if (tc.name === 'undefined') { + assert(!(tc.name in obj)); + } else { + assert.equal(obj[tc.name], tc.want); + } + }); + } + }); + + describe('unset', function () { + it('no default', async function () { + const obj = settings['environment variable substitution'].unset; + assert.equal(obj['no default'], null); + }); + + for (const tc of envVarSubstTestCases) { + it(tc.name, async function () { + const obj = settings['environment variable substitution'].unset; + if (tc.name === 'undefined') { + assert(!(tc.name in obj)); + } else { + assert.equal(obj[tc.name], tc.want); + } + }); + } + }); + }); }); - }); + + + describe("Parse plugin settings", function () { + + before(async function () { + process.env["EP__ADMIN__PASSWORD"] = "test" + }) + + it('should parse plugin settings', async function () { + let settings = parseSettings(path.join(__dirname, 'settings.json'), true); + assert.equal(settings.ADMIN.PASSWORD, "test"); + }) + + it('should bundle settings with same path', async function () { + process.env["EP__ADMIN__USERNAME"] = "test" + let settings = parseSettings(path.join(__dirname, 'settings.json'), true); + assert.deepEqual(settings.ADMIN, {PASSWORD: "test", USERNAME: "test"}); + }) + + it("Can set the ep themes", async function () { + process.env["EP__ep_themes__default_theme"] = "hacker" + let settings = parseSettings(path.join(__dirname, 'settings.json'), true); + assert.deepEqual(settings.ep_themes, {"default_theme": "hacker"}); + }) + + it("can set the ep_webrtc settings", async function () { + process.env["EP__ep_webrtc__enabled"] = "true" + let settings = parseSettings(path.join(__dirname, 'settings.json'), true); + assert.deepEqual(settings.ep_webrtc, {"enabled": true}); + }) + }) });