var assert = require('assert'); var moment = require('moment'); var DataSet = require('../lib/DataSet'); var DataView = require('../lib/DataView'); // TODO: improve DataView tests, split up in one test per function describe('DataView', function () { it('should work', function () { var groups = new DataSet(); // add items with different groups groups.add([ {id: 1, content: 'Item 1', group: 1}, {id: 2, content: 'Item 2', group: 2}, {id: 3, content: 'Item 3', group: 2}, {id: 4, content: 'Item 4', group: 1}, {id: 5, content: 'Item 5', group: 3} ]); var group2 = new DataView(groups, { filter: function (item) { return item.group == 2; } }); // test getting the filtered data assert.deepEqual(group2.get(), [ {id: 2, content: 'Item 2', group: 2}, {id: 3, content: 'Item 3', group: 2} ]); assert.equal(group2.length, 2); // test filtering the view contents assert.deepEqual(group2.get({ filter: function (item) { return item.id > 2; } }), [ {id: 3, content: 'Item 3', group: 2} ]); // test event subscription var groupsTriggerCount = 0; groups.on('*', function () { groupsTriggerCount++; }); var group2TriggerCount = 0; group2.on('*', function () { group2TriggerCount++; }); groups.update({id:2, content: 'Item 2 (changed)'}); assert.equal(groupsTriggerCount, 1); assert.equal(group2TriggerCount, 1); assert.equal(group2.length, 2); groups.update({id:5, content: 'Item 5 (changed)'}); assert.equal(groupsTriggerCount, 2); assert.equal(group2TriggerCount, 1); assert.equal(group2.length, 2); // detach the view from groups group2.setData(null); assert.equal(groupsTriggerCount, 2); assert.equal(group2TriggerCount, 2); assert.equal(group2.length, 0); groups.update({id:2, content: 'Item 2 (changed again)'}); assert.equal(groupsTriggerCount, 3); assert.equal(group2TriggerCount, 2); // test updating of .length property group2.setData(groups); assert.equal(group2.length, 2); // add a new item groups.add({id: 6, content: 'Item 6', group: 2}); assert.equal(group2.length, 3); // change an items group to 2 groups.update({id: 4, group: 2}); assert.equal(group2.length, 4); // change an items group to 1 groups.update({id: 4, group: 1}); assert.equal(group2.length, 3); // remove an item groups.remove(2); assert.equal(group2.length, 2); // remove all items groups.clear(); assert.equal(group2.length, 0); }); });