var test = require('tap').test var CC = require('../index.js').ConfigChain var env = { foo_blaz : 'blzaa', foo_env : 'myenv' } var jsonObj = { blaz: 'json', json: true } var iniObj = { 'x.y.z': 'xyz', blaz: 'ini' } var fs = require('fs') var ini = require('ini') fs.writeFileSync('/tmp/config-chain-class.json', JSON.stringify(jsonObj)) fs.writeFileSync('/tmp/config-chain-class.ini', ini.stringify(iniObj)) var http = require('http') var reqs = 0 http.createServer(function (q, s) { if (++reqs === 2) this.close() if (q.url === '/json') { // make sure that the requests come back from the server // out of order. they should still be ordered properly // in the resulting config object set. setTimeout(function () { s.setHeader('content-type', 'application/json') s.end(JSON.stringify({ blaz: 'http', http: true, json: true })) }, 200) } else { s.setHeader('content-type', 'application/ini') s.end(ini.stringify({ blaz: 'http', http: true, ini: true, json: false })) } }).listen(1337) test('basic class test', function (t) { var cc = new CC() var expectlist = [ { blaz: 'json', json: true }, { 'x.y.z': 'xyz', blaz: 'ini' }, { blaz: 'blzaa', env: 'myenv' }, { blaz: 'http', http: true, json: true }, { blaz: 'http', http: true, ini: true, json: false } ] cc.addFile('/tmp/config-chain-class.json') .addFile('/tmp/config-chain-class.ini') .addEnv('foo_', env) .addUrl('http://localhost:1337/json') .addUrl('http://localhost:1337/ini') .on('load', function () { t.same(cc.list, expectlist) t.same(cc.snapshot, { blaz: 'json', json: true, 'x.y.z': 'xyz', env: 'myenv', http: true, ini: true }) cc.del('blaz', '/tmp/config-chain-class.json') t.same(cc.snapshot, { blaz: 'ini', json: true, 'x.y.z': 'xyz', env: 'myenv', http: true, ini: true }) cc.del('blaz') t.same(cc.snapshot, { json: true, 'x.y.z': 'xyz', env: 'myenv', http: true, ini: true }) cc.shift() t.same(cc.snapshot, { 'x.y.z': 'xyz', env: 'myenv', http: true, json: true, ini: true }) cc.shift() t.same(cc.snapshot, { env: 'myenv', http: true, json: true, ini: true }) cc.shift() t.same(cc.snapshot, { http: true, json: true, ini: true }) cc.shift() t.same(cc.snapshot, { http: true, ini: true, json: false }) cc.shift() t.same(cc.snapshot, {}) t.end() }) })