mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-24 23:48:13 -05:00
refs https://linear.app/tryghost/issue/CORE-35/refactor-route-and-redirect-settings - Ensure settings had only one method but would benefit from class+DI pattern before extracting it into an outside module. - The logic is now also less coupled with "routes" and single source/destination paths. It's all configureable instead and might be reused if similar pattern is needed for example with redirect settings defaults.
84 lines
3.4 KiB
JavaScript
84 lines
3.4 KiB
JavaScript
const sinon = require('sinon');
|
|
const should = require('should');
|
|
const fs = require('fs-extra');
|
|
const path = require('path');
|
|
const DefaultSettingsManager = require('../../../../core/server/services/route-settings/default-settings-manager');
|
|
|
|
describe('UNIT > Settings Service DefaultSettingsManager:', function () {
|
|
beforeEach(function () {
|
|
sinon.stub(fs, 'readFile');
|
|
sinon.stub(fs, 'copy');
|
|
});
|
|
|
|
afterEach(function () {
|
|
sinon.restore();
|
|
});
|
|
|
|
describe('Ensure settings files', function () {
|
|
it('returns yaml file from settings folder if it exists', async function () {
|
|
fs.readFile.withArgs(path.join(__dirname, '../../../utils/fixtures/settings/routes.yaml'), 'utf8').resolves('content');
|
|
|
|
const defaultSettingsManager = new DefaultSettingsManager({
|
|
type: 'routes',
|
|
extension: '.yaml',
|
|
destinationFolderPath: path.join(__dirname, '../../../utils/fixtures/settings/'),
|
|
sourceFolderPath: ''
|
|
});
|
|
|
|
await defaultSettingsManager.ensureSettingsFileExists();
|
|
|
|
// Assert did not attempt to copy the default config
|
|
fs.copy.called.should.be.false();
|
|
});
|
|
|
|
it('copies default settings file if no file found', async function () {
|
|
const destinationFolderPath = path.join(__dirname, '../../../utils/fixtures/settings/');
|
|
const sourceFolderPath = path.join(__dirname, '../../../../core/server/services/route-settings/');
|
|
|
|
const defaultSettingsManager = new DefaultSettingsManager({
|
|
type: 'routes',
|
|
extension: '.yaml',
|
|
destinationFolderPath: destinationFolderPath,
|
|
sourceFolderPath: sourceFolderPath
|
|
});
|
|
|
|
const fsError = new Error('not found');
|
|
fsError.code = 'ENOENT';
|
|
|
|
const settingsDestinationPath = path.join(destinationFolderPath, 'routes.yaml');
|
|
fs.readFile.withArgs(settingsDestinationPath, 'utf8').rejects(fsError);
|
|
fs.copy.withArgs(path.join(sourceFolderPath, 'default-routes.yaml'), settingsDestinationPath).resolves();
|
|
|
|
await defaultSettingsManager.ensureSettingsFileExists();
|
|
|
|
// Assert attempt to copy the default config
|
|
fs.copy.calledOnce.should.be.true();
|
|
});
|
|
|
|
it('rejects, if error is not a not found error', async function () {
|
|
const destinationFolderPath = path.join(__dirname, '../../../utils/fixtures/settings/');
|
|
|
|
const defaultSettingsManager = new DefaultSettingsManager({
|
|
type: 'routes',
|
|
extension: '.yaml',
|
|
destinationFolderPath: destinationFolderPath,
|
|
sourceFolderPath: ''
|
|
});
|
|
|
|
const fsError = new Error('no permission');
|
|
fsError.code = 'EPERM';
|
|
|
|
fs.readFile.withArgs(path.join(destinationFolderPath, 'routes.yaml'), 'utf8').rejects(fsError);
|
|
|
|
try {
|
|
await defaultSettingsManager.ensureSettingsFileExists('routes.yaml');
|
|
throw new Error('Expected test to fail');
|
|
} catch (error) {
|
|
should.exist(error);
|
|
error.message.should.be.eql(`Error trying to access settings files in ${destinationFolderPath}.`);
|
|
fs.readFile.calledOnce.should.be.true();
|
|
fs.copy.called.should.be.false();
|
|
}
|
|
});
|
|
});
|
|
});
|