const sinon = require('sinon'), should = require('should'), fs = require('fs-extra'), yaml = require('js-yaml'), path = require('path'), yamlParser = require('../../../../core/frontend/services/settings/yaml-parser'); describe('UNIT > Settings Service yaml parser:', function () { let yamlSpy; beforeEach(function () { yamlSpy = sinon.spy(yaml, 'safeLoad'); }); afterEach(function () { sinon.restore(); }); describe('Yaml Parser', function () { it('parses correct yaml file', function () { const file = fs.readFileSync(path.join(__dirname, '../../../utils/fixtures/settings/', 'goodroutes.yaml'), 'utf8'); const result = yamlParser(file, 'goodroutes.yaml'); should.exist(result); result.should.be.an.Object().with.properties('routes', 'collections', 'taxonomies'); yamlSpy.calledOnce.should.be.true(); }); it('rejects with clear error when parsing fails', function () { const file = fs.readFileSync(path.join(__dirname, '../../../utils/fixtures/settings/', 'badroutes.yaml'), 'utf8'); try { const result = yamlParser(file, 'badroutes.yaml'); should.not.exist(result); } catch (error) { should.exist(error); error.message.should.eql('Could not parse badroutes.yaml: bad indentation of a mapping entry.'); error.context.should.containEql('bad indentation of a mapping entry at line 5, column 14'); error.help.should.eql('Check your badroutes.yaml file for typos and fix the named issues.'); yamlSpy.calledOnce.should.be.true(); } }); }); });