UNPKG

array-includes-polyfill

Version:

Exposing a richer set of Array features for JavaScript

110 lines (80 loc) 4.89 kB
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'); }); });