From 42cd78e05ed1792579610ff408e6098c9388af3b Mon Sep 17 00:00:00 2001 From: Naz Date: Wed, 1 Dec 2021 16:25:50 +0400 Subject: [PATCH] Added coverage for route settings class refs https://github.com/TryGhost/Ghost/commit/3150c87935c0702b76f90e4385ce6d1a65fd8b21 - Adds basic coverage for a bug that was fixed in referenced commit. Next time it should be easier to add more tests to the suite as there's already an example starter to work your way from. --- .../services/settings/route-settings.test.js | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 test/unit/server/services/settings/route-settings.test.js diff --git a/test/unit/server/services/settings/route-settings.test.js b/test/unit/server/services/settings/route-settings.test.js new file mode 100644 index 0000000000..00c3274323 --- /dev/null +++ b/test/unit/server/services/settings/route-settings.test.js @@ -0,0 +1,47 @@ +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/); + } + }); + }); +});