can-query-logic
Version:
432 lines (374 loc) • 6.78 kB
JavaScript
require("./src/set-test");
require("./src/helpers-test");
require("./src/types/make-real-number-range-inclusive-test");
require("./src/types/comparisons-test");
require("./src/types/and-or-not-test");
require("./src/types/values-or-test");
require("./src/types/basic-query-test");
require("./src/types/basic-query-sorting-test");
require("./src/types/basic-query-filter-from-test");
require("./src/types/basic-query-merge-test");
require("./src/serializers/basic-query-test");
require("./src/serializers/comparisons-test");
require("./src/types/make-maybe-test");
require("./src/types/make-enum-test");
require("./src/types/values-and-test");
require("./compat/compat-test");
require("./test/special-comparison-logic-test");
require("./test/make-enum-logic-test");
require("./test/maybe-type-test");
var QUnit = require("steal-qunit");
var QueryLogic = require("can-query-logic");
var canReflect = require("can-reflect");
var algebra = new QueryLogic();
QUnit.module("can-query-logic");
QUnit.test("union", function(assert) {
var unionResult = algebra.union({
filter: {
name: "Ramiya"
}
}, {
filter: {
name: "Bohdi"
}
});
assert.deepEqual(unionResult, {
filter: {
name: {
$in: ["Ramiya", "Bohdi"]
},
}
});
});
QUnit.test("difference", function(assert) {
var differenceResult = algebra.difference({
filter: {
name: {
$in: ["Ramiya", "Bohdi"]
}
}
}, {
filter: {
name: "Bohdi"
}
});
assert.deepEqual(differenceResult, {
filter: {
name: "Ramiya",
}
});
});
QUnit.test("subset", function(assert) {
var subsetResult = algebra.isSubset({
filter: {
name: "Bohdi"
}
}, {
filter: {
name: {
$in: ["Ramiya", "Bohdi"]
}
}
});
assert.deepEqual(subsetResult, true);
});
QUnit.test("isMember", function(assert) {
var hasResult = algebra.isMember({
filter: {
name: "Bohdi"
}
}, {
name: "Bohdi"
});
assert.deepEqual(hasResult, true);
});
QUnit.test("filterMembers basics", function(assert) {
var subset = algebra.filterMembers({
filter: {
name: {
$in: ["Bohdi", "Ramiya"]
}
}
}, {}, [{
name: "Bohdi"
},
{
name: "Ramiya"
},
{
name: "Payal"
},
{
name: "Justin"
}
]);
assert.deepEqual(subset, [{
name: "Bohdi"
},
{
name: "Ramiya"
}
]);
subset = algebra.filterMembers({
filter: {
name: {
$in: ["Payal", "Ramiya", "Justin"]
}
},
page: {
start: "1",
end: "2"
}
}, {}, [{
name: "Bohdi"
},
{
name: "Ramiya"
},
{
name: "Payal"
},
{
name: "Justin"
}
]);
assert.deepEqual(subset, [{
name: "Payal"
},
{
name: "Justin"
}
]);
});
QUnit.test("unionMembers basics", function(assert) {
var union = algebra.unionMembers({
filter: {
name: "Bohdi"
}
}, {
filter: {
name: "Ramiya"
}
}, [{
name: "Bohdi",
id: 1
}, ], [{
name: "Ramiya",
id: 2
}, ]);
assert.deepEqual(union, [{
name: "Bohdi",
id: 1
},
{
name: "Ramiya",
id: 2
}
]);
});
QUnit.test("count basics", function(assert) {
assert.equal(algebra.count({}), Infinity);
assert.equal(algebra.count({
page: {
start: 1,
end: 2
}
}), 2);
});
QUnit.test('index basics', function(assert) {
var index = algebra.index({
sort: "name"
},
[{
id: 1,
name: "g"
}, {
id: 2,
name: "j"
}, {
id: 3,
name: "m"
}, {
id: 4,
name: "s"
}], {
name: "k"
});
assert.equal(index, 2);
index = algebra.index({
sort: "-name"
},
[{
id: 1,
name: "g"
}, {
id: 2,
name: "j"
}, {
id: 3,
name: "m"
}, {
id: 4,
name: "s"
}].reverse(), {
name: "k"
});
assert.equal(index, 2);
index = algebra.index({},
[{
id: 1,
name: "g"
}, {
id: 2,
name: "j"
}, {
id: 3,
name: "m"
}, {
id: 4,
name: "s"
}], {
id: 0,
name: "k"
});
assert.equal(index, 0);
index = algebra.index({},
[{
id: 1,
name: "g"
}, {
id: 2,
name: "j"
}, {
id: 3,
name: "m"
}, {
id: 4,
name: "s"
}], {
name: "k"
});
assert.equal(index, undefined, "no value if no id");
var TODO_id = canReflect.assignSymbols({}, {
"can.getSchema": function() {
return {
kind: "record",
identity: ["_id"],
keys: {
id: Number,
points: Number,
complete: Boolean,
name: String
}
};
}
});
var algebra2 = new QueryLogic(TODO_id);
index = algebra2.index({},
[{
id: 1,
_id: 0
}, {
id: 2,
_id: 1
}, {
id: 3,
_id: 3
}, {
id: 4,
_id: 4
}], {
id: 0,
_id: 2
});
assert.equal(index, 2);
//var algebra = new set.Algebra(set.props.id("id"));
});
QUnit.test("filterMembers with reverse sort", function(assert) {
var sortedMembers = algebra.filterMembers({
sort: "-name"
},
[{
id: 1,
name: "a"
}, {
id: 2,
name: "z"
}, {
id: 3,
name: "f"
}, {
id: 4,
name: "s"
}]);
assert.deepEqual(sortedMembers,
[{
id: 2,
name: "z"
}, {
id: 4,
name: "s"
}, {
id: 3,
name: "f"
}, {
id: 1,
name: "a"
}]);
});
QUnit.test("isPaginated, removePagination", function(assert) {
assert.equal(algebra.isPaginated({}), false, "universe is not paginated");
assert.equal(algebra.isPaginated({
filter: {
foo: "bar"
}
}), false, "filter is not paginated");
assert.equal(algebra.isPaginated({
sort: "bar"
}), false, "sort is not paginated");
assert.equal(algebra.isPaginated({
page: {
start: 1,
end: 2
}
}), true, "page is paginated");
assert.deepEqual(algebra.removePagination({}), {}, "removePagination universe");
assert.deepEqual(algebra.removePagination({
filter: {
foo: "bar"
}
}), {
filter: {
foo: "bar"
}
}, "removePagination filter");
assert.deepEqual(algebra.removePagination({
sort: "bar"
}), {
sort: "bar"
}, "removePagination sort");
assert.deepEqual(algebra.removePagination({
page: {
start: 1,
end: 2
}
}), {}, "removePagination page");
});
QUnit.test("Value returned by makeEnum is constructorLike", function(assert) {
var Status = QueryLogic.makeEnum(["new", "preparing", "delivery", "delivered"]);
var pass = canReflect.isConstructorLike(Status);
assert.ok(pass, "Status is constructor like");
});
QUnit.test("can call low-level APIs from the outside", function(assert) {
var gt1 = new QueryLogic.GreaterThan(1);
var lte1 = new QueryLogic.LessThanEqual(1);
assert.equal(QueryLogic.intersection(gt1, lte1), QueryLogic.EMPTY);
var isGtJustinAndGt35 = new QueryLogic.KeysAnd({
name: new QueryLogic.GreaterThan("Justin"),
age: new QueryLogic.GreaterThan(35)
});
var isGt25 = new QueryLogic.KeysAnd({
age: new QueryLogic.GreaterThan(25)
});
assert.deepEqual(QueryLogic.union(isGtJustinAndGt35, isGt25), isGt25, "fewer clauses");
});