UNPKG

@spalger/kibana

Version:

Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic

134 lines (100 loc) 3.61 kB
var expect = require('expect.js'); describe('ObjDefine Utility', function () { var ObjDefine = require('ui/utils/ObjDefine'); function flatten(obj) { return JSON.parse(JSON.stringify(obj)); } describe('#writ', function () { it('creates writeable properties', function () { var def = new ObjDefine(); def.writ('name', 'foo'); var obj = def.create(); expect(obj).to.have.property('name', 'foo'); obj.name = 'bar'; expect(obj).to.have.property('name', 'bar'); }); it('exports the property to JSON', function () { var def = new ObjDefine(); def.writ('name', 'foo'); expect(flatten(def.create())).to.have.property('name', 'foo'); }); it('does not export property to JSON it it\'s undefined or null', function () { var def = new ObjDefine(); def.writ('name'); expect(flatten(def.create())).to.not.have.property('name'); def.writ('name', null); expect(flatten(def.create())).to.not.have.property('name'); }); it('switched to exporting if a value is written', function () { var def = new ObjDefine(); def.writ('name'); var obj = def.create(); expect(flatten(obj)).to.not.have.property('name'); obj.name = null; expect(flatten(obj)).to.not.have.property('name'); obj.name = 'foo'; expect(flatten(obj)).to.have.property('name', 'foo'); }); it('setting a writ value to null prevents it from exporting', function () { var def = new ObjDefine(); def.writ('name', 'foo'); var obj = def.create(); expect(flatten(obj)).to.have.property('name', 'foo'); obj.name = null; expect(flatten(obj)).to.not.have.property('name'); }); }); describe('#fact', function () { it('creates an immutable field', function () { var def = new ObjDefine(); var val = 'foo'; var notval = 'bar'; def.fact('name', val); var obj = def.create(); obj.name = notval; // UPDATE SHOULD BE IGNORED expect(obj).to.have.property('name', val); }); it('exports the fact to JSON', function () { var def = new ObjDefine(); def.fact('name', 'foo'); expect(flatten(def.create())).to.have.property('name', 'foo'); }); }); describe('#comp', function () { it('creates an immutable field', function () { var def = new ObjDefine(); var val = 'foo'; var notval = 'bar'; def.comp('name', val); var obj = def.create(); expect(function () { obj.name = notval; }).to.throwException(); }); it('does not export the computed value to JSON', function () { var def = new ObjDefine(); def.comp('name', 'foo'); expect(flatten(def.create())).to.not.have.property('name'); }); }); describe('#create', function () { it('creates object that inherits from the prototype', function () { function SomeClass() {} var def = new ObjDefine(null, SomeClass.prototype); var obj = def.create(); expect(obj).to.be.a(SomeClass); }); it('uses the defaults for property values', function () { var def = new ObjDefine({ name: 'bar' }); def.fact('name'); var obj = def.create(); expect(obj).to.have.property('name', 'bar'); }); it('ignores default values that are not defined propertyes', function () { var def = new ObjDefine({ name: 'foo', name2: 'bar' }); var obj = def.create(); expect(obj).to.not.have.property('name'); expect(obj).to.not.have.property('name2'); }); }); });