From 7ee9c45339a128ad134c8ee7ab45df05797778ba Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Tue, 28 Jul 2026 14:38:06 +0200 Subject: [PATCH 1/4] test(style): add describe to cssDimensions test --- src/utils/__tests__/cssDimensions.test.js | 180 +++++++++++----------- 1 file changed, 91 insertions(+), 89 deletions(-) diff --git a/src/utils/__tests__/cssDimensions.test.js b/src/utils/__tests__/cssDimensions.test.js index 1543987..6f5cc59 100644 --- a/src/utils/__tests__/cssDimensions.test.js +++ b/src/utils/__tests__/cssDimensions.test.js @@ -14,109 +14,111 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { expect, test } from 'vitest'; +import { describe, expect, test } from 'vitest'; import { ensureUnit } from '../cssDimensions'; -test.for([ - { dimension: null, expected: '0px' }, - { dimension: undefined, expected: '0px' }, +describe('cssDimensions', () => { + test.for([ + { dimension: null, expected: '0px' }, + { dimension: undefined, expected: '0px' }, - { dimension: 0, expected: '0px' }, - { dimension: -0, expected: '0px' }, - { dimension: -1, expected: '-1px' }, - { dimension: -42, expected: '-42px' }, - { dimension: 1, expected: '1px' }, - { dimension: 42, expected: '42px' }, + { dimension: 0, expected: '0px' }, + { dimension: -0, expected: '0px' }, + { dimension: -1, expected: '-1px' }, + { dimension: -42, expected: '-42px' }, + { dimension: 1, expected: '1px' }, + { dimension: 42, expected: '42px' }, - { dimension: 0.0, expected: '0px' }, - { dimension: -0.0, expected: '0px' }, - { dimension: -1.0, expected: '-1px' }, - { dimension: -42.0, expected: '-42px' }, - { dimension: 1.0, expected: '1px' }, - { dimension: 42.0, expected: '42px' }, + { dimension: 0.0, expected: '0px' }, + { dimension: -0.0, expected: '0px' }, + { dimension: -1.0, expected: '-1px' }, + { dimension: -42.0, expected: '-42px' }, + { dimension: 1.0, expected: '1px' }, + { dimension: 42.0, expected: '42px' }, - { dimension: 0.42, expected: '0.42px' }, - { dimension: -0.42, expected: '-0.42px' }, - { dimension: -1.42, expected: '-1.42px' }, - { dimension: -42.42, expected: '-42.42px' }, - { dimension: 1.42, expected: '1.42px' }, - { dimension: 42.42, expected: '42.42px' }, + { dimension: 0.42, expected: '0.42px' }, + { dimension: -0.42, expected: '-0.42px' }, + { dimension: -1.42, expected: '-1.42px' }, + { dimension: -42.42, expected: '-42.42px' }, + { dimension: 1.42, expected: '1.42px' }, + { dimension: 42.42, expected: '42.42px' }, - { dimension: '0', expected: '0px' }, - { dimension: '-0', expected: '-0px' }, - { dimension: '-1', expected: '-1px' }, - { dimension: '-42', expected: '-42px' }, - { dimension: '1', expected: '1px' }, - { dimension: '42', expected: '42px' }, + { dimension: '0', expected: '0px' }, + { dimension: '-0', expected: '-0px' }, + { dimension: '-1', expected: '-1px' }, + { dimension: '-42', expected: '-42px' }, + { dimension: '1', expected: '1px' }, + { dimension: '42', expected: '42px' }, - { dimension: '0.0', expected: '0.0px' }, - { dimension: '-0.0', expected: '-0.0px' }, - { dimension: '-1.0', expected: '-1.0px' }, - { dimension: '-42.0', expected: '-42.0px' }, - { dimension: '1.0', expected: '1.0px' }, - { dimension: '42.0', expected: '42.0px' }, + { dimension: '0.0', expected: '0.0px' }, + { dimension: '-0.0', expected: '-0.0px' }, + { dimension: '-1.0', expected: '-1.0px' }, + { dimension: '-42.0', expected: '-42.0px' }, + { dimension: '1.0', expected: '1.0px' }, + { dimension: '42.0', expected: '42.0px' }, - { dimension: '0.42', expected: '0.42px' }, - { dimension: '-0.42', expected: '-0.42px' }, - { dimension: '-1.42', expected: '-1.42px' }, - { dimension: '-42.42', expected: '-42.42px' }, - { dimension: '1.42', expected: '1.42px' }, - { dimension: '42.42', expected: '42.42px' }, + { dimension: '0.42', expected: '0.42px' }, + { dimension: '-0.42', expected: '-0.42px' }, + { dimension: '-1.42', expected: '-1.42px' }, + { dimension: '-42.42', expected: '-42.42px' }, + { dimension: '1.42', expected: '1.42px' }, + { dimension: '42.42', expected: '42.42px' }, - { dimension: '0px', expected: '0px' }, - { dimension: '-0px', expected: '-0px' }, - { dimension: '-1px', expected: '-1px' }, - { dimension: '-42px', expected: '-42px' }, - { dimension: '1px', expected: '1px' }, - { dimension: '42px', expected: '42px' }, + { dimension: '0px', expected: '0px' }, + { dimension: '-0px', expected: '-0px' }, + { dimension: '-1px', expected: '-1px' }, + { dimension: '-42px', expected: '-42px' }, + { dimension: '1px', expected: '1px' }, + { dimension: '42px', expected: '42px' }, - { dimension: '0.0px', expected: '0.0px' }, - { dimension: '-0.0px', expected: '-0.0px' }, - { dimension: '-1.0px', expected: '-1.0px' }, - { dimension: '-42.0px', expected: '-42.0px' }, - { dimension: '1.0px', expected: '1.0px' }, - { dimension: '42.0px', expected: '42.0px' }, + { dimension: '0.0px', expected: '0.0px' }, + { dimension: '-0.0px', expected: '-0.0px' }, + { dimension: '-1.0px', expected: '-1.0px' }, + { dimension: '-42.0px', expected: '-42.0px' }, + { dimension: '1.0px', expected: '1.0px' }, + { dimension: '42.0px', expected: '42.0px' }, - { dimension: '0.42px', expected: '0.42px' }, - { dimension: '-0.42px', expected: '-0.42px' }, - { dimension: '-1.42px', expected: '-1.42px' }, - { dimension: '-42.42px', expected: '-42.42px' }, - { dimension: '1.42px', expected: '1.42px' }, - { dimension: '42.42px', expected: '42.42px' }, + { dimension: '0.42px', expected: '0.42px' }, + { dimension: '-0.42px', expected: '-0.42px' }, + { dimension: '-1.42px', expected: '-1.42px' }, + { dimension: '-42.42px', expected: '-42.42px' }, + { dimension: '1.42px', expected: '1.42px' }, + { dimension: '42.42px', expected: '42.42px' }, - { dimension: '0em', expected: '0em' }, - { dimension: '-0em', expected: '-0em' }, - { dimension: '-1em', expected: '-1em' }, - { dimension: '-42em', expected: '-42em' }, - { dimension: '1em', expected: '1em' }, - { dimension: '42em', expected: '42em' }, + { dimension: '0em', expected: '0em' }, + { dimension: '-0em', expected: '-0em' }, + { dimension: '-1em', expected: '-1em' }, + { dimension: '-42em', expected: '-42em' }, + { dimension: '1em', expected: '1em' }, + { dimension: '42em', expected: '42em' }, - { dimension: '0.0em', expected: '0.0em' }, - { dimension: '-0.0em', expected: '-0.0em' }, - { dimension: '-1.0em', expected: '-1.0em' }, - { dimension: '-42.0em', expected: '-42.0em' }, - { dimension: '1.0em', expected: '1.0em' }, - { dimension: '42.0em', expected: '42.0em' }, + { dimension: '0.0em', expected: '0.0em' }, + { dimension: '-0.0em', expected: '-0.0em' }, + { dimension: '-1.0em', expected: '-1.0em' }, + { dimension: '-42.0em', expected: '-42.0em' }, + { dimension: '1.0em', expected: '1.0em' }, + { dimension: '42.0em', expected: '42.0em' }, - { dimension: '0.42em', expected: '0.42em' }, - { dimension: '-0.42em', expected: '-0.42em' }, - { dimension: '-1.42em', expected: '-1.42em' }, - { dimension: '-42.42em', expected: '-42.42em' }, - { dimension: '1.42em', expected: '1.42em' }, - { dimension: '42.42em', expected: '42.42em' }, + { dimension: '0.42em', expected: '0.42em' }, + { dimension: '-0.42em', expected: '-0.42em' }, + { dimension: '-1.42em', expected: '-1.42em' }, + { dimension: '-42.42em', expected: '-42.42em' }, + { dimension: '1.42em', expected: '1.42em' }, + { dimension: '42.42em', expected: '42.42em' }, - { dimension: 'calc(42px - 1em)', expected: 'calc(42px - 1em)' }, - { dimension: 'calc(42px)', expected: 'calc(42px)' }, - { dimension: 'calc(42vh)', expected: 'calc(42vh)' }, - { dimension: 'min(42px, 1em)', expected: 'min(42px, 1em)' }, - { dimension: 'max(42px, 5rem)', expected: 'max(42px, 5rem)' }, - { dimension: 'clamp(42vh, 23vw, 13cap)', expected: 'clamp(42vh, 23vw, 13cap)' }, + { dimension: 'calc(42px - 1em)', expected: 'calc(42px - 1em)' }, + { dimension: 'calc(42px)', expected: 'calc(42px)' }, + { dimension: 'calc(42vh)', expected: 'calc(42vh)' }, + { dimension: 'min(42px, 1em)', expected: 'min(42px, 1em)' }, + { dimension: 'max(42px, 5rem)', expected: 'max(42px, 5rem)' }, + { dimension: 'clamp(42vh, 23vw, 13cap)', expected: 'clamp(42vh, 23vw, 13cap)' }, - { dimension: 'calc(42px-1em)', expected: 'calc(42px-1em)' }, - { dimension: 'min(42px,1em)', expected: 'min(42px,1em)' }, - { dimension: 'max(42px,5rem)', expected: 'max(42px,5rem)' }, - { dimension: 'clamp(42vh,23vw,13cap)', expected: 'clamp(42vh,23vw,13cap)' }, - { dimension: 'clamp( 42vh,23vw,13cap )', expected: 'clamp( 42vh,23vw,13cap )' } -])('ensureUnit returns $expected with input $dimension', ({ dimension, expected }) => { - expect(ensureUnit(dimension)).toBe(expected); + { dimension: 'calc(42px-1em)', expected: 'calc(42px-1em)' }, + { dimension: 'min(42px,1em)', expected: 'min(42px,1em)' }, + { dimension: 'max(42px,5rem)', expected: 'max(42px,5rem)' }, + { dimension: 'clamp(42vh,23vw,13cap)', expected: 'clamp(42vh,23vw,13cap)' }, + { dimension: 'clamp( 42vh,23vw,13cap )', expected: 'clamp( 42vh,23vw,13cap )' } + ])('ensureUnit returns $expected with input $dimension', ({ dimension, expected }) => { + expect(ensureUnit(dimension)).toBe(expected); + }); }); \ No newline at end of file From cd3a28893513427a4b73087bcad4c355d0979c8a Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Tue, 28 Jul 2026 14:40:29 +0200 Subject: [PATCH 2/4] test(i18n): add describe to currentLanguage test --- src/utils/__tests__/currentLanguage.test.js | 70 ++++++++++----------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/utils/__tests__/currentLanguage.test.js b/src/utils/__tests__/currentLanguage.test.js index de5d110..079dee8 100644 --- a/src/utils/__tests__/currentLanguage.test.js +++ b/src/utils/__tests__/currentLanguage.test.js @@ -14,48 +14,48 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { expect, test } from 'vitest'; +import { describe, expect, test } from 'vitest'; import getCurrentLanguage from '../currentLanguage'; -const locales = [ - { navigatorLanguage: 'en', localStorageLanguage: null, expected: 'en'}, - { navigatorLanguage: 'de', localStorageLanguage: null, expected: 'de'}, - { navigatorLanguage: 'fr', localStorageLanguage: null, expected: 'fr'}, +describe('currentLanguage', () => { + test.for([ + { navigatorLanguage: 'en', localStorageLanguage: null, expected: 'en'}, + { navigatorLanguage: 'de', localStorageLanguage: null, expected: 'de'}, + { navigatorLanguage: 'fr', localStorageLanguage: null, expected: 'fr'}, - { navigatorLanguage: 'en-US', localStorageLanguage: null, expected: 'en'}, - { navigatorLanguage: 'en-AU', localStorageLanguage: null, expected: 'en'}, - { navigatorLanguage: 'de-DE', localStorageLanguage: null, expected: 'de'}, - { navigatorLanguage: 'fr-FR', localStorageLanguage: null, expected: 'fr'}, + { navigatorLanguage: 'en-US', localStorageLanguage: null, expected: 'en'}, + { navigatorLanguage: 'en-AU', localStorageLanguage: null, expected: 'en'}, + { navigatorLanguage: 'de-DE', localStorageLanguage: null, expected: 'de'}, + { navigatorLanguage: 'fr-FR', localStorageLanguage: null, expected: 'fr'}, - { navigatorLanguage: 'en-us', localStorageLanguage: null, expected: 'en'}, - { navigatorLanguage: 'en-au', localStorageLanguage: null, expected: 'en'}, - { navigatorLanguage: 'de-de', localStorageLanguage: null, expected: 'de'}, - { navigatorLanguage: 'fr-fr', localStorageLanguage: null, expected: 'fr'}, + { navigatorLanguage: 'en-us', localStorageLanguage: null, expected: 'en'}, + { navigatorLanguage: 'en-au', localStorageLanguage: null, expected: 'en'}, + { navigatorLanguage: 'de-de', localStorageLanguage: null, expected: 'de'}, + { navigatorLanguage: 'fr-fr', localStorageLanguage: null, expected: 'fr'}, - { navigatorLanguage: 'zh-Hans-CN', localStorageLanguage: null, expected: 'zh'}, - { navigatorLanguage: 'zh-Hant-TW', localStorageLanguage: null, expected: 'zh'}, - { navigatorLanguage: 'uz-Latn-UZ', localStorageLanguage: null, expected: 'uz'}, + { navigatorLanguage: 'zh-Hans-CN', localStorageLanguage: null, expected: 'zh'}, + { navigatorLanguage: 'zh-Hant-TW', localStorageLanguage: null, expected: 'zh'}, + { navigatorLanguage: 'uz-Latn-UZ', localStorageLanguage: null, expected: 'uz'}, - { navigatorLanguage: 'en-US-u-ca-gregory', localStorageLanguage: null, expected: 'en'}, - { navigatorLanguage: 'de-DE-u-co-phonebk', localStorageLanguage: null, expected: 'de'}, - { navigatorLanguage: 'zh-Hant-TW-u-co-phonebk', localStorageLanguage: null, expected: 'zh'}, + { navigatorLanguage: 'en-US-u-ca-gregory', localStorageLanguage: null, expected: 'en'}, + { navigatorLanguage: 'de-DE-u-co-phonebk', localStorageLanguage: null, expected: 'de'}, + { navigatorLanguage: 'zh-Hant-TW-u-co-phonebk', localStorageLanguage: null, expected: 'zh'}, - { navigatorLanguage: 'en', localStorageLanguage: 'de', expected: 'de'}, - { navigatorLanguage: 'de-DE', localStorageLanguage: 'en', expected: 'en'}, - { navigatorLanguage: 'de-de', localStorageLanguage: 'en', expected: 'en'}, - { navigatorLanguage: 'zh-Hans-CN', localStorageLanguage: 'fr', expected: 'fr'}, - { navigatorLanguage: 'en-US-u-ca-gregory', localStorageLanguage: 'zh', expected: 'zh'} -]; + { navigatorLanguage: 'en', localStorageLanguage: 'de', expected: 'de'}, + { navigatorLanguage: 'de-DE', localStorageLanguage: 'en', expected: 'en'}, + { navigatorLanguage: 'de-de', localStorageLanguage: 'en', expected: 'en'}, + { navigatorLanguage: 'zh-Hans-CN', localStorageLanguage: 'fr', expected: 'fr'}, + { navigatorLanguage: 'en-US-u-ca-gregory', localStorageLanguage: 'zh', expected: 'zh'} + ])('returns the language $expected (navigator: $navigatorLanguage; local storage: $localStorageLanguage)', ({ navigatorLanguage, localStorageLanguage, expected }) => { + Object.defineProperty(navigator, 'language', { + value: navigatorLanguage, + configurable: true + }); -test.for(locales)('returns the language $expected (navigator: $navigatorLanguage; local storage: $localStorageLanguage)', ({ navigatorLanguage, localStorageLanguage, expected }) => { - Object.defineProperty(navigator, 'language', { - value: navigatorLanguage, - configurable: true + if (localStorageLanguage) { + localStorage.setItem('locale', localStorageLanguage); + }; + + expect(getCurrentLanguage()).toBe(expected); }); - - if (localStorageLanguage) { - localStorage.setItem('locale', localStorageLanguage); - }; - - expect(getCurrentLanguage()).toBe(expected); }); \ No newline at end of file From c047060b7c1f677b8e872821abb50822bc76bc0f Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Tue, 28 Jul 2026 14:41:34 +0200 Subject: [PATCH 3/4] test(i18n): add describe to LanguageSwitchButton test --- .../i18n/components/__tests__/LanguageSwitchButton.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/i18n/components/__tests__/LanguageSwitchButton.test.js b/src/features/i18n/components/__tests__/LanguageSwitchButton.test.js index add624c..5073991 100644 --- a/src/features/i18n/components/__tests__/LanguageSwitchButton.test.js +++ b/src/features/i18n/components/__tests__/LanguageSwitchButton.test.js @@ -39,7 +39,7 @@ vi.mock('@/features/icons/components/Icon.vue', () => ({ } })); -describe('LanguageSwitchButton.vue', () => { +describe('LanguageSwitchButton', () => { beforeEach(() => { vi.clearAllMocks(); localStorage.clear(); From 68a827a11321886da3b84f6ebfeab0e2a16a208f Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Tue, 28 Jul 2026 14:42:35 +0200 Subject: [PATCH 4/4] 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