can-query-logic
Version:
111 lines (88 loc) • 2.91 kB
JavaScript
var BasicQuery = require("./basic-query");
var QUnit = require("steal-qunit");
QUnit.module("can-query-logic/types/basic-query merge");
var getId = function(d){ return d.id; };
var items = [
{ id: 0, note: 'C', type: 'eh' },
{ id: 1, note: 'D', type: 'critical' },
{ id: 2, note: 'E', type: 'critical' },
{ id: 3, note: 'F', type: 'eh' },
{ id: 4, note: 'G', type: 'critical' },
{ id: 5, note: 'A' },
{ id: 6, note: 'B', type: 'critical' },
{ id: 7, note: 'C', type: 'critical' }
];
var everything = new BasicQuery({});
QUnit.test("basics", function(assert) {
var fooBar = new BasicQuery({
filter: new BasicQuery.KeysAnd({ foo: "bar" })
});
var res = everything.merge(fooBar,items, items.slice(0, 3), getId );
assert.deepEqual(res, items);
});
QUnit.test("unionMembers against ranged sets", function(assert) {
var a = new BasicQuery({
page: new BasicQuery.RecordRange(10,13)
});
var b = new BasicQuery({
page: new BasicQuery.RecordRange(10,13)
});
var union = a.merge(b,items.slice(0,4), items.slice(4,8), getId );
a = new BasicQuery({
page: new BasicQuery.RecordRange(14,17)
});
union = a.merge(b,items.slice(4,8),items.slice(0,4), getId );
assert.deepEqual(union, items, "disjoint after");
});
QUnit.test("unionMembers against overlapping ranged sets", function(assert) {
var a = new BasicQuery({
page: new BasicQuery.RecordRange(10,13)
});
var b = new BasicQuery({
page: new BasicQuery.RecordRange(13,17)
});
var union = a.merge(b,items.slice(0,5),items.slice(3,8), getId );
assert.deepEqual(union, items);
// BREAK
a = new BasicQuery({
page: new BasicQuery.RecordRange(10,11)
});
b = new BasicQuery({
page: new BasicQuery.RecordRange(11,17)
});
union = a.merge(b,
items.slice(0,2),
items.slice(1,8), getId );
assert.deepEqual(union, items);
// BREAK
a = new BasicQuery({
page: new BasicQuery.RecordRange(10,11)
});
b = new BasicQuery({
page: new BasicQuery.RecordRange(11,17)
});
union = b.merge(a,
items.slice(1,8),
items.slice(0,2), getId );
assert.deepEqual(union, items);
});
QUnit.test("unionMembers filters for uniqueness", function(assert) {
var aItems = items.filter(function(a) {
return a.type === "critical";
});
var bItems = items.filter(function(b) {
return b.note === "C";
});
var unionItems = [bItems[0]].concat(aItems); // bItems[1] is already in aItems
var a = new BasicQuery({
page: new BasicQuery.KeysAnd({type: "critical"})
});
var b = new BasicQuery({
page: new BasicQuery.KeysAnd({note: "C"})
});
var union = a.merge(b,aItems, bItems, getId );
assert.deepEqual(union, unionItems);
// BREAK
union = b.merge(a,bItems,aItems, getId );
assert.deepEqual(union, unionItems);
});