From 5a41cf1bface02916e84101396c7ec275811d2e2 Mon Sep 17 00:00:00 2001 From: Thomas Lynch Date: Thu, 7 Apr 2022 04:38:59 +1000 Subject: [PATCH] add setting.js tests, and make settings.js more strict --- helpers/setting.js | 11 +++++-- helpers/setting.test.js | 69 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 helpers/setting.test.js diff --git a/helpers/setting.js b/helpers/setting.js index 6cfb4d55..592833e9 100644 --- a/helpers/setting.js +++ b/helpers/setting.js @@ -1,17 +1,21 @@ 'use strict'; module.exports = { + trimSetting: (setting, oldSetting) => { - return setting != null ? setting.trim() : oldSetting; + return typeof setting === 'string' ? setting.trim() : oldSetting; }, + numberSetting: (setting, oldSetting) => { return typeof setting === 'number' && setting !== oldSetting ? setting : oldSetting; }, + booleanSetting: (setting) => { return setting != null; }, + arraySetting: (setting, oldSetting, limit=false) => { - if (setting !== null) { + if (typeof setting === 'string') { const split = setting .split(/\r?\n/) .filter(n => n); @@ -19,5 +23,6 @@ module.exports = { .slice(0, limit || split.length); } return oldSetting; - } + }, + }; diff --git a/helpers/setting.test.js b/helpers/setting.test.js new file mode 100644 index 00000000..242a2568 --- /dev/null +++ b/helpers/setting.test.js @@ -0,0 +1,69 @@ +const { trimSetting, numberSetting, booleanSetting, arraySetting } = require('./setting.js'); + +describe('trimSetting, numberSetting, booleanSetting, arraySetting', () => { + + const trimCases = [ + { in: '', out: '' }, + { in: ' lol ', out: 'lol' }, + { in: 1, out: 'OLDSETTING' }, + { in: null, out: 'OLDSETTING' }, + ]; + for(let i in trimCases) { + test(`should output ${trimCases[i].out} for an input of ${trimCases[i].in}`, () => { + expect(trimSetting(trimCases[i].in, 'OLDSETTING')).toStrictEqual(trimCases[i].out); + }); + } + + const numberCases = [ + { in: 3, out: 3 }, + { in: undefined, out: 'OLDSETTING' }, + { in: null, out: 'OLDSETTING' }, + { in: [], out: 'OLDSETTING' }, + { in: '', out: 'OLDSETTING' }, + { in: 'string', out: 'OLDSETTING' }, + ]; + for(let i in numberCases) { + test(`should output ${numberCases[i].out} for an input of ${numberCases[i].in}`, () => { + expect(numberSetting(numberCases[i].in, 'OLDSETTING')).toStrictEqual(numberCases[i].out); + }); + } + + const booleanCases = [ + { in: null, out: false }, + { in: undefined, out: false }, + { in: '', out: true }, + { in: 'test', out: true }, + { in: 1, out: true }, + { in: [], out: true }, + { in: [1], out: true }, + ]; + for(let i in booleanCases) { + test(`should output ${booleanCases[i].out} for an input of ${booleanCases[i].in}`, () => { + expect(booleanSetting(booleanCases[i].in)).toStrictEqual(booleanCases[i].out); + }); + } + + const arrayCases = [ + { in: undefined, out: 'OLDSETTING' }, + { in: null, out: 'OLDSETTING' }, + { in: '', out: [] }, + { in: 'test', out: ['test'] }, + { in: 1, out: 'OLDSETTING' }, + { in: [], out: 'OLDSETTING' }, + { in: '1', out: ['1'] }, + { in: `1 +2 +3`, out: ['1', '2', '3'] }, + { in: ` hello + +123 + +xxx`, out: [' hello ', '123', 'xxx'] }, + ]; + for(let i in arrayCases) { + test(`should output ${arrayCases[i].out} for an input of ${arrayCases[i].in}`, () => { + expect(arraySetting(arrayCases[i].in, 'OLDSETTING', 10)).toStrictEqual(arrayCases[i].out); + }); + } + +});