diff --git a/package.json b/package.json index 986110d..ab2a0d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "refs", - "version": "0.9.1", + "version": "0.9.2", "description": "Compile and merge YAML, JSON or INI config files together through file path references", "main": "index.js", "preferGlobal": true, diff --git a/test/data/file-merge.json b/test/data/file-merge.json new file mode 100644 index 0000000..5e0aa33 --- /dev/null +++ b/test/data/file-merge.json @@ -0,0 +1,9 @@ +{ + "test": { + "$merge": [{ + "$ref": "./file.json" + }, { + "$ref": "./file-refs.json" + }] + } +} diff --git a/test/test-lib-json-processor.js b/test/test-lib-json-processor.js index 5b53472..235ee70 100644 --- a/test/test-lib-json-processor.js +++ b/test/test-lib-json-processor.js @@ -101,6 +101,63 @@ describe('JSON Tests', () => { }); }); + it('process: should throw error the file with malformed merge settings', (done) => { + fs.writeFileSync(JSON_MERGE_FILE, '{"$merge":[{"one":true},{"two":true}]}', 'utf-8'); + const jsonProcessor = require('../lib/processor-json'); + + jsonProcessor.process(JSON_MERGE_FILE) + .then(() => { + done('Rejection failed.'); + }) + .catch((err) => { + should(err).be.eql('Malformed merge setting, please check the input file.'); + done(); + }); + }); + + it('process: should throw error the file with malformed merge settings with ref settings', (done) => { + fs.writeFileSync(JSON_MERGE_FILE, '{"$merge":[{"one":true},{"two":true}]}', 'utf-8'); + const jsonContent = fs.readFileSync(JSON_FILE.replace('/tmp', `${__dirname}/data`), 'utf-8'); + const jsonRefContent = fs.readFileSync(JSON_REF_FILE.replace('/tmp', `${__dirname}/data`), 'utf-8'); + const jsonMergeContent = fs.readFileSync(JSON_MERGE_FILE.replace('/tmp', `${__dirname}/data`), 'utf-8'); + fs.writeFileSync(JSON_FILE, jsonContent, 'utf-8'); + fs.writeFileSync(JSON_REF_FILE, jsonRefContent, 'utf-8'); + const jsonMergeContentMalformed = JSON.stringify(Object.assign({}, JSON.parse(jsonMergeContent), JSON.parse('{"another":{"$merge":[{"one":true},{"two":true}]}}'))); + fs.writeFileSync(JSON_MERGE_FILE, jsonMergeContentMalformed, 'utf-8'); + const jsonProcessor = require('../lib/processor-json'); + + jsonProcessor.process(JSON_MERGE_FILE) + .then(() => { + done('Rejection failed.'); + }) + .catch((err) => { + should(err).be.eql('Malformed merge setting, please check the input file.'); + done(); + }); + }); + + it('process: should process the file with merge settings', (done) => { + const jsonContent = fs.readFileSync(JSON_FILE.replace('/tmp', `${__dirname}/data`), 'utf-8'); + const jsonRefContent = fs.readFileSync(JSON_REF_FILE.replace('/tmp', `${__dirname}/data`), 'utf-8'); + const jsonMergeContent = fs.readFileSync(JSON_MERGE_FILE.replace('/tmp', `${__dirname}/data`), 'utf-8'); + fs.writeFileSync(JSON_FILE, jsonContent, 'utf-8'); + fs.writeFileSync(JSON_REF_FILE, jsonRefContent, 'utf-8'); + fs.writeFileSync(JSON_MERGE_FILE, jsonMergeContent, 'utf-8'); + const jsonProcessor = require('../lib/processor-json'); + + jsonProcessor.process(JSON_MERGE_FILE) + .then((results) => { + should(results).be.eql({ + dataString: '{"test":{"test":true,"another":{"test":true}}}', + key: undefined, + }); + done(); + }) + .catch((err) => { + done(err); + }); + }); + it('write: should throw error on write', (done) => { td.replace(fs, 'writeFile', (outputFile, data, option, cb) => cb('An error occurred.')); const jsonProcessor = require('../lib/processor-json');