vigour-config
Version:
Observable configuration
185 lines (171 loc) • 5.54 kB
JavaScript
// var log = gaston.log.make('config')
// log.enabled = true
var Config = require('../../lib/')
var service_package_json = require('./service_package.json')
var project_package_json = require('./project_package.json')
var isEmpty = require('vigour-util/is/empty')
var config
describe('Config', function () {
describe('Primitives', function () {
it('should handle booleans', function () {
var value = true
var someConfig = new Config({
someField: value
})
expect(someConfig.someField.val).to.equal(value)
})
it('should handle numbers', function () {
var value = 42
var someConfig = new Config({
someField: value
})
expect(someConfig.someField.val).to.equal(value)
})
it('should handle strings', function () {
var value = 'boom'
var someConfig = new Config({
someField: value
})
expect(someConfig.someField.val).to.equal(value)
})
it('should handle arrays', function () {
var innerValue = 'array'
var value = ['an', innerValue, 'of', 'strings', '!']
var someConfig = new Config({
someField: value
})
expect(someConfig.someField[1].val).to.equal(innerValue)
})
it('should handle objects', function () {
var innerValue = 'times'
var value = { good: innerValue }
var someConfig = new Config({
someField: value
})
expect(someConfig.someField.good.val).to.equal(innerValue)
})
it('should handle functions', function () {
var innerValue = 'boom'
var value = function () {
return innerValue
}
var someConfig = new Config({
someField: value
})
expect(someConfig.someField.val).to.equal(innerValue)
})
})
describe('Merge', function () {
it('should not crash', function () {
config = new Config(service_package_json)
.merge(project_package_json)
})
it('should still have settings of base package', function () {
expect(config.name.val).to.equal('super-service')
expect(config.category.val).to.equal('services')
expect(config.userdecay.val).to.equal(5)
expect(config.special.val).to.equal(false)
})
it('should have settings of merged package', function () {
expect(config.somesetting.val).to.equal(true)
})
it(
'should have applied settings from newpackage[category][name] to root' +
' of base package',
function () {
expect(config._input).to.equal('{service}.{app}.{domain}')
expect(config).to.have.property('#develop')
expect(config).to.have.property('#master')
expect(config).to.have.property('#demo')
}
)
it('should have skipped merging newpackage[category]', function () {
expect(config).to.not.have.property('services')
})
})
describe('Resolve', function () {
describe('Resolve Branch', function () {
it('should not crash', function () {
config.key = 'CONFIG'
config.resolve('#develop')
})
it('should have applied root level settings from #develop', function () {
expect(config._input).to.equal('{branch}-{service}.{app}.{domain}')
expect(config.special.val).to.equal(true)
expect(config.somesetting.val).to.equal(false)
})
it('should have applied nested settings from #develop', function () {
expect(config.somesetting.nested.val).to.equal(false)
})
})
})
describe('Resolve Region', function () {
it('should not crash', function () {
config = new Config(service_package_json)
.merge(project_package_json)
.resolve('#master')
})
it('should have regions because #master resolved', function () {
expect(config).to.have.property('regions')
})
it('should resolve region settings', function () {
config.resolve('regions').resolve('AT', {
skipVal: true
})
expect(config).to.have.property('specialAT')
.which.has.property('val', true)
})
it('should not have resolved AT region val', function () {
expect(config._input).to.equal('{region}-{service}.{app}.{domain}')
})
})
describe('Template language', function () {
it('should parse template values from config into values with {field}',
function () {
config.set({
region: 'AT'
})
expect(config.val).to.equal('AT-super-service.best-app.vigour.io')
}
)
})
// describe('Copy Config', function(){
// it('should be able to make a copy of a Config', function(){
//
// var burk = new Observable({
// val: 'heyja',
// smurk: 'lala'
// })
//
// log.info('burk test', burk._input)
//
// var setobj = config.serialize({
// exclude: function excludeKey(key) {
// return key[0] === ''
// }
// })
// var copy = new Config(setobj)
//
// })
// })
//
// if (!ISNODE){
// describe('crack', function (){
// it.skip('put c in window', function (){
// window.c = config
// })
// })
// }
describe('Empties', function () {
it('should not crash', function () {
config = new Config(service_package_json)
})
it('should declare empty an empty object', function () {
expect(isEmpty(config.one)).to.equal(true)
})
it('should declare empty an object with only a description', function () {
expect(isEmpty(config.two)).to.equal(true)
})
})
})