Ghost/test/unit/server/services/route-settings/route-settings.test.js

48 lines
2.0 KiB
JavaScript
Raw Normal View History

const sinon = require('sinon');
const should = require('should');
const fs = require('fs-extra');
const path = require('path');
const bridge = require('../../../../../core/bridge');
const RouteSettings = require('../../../../../core/server/services/route-settings/route-settings');
describe('UNIT > Settings Service DefaultSettingsManager:', function () {
beforeEach(function () {
sinon.stub(fs, 'readFile');
sinon.stub(fs, 'readFileSync');
sinon.stub(fs, 'copy');
sinon.stub(bridge, 'reloadFrontend');
});
afterEach(function () {
sinon.restore();
});
describe('setFromFilePath', function () {
it('catches parsing error when setFromFilePath', async function () {
const routesSettingsPath = path.join(__dirname, '../../../../utils/fixtures/settings/routes.yaml');
const backupFilePath = path.join(__dirname, '../../../../utils/fixtures/settings/routes-backup.yaml');
const incomingSettingsPath = path.join(__dirname, '../../../../utils/fixtures/settings/routes-incoming.yaml');
fs.readFile.withArgs(routesSettingsPath, 'utf8').resolves('content');
fs.copy.withArgs(backupFilePath, routesSettingsPath).resolves();
fs.copy.withArgs(incomingSettingsPath, routesSettingsPath).resolves();
// simulate a parsing error during frontend reload
bridge.reloadFrontend.throws(new Error('YAMLException: bad indentation of a mapping entry'));
const defaultSettingsManager = new RouteSettings({
settingsLoader: {},
settingsPath: routesSettingsPath,
backupPath: backupFilePath
});
try {
await defaultSettingsManager.setFromFilePath(incomingSettingsPath);
should.fail('should.fail');
} catch (error) {
error.message.should.match(/YAMLException: bad indentation of a mapping entry/);
}
});
});
});