array-includes-polyfill
Version:
Exposing a richer set of Array features for JavaScript
110 lines (80 loc) • 4.89 kB
JavaScript
var array = require('../src/array-includes-polyfill-es6');
var chai = require('chai');
var expect = chai.expect;
describe('Array Find My Object', function () {
it('should find simple objects', function(){
var arr = new array();
var obj = {id:'username', data:'some data', type: 'input'};
var obj2 = {id:'message', data:'some data', type: 'textarea'};
var obj3 = {id:'username', data:'some data', type: 'textarea'};
arr.push(obj, obj2, obj3);
expect(arr.lookup({id:'username', type:'input'})).to.have.property('id', 'username');
expect(arr.lookup({id:'username', type:'input'})).to.assert('[1]', null);
expect(arr.lookup({id:'message', type:'textarea'})).to.have.property('id', 'message');
});
it('should find complex objects', function(){
var arr = new array();
var obj = {id:'username', data:{protected:true, title:{coder:true}}};
var obj2 = {id:'message', data:{public:true}};
arr.push(obj, obj2);
var ref = arr.lookup({id:'username', data:{protected:true}});
ref.data.protected=false;
expect(arr.lookup({id:'username', data:{protected:false}})).to.have.deep.property('data.protected', false);
});
});
describe('lets do some basic data manipulation tests', function(){
it('should return an array of two similar objects based on generic search', function(){
var arr = new array();
var obj1 = {id:'user', data:{name:'john doe', dob:'01/01/99'}};
var obj2 = {id:'user', data:{name:'jane doe', dob:'02/02/99'}};
arr.push(obj1, obj2);
expect(arr.lookup({id:'user'})).to.have.deep.property('[0].data.name', 'john doe');
expect(arr.lookup({id:'user'})).to.have.deep.property('[1].data.name', 'jane doe');
});
it('should allow me to manipulate the data and save it in the array', function(){
var arr = new array();
var obj1 = {id:'user', data:{name:'john doe', dob:'01/01/99'}};
var obj2 = {id:'user', data:{name:'jane doe', dob:'02/02/99'}};
arr.push(obj1, obj2);
var ref1 = arr.lookup({id:'user', data:{name:'john doe'}});
var ref2 = arr.lookup({id:'user', data:{name:'jane doe'}});
ref1.data.name="joe doe";
ref1.data.favoriteColor="blue";
ref2.data.name="jessica doe";
ref2.topLevel = true;
expect(arr.lookup({id:'user', data:{name:'joe doe'}})).to.have.deep.property('data.name', 'joe doe');
expect(arr.lookup({id:'user', data:{name:'joe doe'}})).to.have.deep.property('data.favoriteColor', 'blue');
expect(arr.lookup({id:'user', data:{name:'jessica doe'}})).to.have.deep.property('data.name', 'jessica doe');
expect(arr.lookup({id:'user', data:{name:'jessica doe'}})).to.have.property('topLevel', true);
});
it('should find a very specific complex object that I can manipulate', function(){
var arr = new array();
var obj1 = {id:'user', data:{name:'john doe', dob:'01/01/99', occupation:{title:'coder', projects:{url:'http://'}}}};
var obj2 = {id:'user', data:{name:'jane doe', dob:'01/01/99', occupation:{title:'designer', projects:{url:'http://'}}}};
arr.push(obj1, obj2);
expect(arr.lookup({id:'user', data:{name:'john doe', projects:{url:'http://'}}}))
.to.have.deep.property('data.occupation.projects.url', 'http://')
expect(arr.lookup({id:'user', data:{name:'jane doe', projects:{url:'http://'}}}))
.to.have.deep.property('data.occupation.projects.url', 'http://')
var ref = arr.lookup({id:'user', data:{name:'john doe', projects:{url:'http://'}}})
ref.data.occupation.projects.url="www";
expect(arr.lookup({id:'user', data:{name:'john doe', projects:{url:'www'}}}))
.to.have.deep.property('data.occupation.projects.url', 'www')
});
it('should allow me to manipulate it from the return of course', function(){
var arr = new array();
var obj1 = {id:'user', data:{name:'john doe', dob:'01/01/99', occupation:{title:'coder', projects:{url:'http://'}}}};
var obj2 = {id:'user', data:{name:'jane doe', dob:'01/01/99', occupation:{title:'designer', projects:{url:'http://'}}}};
arr.push(obj1, obj2);
arr.lookup(arr.lookup({id:'user', data:{name:'john doe', projects:{url:'http://'}}})).data.occupation.projects.url="www";
expect(arr.lookup({id:'user', data:{name:'john doe', projects:{url:'www'}}}))
.to.have.deep.property('data.occupation.projects.url', 'www');
});
it('should descriminate on a similar object, soley based on a single property value', function(){
var arr = new array();
var obj1 = {id:'user', select:'one', data:{name:'john doe', dob:'01/01/99', occupation:{title:'coder', projects:{url:'http://'}}}};
var obj2 = {id:'user', data:{name:'john doe', dob:'01/01/98', occupation:{title:'coder', projects:{url:'http://'}}}};
arr.push(obj1, obj2);
expect(arr.lookup({id:'user', data:{dob:'01/01/99'}})).to.have.property('select', 'one');
});
});