You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

100 lines
3.1 KiB

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()
})
})