diff --git a/test/unit/server/services/settings/settings-bread-service.test.js b/test/unit/server/services/settings/settings-bread-service.test.js new file mode 100644 index 0000000000..eda10e9478 --- /dev/null +++ b/test/unit/server/services/settings/settings-bread-service.test.js @@ -0,0 +1,112 @@ +const sinon = require('sinon'); +const assert = require('assert'); + +const SettingsBreadService = require('../../../../../core/server/services/settings/settings-bread-service'); + +describe('UNIT > Settings BREAD Service:', function () { + afterEach(function () { + sinon.restore(); + }); + + describe('read', function () { + it('returns the setting ', async function () { + const defaultSettingsManager = new SettingsBreadService({ + SettingsModel: {}, + settingsCache: { + get: sinon + .stub() + .withArgs('version_notifications', {resolve: false}) + .returns({ + key: 'portal_button_signup_text', + value: 'Subscribe', + group: 'portal' + }) + }, + labsService: {} + }); + + const setting = await defaultSettingsManager.read('version_notifications'); + + assert.deepEqual(setting, { + version_notifications: { + key: 'portal_button_signup_text', + value: 'Subscribe', + group: 'portal' + } + }); + }); + + it('can read core group with internal context', async function () { + const defaultSettingsManager = new SettingsBreadService({ + SettingsModel: {}, + settingsCache: { + get: sinon + .stub() + .withArgs('version_notifications', {resolve: false}) + .returns({ + key: 'version_notifications', + value: '[\'4.0\']', + group: 'core' + }) + }, + labsService: {} + }); + + const setting = await defaultSettingsManager.read('version_notifications', {internal: true}); + + assert.deepEqual(setting, { + version_notifications: { + group: 'core', + key: 'version_notifications', + value: '[\'4.0\']' + } + }); + }); + + it('throws and error when reading a core group without internal context', async function () { + const defaultSettingsManager = new SettingsBreadService({ + SettingsModel: {}, + settingsCache: { + get: sinon + .stub() + .withArgs('version_notifications', {resolve: false}) + .returns({ + key: 'version_notifications', + value: '[\'4.0\']', + group: 'core' + }) + }, + labsService: {} + }); + + try { + await defaultSettingsManager.read('version_notifications'); + throw ('above line should have thrown'); + } catch (error) { + assert.equal(error.errorType, 'NoPermissionError'); + assert.equal(error.message, 'Attempted to access core setting from external request'); + } + }); + + it('throws an error when reading unknown setting', async function () { + const defaultSettingsManager = new SettingsBreadService({ + SettingsModel: {}, + settingsCache: { + get: sinon + .stub() + .withArgs('unknown_setting', {resolve: false}) + .returns(null) + }, + labsService: {} + }); + + try { + await defaultSettingsManager.read('unknown_setting'); + throw ('above line should have thrown'); + } catch (error) { + assert.equal(error.errorType, 'NotFoundError'); + assert.equal(error.message, 'Problem finding setting: unknown_setting'); + } + }); + }); +});