mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-22 10:21:36 +03:00
0ab2f36c22
refs: https://github.com/Ghost/Ghost/commit/b5ee17b25 - When moving the site tests into e2e-api they broke because they were getting the changed settings value from the settings test - The solution is to ensure the settingsCache is reset between tests, which is what this commit does - This commit also renames the shutdown method to reset, because this is not a permanent operation - It also renames the resetDb method to resetData, because the concept is we want the internal data to be reset, not just the DB
78 lines
2.4 KiB
JavaScript
78 lines
2.4 KiB
JavaScript
/**
|
|
* Settings Lib
|
|
* A collection of utilities for handling settings including a cache
|
|
*/
|
|
const events = require('../../lib/common/events');
|
|
const models = require('../../models');
|
|
const labs = require('../../../shared/labs');
|
|
const SettingsCache = require('../../../shared/settings-cache');
|
|
const SettingsBREADService = require('./settings-bread-service');
|
|
const {obfuscatedSetting, isSecretSetting, hideValueIfSecret} = require('./settings-utils');
|
|
|
|
/**
|
|
* @returns {SettingsBREADService} instance of the PostsService
|
|
*/
|
|
const getSettingsBREADServiceInstance = () => {
|
|
return new SettingsBREADService({
|
|
SettingsModel: models.Settings,
|
|
settingsCache: SettingsCache,
|
|
labsService: labs
|
|
});
|
|
};
|
|
|
|
module.exports = {
|
|
/**
|
|
* Initialize the cache, used in boot and in testing
|
|
*/
|
|
async init() {
|
|
const settingsCollection = await models.Settings.populateDefaults();
|
|
SettingsCache.init(events, settingsCollection);
|
|
},
|
|
|
|
/**
|
|
* Restore the cache, used during e2e testing only
|
|
*/
|
|
reset() {
|
|
SettingsCache.reset(events);
|
|
},
|
|
|
|
/**
|
|
* Handles synchronization of routes.yaml hash loaded in the frontend with
|
|
* the value stored in the settings table.
|
|
* getRoutesHash is a function to allow keeping "frontend" decoupled from settings
|
|
*
|
|
* @param {function} getRoutesHash function fetching currently loaded routes file hash
|
|
*/
|
|
async syncRoutesHash(getRoutesHash) {
|
|
const currentRoutesHash = await getRoutesHash();
|
|
|
|
if (SettingsCache.get('routes_hash') !== currentRoutesHash) {
|
|
return await models.Settings.edit([{
|
|
key: 'routes_hash',
|
|
value: currentRoutesHash
|
|
}], {context: {internal: true}});
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Handles email setting synchronization when email has been verified per instance
|
|
*
|
|
* @param {boolean} configValue current email verification value from local config
|
|
*/
|
|
async syncEmailSettings(configValue) {
|
|
const isEmailDisabled = SettingsCache.get('email_verification_required');
|
|
|
|
if (configValue === true && isEmailDisabled) {
|
|
return await models.Settings.edit([{
|
|
key: 'email_verification_required',
|
|
value: false
|
|
}], {context: {internal: true}});
|
|
}
|
|
},
|
|
|
|
obfuscatedSetting,
|
|
isSecretSetting,
|
|
hideValueIfSecret,
|
|
getSettingsBREADServiceInstance
|
|
};
|