From 4dda8086011cad2c172a75d45f2c466d6f1a1daa Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Tue, 28 Jul 2026 14:42:35 +0200 Subject: [PATCH] test(settings): add describe to settingsValidator test --- .../utils/__tests__/settingsValidator.test.js | 1440 +++++++++-------- 1 file changed, 721 insertions(+), 719 deletions(-) diff --git a/src/features/settings/utils/__tests__/settingsValidator.test.js b/src/features/settings/utils/__tests__/settingsValidator.test.js index 05f00fd..96400e8 100644 --- a/src/features/settings/utils/__tests__/settingsValidator.test.js +++ b/src/features/settings/utils/__tests__/settingsValidator.test.js @@ -17,742 +17,744 @@ limitations under the License. import { describe, test, expect } from 'vitest'; import { validateSettingsConfig, validateEntry, validateSelectionOptions, assertType, assertString } from '../settingsValidator'; -describe('validateSettingsConfig', () => { - test.for([ - { raw: false, expected: false }, - { raw: true, expected: false }, - { raw: 0, expected: false }, - { raw: 42, expected: false }, - { raw: '', expected: false }, - { raw: ' ', expected: false }, - { raw: 'a', expected: false }, - { raw: {}, expected: false }, - { raw: { - contents: [] - }, expected: true }, - { raw: { - contents: [ - { - name: 'general', - i18n: 'settings.settings.general', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - i18n: 'settings.settings.general.enableFeature42' - } - ] - } - ] - }, expected: true }, - { raw: { - contents: [ - { - name: 'general', - i18n: 'settings.settings.general', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - name: 'copyOfGeneral', - i18n: 'settings.settings.copyOfGeneral', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - ] - }, expected: true }, - { raw: { - contents: [ - { - name: 'general', - i18n: 'settings.settings.general', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - name: 'copyOfGeneral', - i18n: 'settings.settings.copyOfGeneral', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - default: false, - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - name: 'aSection', - i18n: 'settings.settings.aSection', - content: [ - { - type: 'bool', - name: 'Enable feature 43', - i18n: 'settings.settings.aSection.enableFeature43' - }, - { - type: 'selection', - name: 'language', - i18n: 'settings.settings.aSection.language.label', - default: 'en', - options: [ - { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, - { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, - ] - }, - { - type: 'section', - name: 'section2', - i18n: 'settings.settings.aSection.section2.label', - content: [ - { - type: 'string', - name: 'string', - i18n: 'settings.settings.aSection.sections.string', - default: 'str' - } - ] - }, - ] - }, - ] - }, expected: true }, - { raw: { - contents: [ - { - name: 'general', - i18n: 'settings.settings.general', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - name: 'copyOfGeneral', - i18n: 'settings.settings.copyOfGeneral', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - default: false, - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - name: 'aSection', - i18n: 'settings.settings.aSection', - content: [ - { - type: 'bool', - name: 'Enable feature 43', - i18n: 'settings.settings.aSection.enableFeature43' - }, - { - type: 'selection', - name: 'language', - i18n: 'settings.settings.aSection.language.label', - default: 'en', - allowMultiple: false, - options: [ - { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, - { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, - ] - }, - { - type: 'section', - name: 'section2', - i18n: 'settings.settings.aSection.section2.label', - content: [ - { - type: 'string', - name: 'string', - i18n: 'settings.settings.aSection.sections.string', - default: 'str' - } - ] - }, - ] - }, - ] - }, expected: true }, - { raw: { - contents: [ - { - type: 'bool', - name: 'aStandaloneBooleanSetting', - i18n: 'settings.settings.aStandaloneBooleanSetting', - default: true - }, - { - name: 'general', - i18n: 'settings.settings.general', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - name: 'copyOfGeneral', - i18n: 'settings.settings.copyOfGeneral', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - default: false, - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - name: 'aSection', - i18n: 'settings.settings.aSection', - content: [ - { - type: 'bool', - name: 'Enable feature 43', - i18n: 'settings.settings.aSection.enableFeature43' - }, - { - type: 'selection', - name: 'language', - i18n: 'settings.settings.aSection.language.label', - default: 'en', - allowMultiple: false, - options: [ - { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, - { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, - ] - }, - { - type: 'section', - name: 'section2', - i18n: 'settings.settings.aSection.section2.label', - content: [ - { - type: 'string', - name: 'string', - i18n: 'settings.settings.aSection.sections.string', - default: 'str' - } - ] - }, - ] - }, - ] - }, expected: false }, - { raw: { - contents: [ - { - type: 'section', - name: 'general', - i18n: 'settings.settings.general', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - type: 'section', - name: 'copyOfGeneral', - i18n: 'settings.settings.copyOfGeneral', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - default: false, - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - type: 'section', - name: 'aSection', - i18n: 'settings.settings.aSection', - content: [ - { - type: 'bool', - name: 'Enable feature 43', - i18n: 'settings.settings.aSection.enableFeature43', - default: 'true' - }, - { - type: 'selection', - name: 'language', - i18n: 'settings.settings.aSection.language.label', - default: 'en', - options: [ - { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, - { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, - ] - }, - { - type: 'section', - name: 'section2', - i18n: 'settings.settings.aSection.section2.label', - content: [ - { - type: 'string', - name: 'string', - i18n: 'settings.settings.aSection.sections.string', - default: 42 - } - ] - }, - ] - }, - ] - }, expected: false }, - { raw: { - content: [ - { - type: 'section', - name: 'general', - i18n: 'settings.settings.general', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - type: 'section', - name: 'copyOfGeneral', - i18n: 'settings.settings.copyOfGeneral', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - default: false, - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - type: 'section', - name: 'aSection', - i18n: 'settings.settings.aSection', - content: [ - { - type: 'bool', - name: 'Enable feature 43', - i18n: 'settings.settings.aSection.enableFeature43' - }, - { - type: 'selection', - name: 'language', - i18n: 'settings.settings.aSection.language.label', - default: 'en', - options: [ - { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, - { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, - ] - }, - { - type: 'section', - name: 'section2', - i18n: 'settings.settings.aSection.section2.label', - content: [ - { - type: 'string', - name: 'string', - i18n: 'settings.settings.aSection.sections.string', - default: 'str' - } - ] - }, - ] - }, - ] - }, expected: false }, - { raw: { - content: [ - { - type: 'sectio', - name: 'general', - i18n: 'settings.settings.general', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - type: 'section', - name: 'copyOfGeneral', - i18n: 'settings.settings.copyOfGeneral', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - default: false, - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - type: 'section', - name: 'aSection', - i18n: 'settings.settings.aSection', - content: [ - { - type: 'bool', - name: 'Enable feature 43', - i18n: 'settings.settings.aSection.enableFeature43' - }, - { - type: 'selection', - name: 'language', - i18n: 'settings.settings.aSection.language.label', - default: 'en', - options: [ - { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, - { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, - ] - }, - { - type: 'section', - name: 'section2', - i18n: 'settings.settings.aSection.section2.label', - content: [ - { - type: 'string', - name: 'string', - i18n: 'settings.settings.aSection.sections.string', - default: 'str' - } - ] - }, - ] - }, - ] - }, expected: false }, - { raw: { - content: [ - { - type: 'sectio', - name: 'general', - i18n: 'settings.settings.general', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - type: 'section', - name: 'copyOfGeneral', - i18n: 'settings.settings.copyOfGeneral', - content: [ - { - type: 'bool', - name: 'Enable feature 42', - default: false, - i18n: 'settings.settings.general.enableFeature42' - } - ] - }, - { - type: 'section', - name: 'aSection', - i18n: 'settings.settings.aSection', - content: [ - { - type: 'bool', - name: 'Enable feature 43', - i18n: 'settings.settings.aSection.enableFeature43' - }, - { - type: 'selection', - name: 'language', - i18n: 'settings.settings.aSection.language.label', - default: 'en', - allowMultiple: 'false', - options: [ - { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, - { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, - ] - }, - { - type: 'section', - name: 'section2', - i18n: 'settings.settings.aSection.section2.label', - content: [ - { - type: 'string', - name: 'string', - i18n: 'settings.settings.aSection.sections.string', - default: 'str' - } - ] - }, - ] - }, - ] - }, expected: false } - ])('returns valid: $expected', ({ raw, expected }) => { - const result = validateSettingsConfig(raw); - if (!result.valid) { - console.error('Error message:', result.error); - }; - expect(result.valid).toBe(expected); - }); -}); - -describe('validateEntry', () => { - test.for([ - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable' }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: false }], - - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label' }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: 42 }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: 0 }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: -42.7 }], - - [{ name: 'aString', type: 'string', i18n: 'aString.label' }], - [{ name: 'aString', type: 'string', i18n: 'aString.label', default: '' }], - [{ name: 'aString', type: 'string', i18n: 'aString.label', default: 'Seekra is great!' }], - - [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', options: [ - { name: 'yes', i18n: 'selectSomething.options.yes' }, - { name: 'no', i18n: 'selectSomething.options.no' }, - { name: 'maybe', i18n: 'selectSomething.options.maybe' } - ] }], - - [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'no', options: [ - { name: 'yes', i18n: 'selectSomething.options.yes' }, - { name: 'no', i18n: 'selectSomething.options.no' }, - { name: 'maybe', i18n: 'selectSomething.options.maybe' } - ] }], - - [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [] }], - [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [ - { name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true } - ] }], - [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [ - { name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true }, - { name: 'enableFeature43', type: 'bool', i18n: 'feature.43.enable', default: true } - ] }], - [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [ - { name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true }, - { name: 'enableFeature43', type: 'bool', i18n: 'feature.43.enable', default: true }, - { name: 'aSecondSection', type: 'section', i18n: 'sections.aSecondSection.title', content: [ - { name: 'enableFeature44', type: 'bool', i18n: 'feature.44.enable', default: true }, - ] } - ] }] - ])('throws no error for the entry %s', ([ entry ]) => { - expect(() => validateEntry(entry)).not.throws(Error); +describe('settingsValidator', () => { + describe('validateSettingsConfig', () => { + test.for([ + { raw: false, expected: false }, + { raw: true, expected: false }, + { raw: 0, expected: false }, + { raw: 42, expected: false }, + { raw: '', expected: false }, + { raw: ' ', expected: false }, + { raw: 'a', expected: false }, + { raw: {}, expected: false }, + { raw: { + contents: [] + }, expected: true }, + { raw: { + contents: [ + { + name: 'general', + i18n: 'settings.settings.general', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + i18n: 'settings.settings.general.enableFeature42' + } + ] + } + ] + }, expected: true }, + { raw: { + contents: [ + { + name: 'general', + i18n: 'settings.settings.general', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + name: 'copyOfGeneral', + i18n: 'settings.settings.copyOfGeneral', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + ] + }, expected: true }, + { raw: { + contents: [ + { + name: 'general', + i18n: 'settings.settings.general', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + name: 'copyOfGeneral', + i18n: 'settings.settings.copyOfGeneral', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + default: false, + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + name: 'aSection', + i18n: 'settings.settings.aSection', + content: [ + { + type: 'bool', + name: 'Enable feature 43', + i18n: 'settings.settings.aSection.enableFeature43' + }, + { + type: 'selection', + name: 'language', + i18n: 'settings.settings.aSection.language.label', + default: 'en', + options: [ + { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, + { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, + ] + }, + { + type: 'section', + name: 'section2', + i18n: 'settings.settings.aSection.section2.label', + content: [ + { + type: 'string', + name: 'string', + i18n: 'settings.settings.aSection.sections.string', + default: 'str' + } + ] + }, + ] + }, + ] + }, expected: true }, + { raw: { + contents: [ + { + name: 'general', + i18n: 'settings.settings.general', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + name: 'copyOfGeneral', + i18n: 'settings.settings.copyOfGeneral', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + default: false, + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + name: 'aSection', + i18n: 'settings.settings.aSection', + content: [ + { + type: 'bool', + name: 'Enable feature 43', + i18n: 'settings.settings.aSection.enableFeature43' + }, + { + type: 'selection', + name: 'language', + i18n: 'settings.settings.aSection.language.label', + default: 'en', + allowMultiple: false, + options: [ + { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, + { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, + ] + }, + { + type: 'section', + name: 'section2', + i18n: 'settings.settings.aSection.section2.label', + content: [ + { + type: 'string', + name: 'string', + i18n: 'settings.settings.aSection.sections.string', + default: 'str' + } + ] + }, + ] + }, + ] + }, expected: true }, + { raw: { + contents: [ + { + type: 'bool', + name: 'aStandaloneBooleanSetting', + i18n: 'settings.settings.aStandaloneBooleanSetting', + default: true + }, + { + name: 'general', + i18n: 'settings.settings.general', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + name: 'copyOfGeneral', + i18n: 'settings.settings.copyOfGeneral', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + default: false, + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + name: 'aSection', + i18n: 'settings.settings.aSection', + content: [ + { + type: 'bool', + name: 'Enable feature 43', + i18n: 'settings.settings.aSection.enableFeature43' + }, + { + type: 'selection', + name: 'language', + i18n: 'settings.settings.aSection.language.label', + default: 'en', + allowMultiple: false, + options: [ + { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, + { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, + ] + }, + { + type: 'section', + name: 'section2', + i18n: 'settings.settings.aSection.section2.label', + content: [ + { + type: 'string', + name: 'string', + i18n: 'settings.settings.aSection.sections.string', + default: 'str' + } + ] + }, + ] + }, + ] + }, expected: false }, + { raw: { + contents: [ + { + type: 'section', + name: 'general', + i18n: 'settings.settings.general', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + type: 'section', + name: 'copyOfGeneral', + i18n: 'settings.settings.copyOfGeneral', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + default: false, + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + type: 'section', + name: 'aSection', + i18n: 'settings.settings.aSection', + content: [ + { + type: 'bool', + name: 'Enable feature 43', + i18n: 'settings.settings.aSection.enableFeature43', + default: 'true' + }, + { + type: 'selection', + name: 'language', + i18n: 'settings.settings.aSection.language.label', + default: 'en', + options: [ + { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, + { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, + ] + }, + { + type: 'section', + name: 'section2', + i18n: 'settings.settings.aSection.section2.label', + content: [ + { + type: 'string', + name: 'string', + i18n: 'settings.settings.aSection.sections.string', + default: 42 + } + ] + }, + ] + }, + ] + }, expected: false }, + { raw: { + content: [ + { + type: 'section', + name: 'general', + i18n: 'settings.settings.general', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + type: 'section', + name: 'copyOfGeneral', + i18n: 'settings.settings.copyOfGeneral', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + default: false, + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + type: 'section', + name: 'aSection', + i18n: 'settings.settings.aSection', + content: [ + { + type: 'bool', + name: 'Enable feature 43', + i18n: 'settings.settings.aSection.enableFeature43' + }, + { + type: 'selection', + name: 'language', + i18n: 'settings.settings.aSection.language.label', + default: 'en', + options: [ + { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, + { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, + ] + }, + { + type: 'section', + name: 'section2', + i18n: 'settings.settings.aSection.section2.label', + content: [ + { + type: 'string', + name: 'string', + i18n: 'settings.settings.aSection.sections.string', + default: 'str' + } + ] + }, + ] + }, + ] + }, expected: false }, + { raw: { + content: [ + { + type: 'sectio', + name: 'general', + i18n: 'settings.settings.general', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + type: 'section', + name: 'copyOfGeneral', + i18n: 'settings.settings.copyOfGeneral', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + default: false, + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + type: 'section', + name: 'aSection', + i18n: 'settings.settings.aSection', + content: [ + { + type: 'bool', + name: 'Enable feature 43', + i18n: 'settings.settings.aSection.enableFeature43' + }, + { + type: 'selection', + name: 'language', + i18n: 'settings.settings.aSection.language.label', + default: 'en', + options: [ + { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, + { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, + ] + }, + { + type: 'section', + name: 'section2', + i18n: 'settings.settings.aSection.section2.label', + content: [ + { + type: 'string', + name: 'string', + i18n: 'settings.settings.aSection.sections.string', + default: 'str' + } + ] + }, + ] + }, + ] + }, expected: false }, + { raw: { + content: [ + { + type: 'sectio', + name: 'general', + i18n: 'settings.settings.general', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + type: 'section', + name: 'copyOfGeneral', + i18n: 'settings.settings.copyOfGeneral', + content: [ + { + type: 'bool', + name: 'Enable feature 42', + default: false, + i18n: 'settings.settings.general.enableFeature42' + } + ] + }, + { + type: 'section', + name: 'aSection', + i18n: 'settings.settings.aSection', + content: [ + { + type: 'bool', + name: 'Enable feature 43', + i18n: 'settings.settings.aSection.enableFeature43' + }, + { + type: 'selection', + name: 'language', + i18n: 'settings.settings.aSection.language.label', + default: 'en', + allowMultiple: 'false', + options: [ + { name: 'en', i18n: 'settings.settings.aSection.language.options.en' }, + { name: 'de', i18n: 'settings.settings.aSection.language.options.de' }, + ] + }, + { + type: 'section', + name: 'section2', + i18n: 'settings.settings.aSection.section2.label', + content: [ + { + type: 'string', + name: 'string', + i18n: 'settings.settings.aSection.sections.string', + default: 'str' + } + ] + }, + ] + }, + ] + }, expected: false } + ])('returns valid: $expected', ({ raw, expected }) => { + const result = validateSettingsConfig(raw); + if (!result.valid) { + console.error('Error message:', result.error); + }; + expect(result.valid).toBe(expected); + }); }); - test.for([ - [{ name: 'enableFeature42', type: 'bool', i18n: '' }], - [{ name: 'enableFeature42', type: 'thisTypeDoesNotExistAndHasAVeryLongName', i18n: 'feature.42.enable' }], - [{ name: '', type: 'thisTypeDoesNotExistAndHasAVeryLongName', i18n: 'feature.42.enable' }], - [{ name: '', type: 'thisTypeDoesNotExistAndHasAVeryLongName', i18n: '' }], - [{ name: '', type: 'bool', i18n: '' }], - [{ name: '', type: 'bool', i18n: '' }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 42 }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: '42' }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 'Seekra' }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 'true' }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 'false' }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 'undefined' }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 'null' }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: [] }], - [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: {} }], - [{ name: 'enableFeature42', type: '', i18n: 'feature.42.enable', default: {} }], - - [{ name: '', type: 'number', i18n: 'aNumber.label' }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: '42' }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: 'zero' }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: 'undefined' }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: 'false' }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: true }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: false }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: [] }], - [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: {} }], - [{ name: 'aNumber', type: '', i18n: 'aNumber.label', default: {} }], - [{ name: 'aNumber', type: '', i18n: 'aNumber.label', default: 42 }], - - [{ name: 'aString', type: 'string', i18n: '' }], - [{ name: 'aString', type: 'string', i18n: 'aString.label', default: 42 }], - [{ name: 'aString', type: 'string', i18n: 'aString.label', default: true }], - [{ name: 'aString', type: 'string', i18n: 'aString.label', default: false }], - [{ name: 'aString', type: 'string', i18n: 'aString.label', default: [] }], - [{ name: 'aString', type: 'string', i18n: 'aString.label', default: {} }], - [{ name: 'aString', type: 'string', i18n: '', default: {} }], + describe('validateEntry', () => { + test.for([ + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable' }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: false }], + + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label' }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: 42 }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: 0 }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: -42.7 }], + + [{ name: 'aString', type: 'string', i18n: 'aString.label' }], + [{ name: 'aString', type: 'string', i18n: 'aString.label', default: '' }], + [{ name: 'aString', type: 'string', i18n: 'aString.label', default: 'Seekra is great!' }], - [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'a', options: true }], - [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'a', options: [] }], - [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'c', options: [ - { name: 'a', i18n: 'a' }, - { name: 'b', i18n: 'b' } - ] }], - [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'a', options: [ - { name: 'a', i18n: 'a' }, - { name: 'b', i18n: '' }, - { name: 'c' } - ] }], - [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'a', allowMultiple: 'false', options: [ - { name: 'a', i18n: 'a' }, - { name: 'b', i18n: '' }, - { name: 'c' } - ] }], + [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', options: [ + { name: 'yes', i18n: 'selectSomething.options.yes' }, + { name: 'no', i18n: 'selectSomething.options.no' }, + { name: 'maybe', i18n: 'selectSomething.options.maybe' } + ] }], - [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'no', options: [ - { name: 'yes', i18n: '' }, - { name: '', i18n: 'selectSomething.options.no' }, - { name: 'maybe', i18n: 'selectSomething.options.maybe' }, - { name: '', i18n: '' }, - { name: 42, i18n: 43 }, - { name: '' }, - { i18n: '' }, - {} - ] }], + [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'no', options: [ + { name: 'yes', i18n: 'selectSomething.options.yes' }, + { name: 'no', i18n: 'selectSomething.options.no' }, + { name: 'maybe', i18n: 'selectSomething.options.maybe' } + ] }], - [{ name: 'aSection', type: 'section', i18n: '', content: [] }], - [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: '' }], - [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: '[]' }], - [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: 'a' }], - [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [ - { name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true }, - { name: 'enableFeature43', type: 'bool', i18n: 'feature.42.enable', default: 0 }, - { name: 'enableFeature44', type: 'bool' } - ] }], - [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [ - { name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true }, - { name: 'enableFeature43', type: 'bool', i18n: 'feature.43.enable', default: true }, - { name: 'aSecondSection', type: 'section', i18n: 'sections.aSecondSection.title', content: 'Hello' }, - { name: 'aSecondSection', type: 'section', i18n: '', content: [] }, - { name: 'aSecondSection', type: 'section', i18n: 'i18n', content: [] }, - { name: 'aSecondSection', type: 'section', content: [] } - ] }] - ])('throws an error for the entry %s', ([ entry ]) => { - expect(() => validateEntry(entry)).throws(Error); - }); -}); + [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [] }], + [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [ + { name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true } + ] }], + [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [ + { name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true }, + { name: 'enableFeature43', type: 'bool', i18n: 'feature.43.enable', default: true } + ] }], + [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [ + { name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true }, + { name: 'enableFeature43', type: 'bool', i18n: 'feature.43.enable', default: true }, + { name: 'aSecondSection', type: 'section', i18n: 'sections.aSecondSection.title', content: [ + { name: 'enableFeature44', type: 'bool', i18n: 'feature.44.enable', default: true }, + ] } + ] }] + ])('throws no error for the entry %s', ([ entry ]) => { + expect(() => validateEntry(entry)).not.throws(Error); + }); -describe('validateSelectionOptions', () => { - test.for([ - [[{ name: 'test', i18n: 'test.label' }]], - [[{ name: 'test', i18n: 'test.label' }, { name: 'test2', i18n: 'test2.label' }]], - [[{ name: 'test', i18n: 'test.label' }, { name: 'test', i18n: 'test2.label' }, { name: 'test3', i18n: 'test.label' }]] - ])('throws no error for the options %s', ([ options ]) => { - expect(() => validateSelectionOptions(options)).not.throws(Error); + test.for([ + [{ name: 'enableFeature42', type: 'bool', i18n: '' }], + [{ name: 'enableFeature42', type: 'thisTypeDoesNotExistAndHasAVeryLongName', i18n: 'feature.42.enable' }], + [{ name: '', type: 'thisTypeDoesNotExistAndHasAVeryLongName', i18n: 'feature.42.enable' }], + [{ name: '', type: 'thisTypeDoesNotExistAndHasAVeryLongName', i18n: '' }], + [{ name: '', type: 'bool', i18n: '' }], + [{ name: '', type: 'bool', i18n: '' }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 42 }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: '42' }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 'Seekra' }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 'true' }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 'false' }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 'undefined' }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: 'null' }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: [] }], + [{ name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: {} }], + [{ name: 'enableFeature42', type: '', i18n: 'feature.42.enable', default: {} }], + + [{ name: '', type: 'number', i18n: 'aNumber.label' }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: '42' }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: 'zero' }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: 'undefined' }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: 'false' }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: true }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: false }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: [] }], + [{ name: 'aNumber', type: 'number', i18n: 'aNumber.label', default: {} }], + [{ name: 'aNumber', type: '', i18n: 'aNumber.label', default: {} }], + [{ name: 'aNumber', type: '', i18n: 'aNumber.label', default: 42 }], + + [{ name: 'aString', type: 'string', i18n: '' }], + [{ name: 'aString', type: 'string', i18n: 'aString.label', default: 42 }], + [{ name: 'aString', type: 'string', i18n: 'aString.label', default: true }], + [{ name: 'aString', type: 'string', i18n: 'aString.label', default: false }], + [{ name: 'aString', type: 'string', i18n: 'aString.label', default: [] }], + [{ name: 'aString', type: 'string', i18n: 'aString.label', default: {} }], + [{ name: 'aString', type: 'string', i18n: '', default: {} }], + + [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'a', options: true }], + [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'a', options: [] }], + [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'c', options: [ + { name: 'a', i18n: 'a' }, + { name: 'b', i18n: 'b' } + ] }], + [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'a', options: [ + { name: 'a', i18n: 'a' }, + { name: 'b', i18n: '' }, + { name: 'c' } + ] }], + [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'a', allowMultiple: 'false', options: [ + { name: 'a', i18n: 'a' }, + { name: 'b', i18n: '' }, + { name: 'c' } + ] }], + + [{ name: 'selectSomething', type: 'selection', i18n: 'selectSomething.title', default: 'no', options: [ + { name: 'yes', i18n: '' }, + { name: '', i18n: 'selectSomething.options.no' }, + { name: 'maybe', i18n: 'selectSomething.options.maybe' }, + { name: '', i18n: '' }, + { name: 42, i18n: 43 }, + { name: '' }, + { i18n: '' }, + {} + ] }], + + [{ name: 'aSection', type: 'section', i18n: '', content: [] }], + [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: '' }], + [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: '[]' }], + [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: 'a' }], + [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [ + { name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true }, + { name: 'enableFeature43', type: 'bool', i18n: 'feature.42.enable', default: 0 }, + { name: 'enableFeature44', type: 'bool' } + ] }], + [{ name: 'aSection', type: 'section', i18n: 'sections.aSection.title', content: [ + { name: 'enableFeature42', type: 'bool', i18n: 'feature.42.enable', default: true }, + { name: 'enableFeature43', type: 'bool', i18n: 'feature.43.enable', default: true }, + { name: 'aSecondSection', type: 'section', i18n: 'sections.aSecondSection.title', content: 'Hello' }, + { name: 'aSecondSection', type: 'section', i18n: '', content: [] }, + { name: 'aSecondSection', type: 'section', i18n: 'i18n', content: [] }, + { name: 'aSecondSection', type: 'section', content: [] } + ] }] + ])('throws an error for the entry %s', ([ entry ]) => { + expect(() => validateEntry(entry)).throws(Error); + }); }); - test.for([ - [[{}]], - [[{ i18n: '' }]], - [[{ i18n: 'a' }]], - [[{ name: 'a' }]], - [[{ name: '' }]], - [[{ name: '', i18n: 'test.label' }]], - [[{ name: 'test', i18n: '' }]], - [[{ name: '', i18n: '' }]], - [[{ name: '', i18n: 'test.label' }, { name: 'test2', i18n: '' }]], - [[{ name: 'test', i18n: '' }, { name: '', i18n: 'test2.label' }, { name: '', i18n: ' ' }, { name: '42', i18n: '42.i18n' }]], - [[]] - ])('throws an error for the options %s', ([ options ]) => { - expect(() => validateSelectionOptions(options)).throws(Error); - }); -}); + describe('validateSelectionOptions', () => { + test.for([ + [[{ name: 'test', i18n: 'test.label' }]], + [[{ name: 'test', i18n: 'test.label' }, { name: 'test2', i18n: 'test2.label' }]], + [[{ name: 'test', i18n: 'test.label' }, { name: 'test', i18n: 'test2.label' }, { name: 'test3', i18n: 'test.label' }]] + ])('throws no error for the options %s', ([ options ]) => { + expect(() => validateSelectionOptions(options)).not.throws(Error); + }); -describe('assertType', () => { - test.for([ - ['bool'], - ['number'], - ['string'], - ['selection'], - ['section'] - ])('throws no error for the value %s', ([ value ]) => { - expect(() => assertType(value)).not.throw(Error); + test.for([ + [[{}]], + [[{ i18n: '' }]], + [[{ i18n: 'a' }]], + [[{ name: 'a' }]], + [[{ name: '' }]], + [[{ name: '', i18n: 'test.label' }]], + [[{ name: 'test', i18n: '' }]], + [[{ name: '', i18n: '' }]], + [[{ name: '', i18n: 'test.label' }, { name: 'test2', i18n: '' }]], + [[{ name: 'test', i18n: '' }, { name: '', i18n: 'test2.label' }, { name: '', i18n: ' ' }, { name: '42', i18n: '42.i18n' }]], + [[]] + ])('throws an error for the options %s', ([ options ]) => { + expect(() => validateSelectionOptions(options)).throws(Error); + }); }); - test.for([ - [''], - [' '], - [' '], - [' '], + describe('assertType', () => { + test.for([ + ['bool'], + ['number'], + ['string'], + ['selection'], + ['section'] + ])('throws no error for the value %s', ([ value ]) => { + expect(() => assertType(value)).not.throw(Error); + }); - ['42'], - ['0'], - ['-42'], - ['-42.0'], - ['-0.0'], + test.for([ + [''], + [' '], + [' '], + [' '], - ['a'], - ['ab'], - ['SeekraIsGreat!'], - ['Seekra is great!'], + ['42'], + ['0'], + ['-42'], + ['-42.0'], + ['-0.0'], - [undefined], - [null] - ])('throws an error for the value %s', ([ value ]) => { - expect(() => assertType(value)).throw(Error); - }); -}); + ['a'], + ['ab'], + ['SeekraIsGreat!'], + ['Seekra is great!'], -describe('assertString', () => { - test.for([ - ['a'], - ['b'], - ['ab'], - - ['0'], - ['42'], - - ['null'], - ['undefined'], - - ['()&%())'] - ])('throws no error for the value %s', ([ value ]) => { - expect(() => assertString(value)).not.throw(Error); + [undefined], + [null] + ])('throws an error for the value %s', ([ value ]) => { + expect(() => assertType(value)).throw(Error); + }); }); - test.for([ - [0], - [1], - [42], - [-1], - [-42], + describe('assertString', () => { + test.for([ + ['a'], + ['b'], + ['ab'], - [''], - [' '], - [' '], - [' '] - ])('throws an error for the value %s', ([ value ]) => { - expect(() => assertString(value)).throws(Error); + ['0'], + ['42'], + + ['null'], + ['undefined'], + + ['()&%())'] + ])('throws no error for the value %s', ([ value ]) => { + expect(() => assertString(value)).not.throw(Error); + }); + + test.for([ + [0], + [1], + [42], + [-1], + [-42], + + [''], + [' '], + [' '], + [' '] + ])('throws an error for the value %s', ([ value ]) => { + expect(() => assertString(value)).throws(Error); + }); }); }); \ No newline at end of file