diff --git a/packages/lib/models/Setting.test.ts b/packages/lib/models/Setting.test.ts index 5e4f3c953db..18fa5f0fe1b 100644 --- a/packages/lib/models/Setting.test.ts +++ b/packages/lib/models/Setting.test.ts @@ -65,15 +65,20 @@ describe('models/Setting', () => { await expectThrow(async () => Setting.value('itsgone'), 'unknown_key'); })); - it('should allow registering new settings dynamically', (async () => { + it.each([ + SettingStorage.Database, SettingStorage.File, + ])('should allow registering new settings dynamically (storage: %d)', (async (storage) => { await expectThrow(async () => Setting.setValue('myCustom', '123'), 'unknown_key'); await Setting.registerSetting('myCustom', { public: true, value: 'default', type: Setting.TYPE_STRING, + storage, }); + expect(Setting.value('myCustom')).toBe('default'); + await expectNotThrow(async () => Setting.setValue('myCustom', '123')); expect(Setting.value('myCustom')).toBe('123'); @@ -328,7 +333,7 @@ describe('models/Setting', () => { expect((await Setting.loadOne('locale')).value).toBe('fr_FR'); expect((await Setting.loadOne('theme')).value).toBe(Setting.THEME_DARK); - expect((await Setting.loadOne('sync.target')).value).toBe(undefined); + expect((await Setting.loadOne('sync.target'))).toBe(null); }); it('should save sub-profile settings', async () => { diff --git a/packages/lib/models/Setting.ts b/packages/lib/models/Setting.ts index 1af9be5fa60..f0cc73170a2 100644 --- a/packages/lib/models/Setting.ts +++ b/packages/lib/models/Setting.ts @@ -2103,6 +2103,7 @@ class Setting extends BaseModel { } // Low-level method to load a setting directly from the database. Should not be used in most cases. + // Does not apply setting default values. public static async loadOne(key: string): Promise { if (this.keyStorage(key) === SettingStorage.File) { let fileSettings = await this.fileHandler.load(); @@ -2113,10 +2114,14 @@ class Setting extends BaseModel { fileSettings = mergeGlobalAndLocalSettings(rootFileSettings, fileSettings); } - return { - key, - value: fileSettings[key], - }; + if (key in fileSettings) { + return { + key, + value: fileSettings[key], + }; + } else { + return null; + } } // Always check in the database first, including for secure settings,