Commit 1ebfd26d authored by Marco Mariani's avatar Marco Mariani

async key+query tests

parent 44a20b19
/*jslint indent: 2, maxlen: 120, nomen: true, vars: true */ /*jslint indent: 2, maxlen: 120, nomen: true, vars: true */
/*global define, exports, require, module, complex_queries, jiodate, window, test, ok, /*global define, exports, require, module, complex_queries, jiodate, window, test, ok,
equal, deepEqual, sinon */ equal, deepEqual, sinon, start, stop, RSVP */
// define([module_name], [dependencies], module); // define([module_name], [dependencies], module);
(function (dependencies, module) { (function (dependencies, module) {
...@@ -17,8 +17,12 @@ ...@@ -17,8 +17,12 @@
module('Custom Key Queries with JIODate'); module('Custom Key Queries with JIODate');
var noop = function () {
return; // use with RSVP.all
};
test('Stock comparison operators with year precision', function () { test('Stock comparison operators with year precision', function () {
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': 'twenty ten', 'date': '2010-03-04T08:52:13.746Z'}, {'identifier': 'twenty ten', 'date': '2010-03-04T08:52:13.746Z'},
{'identifier': 'twenty eleven', 'date': '2011-03-04T08:52:13.746Z'}, {'identifier': 'twenty eleven', 'date': '2011-03-04T08:52:13.746Z'},
...@@ -31,75 +35,101 @@ ...@@ -31,75 +35,101 @@
cast_to: jiodate.JIODate cast_to: jiodate.JIODate
} }
} }
}, query_list = null; }, query_list = [], promise = [];
stop();
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'date', key: 'date',
value: '2011' value: '2011'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'date': '2011-03-04T08:52:13.746Z', 'identifier': 'twenty eleven'} {'date': '2011-03-04T08:52:13.746Z', 'identifier': 'twenty eleven'}
], 'Match with "date = 2011" (query tree form)'); ], 'Match with "date = 2011" (query tree form)');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'date', key: 'date',
operator: '!=', operator: '!=',
value: '2011' value: '2011'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'date': '2010-03-04T08:52:13.746Z', 'identifier': 'twenty ten'}, {'date': '2010-03-04T08:52:13.746Z', 'identifier': 'twenty ten'},
{'date': '2012-03-04T08:52:13.746Z', 'identifier': 'twenty twelve'} {'date': '2012-03-04T08:52:13.746Z', 'identifier': 'twenty twelve'}
], 'Match with "date != 2011" (query tree form)'); ], 'Match with "date != 2011" (query tree form)');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'date', key: 'date',
operator: '<', operator: '<',
value: '2011' value: '2011'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'date': '2010-03-04T08:52:13.746Z', 'identifier': 'twenty ten'} {'date': '2010-03-04T08:52:13.746Z', 'identifier': 'twenty ten'}
], 'Match with "date < 2011" (query tree form)'); ], 'Match with "date < 2011" (query tree form)');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'date', key: 'date',
operator: '<=', operator: '<=',
value: '2011' value: '2011'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'date': '2010-03-04T08:52:13.746Z', 'identifier': 'twenty ten'}, {'date': '2010-03-04T08:52:13.746Z', 'identifier': 'twenty ten'},
{'date': '2011-03-04T08:52:13.746Z', 'identifier': 'twenty eleven'} {'date': '2011-03-04T08:52:13.746Z', 'identifier': 'twenty eleven'}
], 'Match with "date <= 2011" (query tree form)'); ], 'Match with "date <= 2011" (query tree form)');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'date', key: 'date',
operator: '>', operator: '>',
value: '2011' value: '2011'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'date': '2012-03-04T08:52:13.746Z', 'identifier': 'twenty twelve'} {'date': '2012-03-04T08:52:13.746Z', 'identifier': 'twenty twelve'}
], 'Match with "date > 2011" (query tree form)'); ], 'Match with "date > 2011" (query tree form)');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'date', key: 'date',
operator: '>=', operator: '>=',
value: '2011' value: '2011'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'date': '2011-03-04T08:52:13.746Z', 'identifier': 'twenty eleven'}, {'date': '2011-03-04T08:52:13.746Z', 'identifier': 'twenty eleven'},
{'date': '2012-03-04T08:52:13.746Z', 'identifier': 'twenty twelve'} {'date': '2012-03-04T08:52:13.746Z', 'identifier': 'twenty twelve'}
], 'Match with "date >= 2011" (query tree form)'); ], 'Match with "date >= 2011" (query tree form)');
})
);
query_list = [ query_list = [
[ [
...@@ -119,9 +149,13 @@ ...@@ -119,9 +149,13 @@
query_list.forEach(function (o) { query_list.forEach(function (o) {
var qs = o[0], expected = o[1]; var qs = o[0], expected = o[1];
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create(qs, key_schema).exec(doc_list); complex_queries.QueryFactory.create(qs, key_schema).
deepEqual(doc_list, expected, "Match with '" + qs + "' (parsed query string)"); exec(docList()).
then(function (dl) {
deepEqual(dl, expected, "Match with '" + qs + "' (parsed query string)");
})
);
}); });
query_list = [ query_list = [
...@@ -132,13 +166,17 @@ ...@@ -132,13 +166,17 @@
]; ];
query_list.forEach(function (qs) { query_list.forEach(function (qs) {
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create(qs, key_schema).exec(doc_list); complex_queries.QueryFactory.create(qs, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
], "Match with an invalid parsed string " + qs + " should return empty list but not raise errors"); ], "Match with an invalid parsed string " + qs + " should return empty list but not raise errors");
})
);
}); });
RSVP.all(promise).then(noop).always(start);
}); });
})); }));
...@@ -21,54 +21,6 @@ ...@@ -21,54 +21,6 @@
local_storage.clear(); local_storage.clear();
/**
* all(promises): Promise
*
* Produces a promise that is resolved when all the given promises are
* fulfilled. The resolved value is an array of each of the answers of the
* given promises.
*
* @param {Array} promises The promises to use
* @return {Promise} A new promise
*/
function all(promises) {
var results = [], i, count = 0;
function cancel() {
var j;
for (j = 0; j < promises.length; j += 1) {
if (typeof promises[j].cancel === 'function') {
promises[j].cancel();
}
}
}
return new RSVP.Promise(function (resolve, reject, notify) {
/*jslint unparam: true */
function succeed(j) {
return function (answer) {
results[j] = answer;
count += 1;
if (count !== promises.length) {
return;
}
resolve(results);
};
}
function notified(j) {
return function (answer) {
notify({
"promise": promises[j],
"index": j,
"notified": answer
});
};
}
for (i = 0; i < promises.length; i += 1) {
promises[i].then(succeed(i), succeed(i), notified(i));
}
}, cancel);
}
var key_schema = { var key_schema = {
cast_lookup: { cast_lookup: {
dateType: function (obj) { dateType: function (obj) {
...@@ -105,7 +57,7 @@ ...@@ -105,7 +57,7 @@
o.date_b = new Date(); o.date_b = new Date();
// put some document before listing them // put some document before listing them
all([ RSVP.all([
jio.put({ jio.put({
"_id": "a", "_id": "a",
"title": "one", "title": "one",
......
/*jslint indent: 2, maxlen: 100, nomen: true, vars: true */ /*jslint indent: 2, maxlen: 100, nomen: true, vars: true */
/*global define, exports, require, module, complex_queries, window, test, ok, /*global define, exports, require, module, complex_queries, window, test, ok,
deepEqual, sinon */ deepEqual, sinon, start, stop, RSVP */
// define([module_name], [dependencies], module); // define([module_name], [dependencies], module);
(function (dependencies, module) { (function (dependencies, module) {
...@@ -17,6 +17,10 @@ ...@@ -17,6 +17,10 @@
module('Custom Key Queries with Schema'); module('Custom Key Queries with Schema');
var noop = function () {
return; // use with RSVP.all
};
var translationEqualityMatcher = function (data) { var translationEqualityMatcher = function (data) {
return function (object_value, value) { return function (object_value, value) {
value = data[value]; value = data[value];
...@@ -24,7 +28,6 @@ ...@@ -24,7 +28,6 @@
}; };
}; };
/*jslint unparam: true*/ /*jslint unparam: true*/
var key_schema = { var key_schema = {
cast_lookup: { cast_lookup: {
...@@ -90,29 +93,37 @@ ...@@ -90,29 +93,37 @@
test('Keys defined in a Schema can be used like metadata', function () { test('Keys defined in a Schema can be used like metadata', function () {
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': 'a'}, {'identifier': 'a'},
{'identifier': 'A'}, {'identifier': 'A'},
{'identifier': 'b'} {'identifier': 'b'}
]; ];
}; }, promise = [];
doc_list = docList(); stop();
promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'case_insensitive_identifier', key: 'case_insensitive_identifier',
value: 'A' value: 'A'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': 'a'}, {'identifier': 'a'},
{'identifier': 'A'} {'identifier': 'A'}
], 'Key Schema: case_insensitive_identifier'); ], 'Key Schema: case_insensitive_identifier');
})
);
RSVP.all(promise).then(noop).always(start);
}); });
test('Standard date keys', function () { test('Standard date keys', function () {
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': 'a', 'date': '2013-01-01'}, {'identifier': 'a', 'date': '2013-01-01'},
{'identifier': 'b', 'date': '2013-02-01'}, {'identifier': 'b', 'date': '2013-02-01'},
...@@ -121,54 +132,58 @@ ...@@ -121,54 +132,58 @@
{'identifier': 'c', 'date': '2013-03-03'}, {'identifier': 'c', 'date': '2013-03-03'},
{'identifier': 'd', 'date': '2013-04-04'} {'identifier': 'd', 'date': '2013-04-04'}
]; ];
}; }, promise = [];
stop();
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'date_day', key: 'date_day',
value: '2013-02-02' value: '2013-02-02'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': 'bb', 'date': '2013-02-02'} {'identifier': 'bb', 'date': '2013-02-02'}
], 'Key Schema: same_day'); ], 'Key Schema: same_day');
})
);
promise.push(
doc_list = docList();
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'date_month', key: 'date_month',
value: '2013-02-10' value: '2013-02-10'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
{ then(function (dl) {
'date': '2013-02-01', deepEqual(dl, [
'identifier': 'b' {'date': '2013-02-01', 'identifier': 'b'},
}, {'date': '2013-02-02', 'identifier': 'bb'},
{ {'date': '2013-02-03', 'identifier': 'bbb'}
'date': '2013-02-02',
'identifier': 'bb'
},
{
'date': '2013-02-03',
'identifier': 'bbb'
}
], 'Key Schema: date_month'); ], 'Key Schema: date_month');
})
);
promise.push(
doc_list = docList();
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'date_year', key: 'date_year',
value: '2013-02-10' value: '2013-02-10'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list.length, 6, 'Key Schema: date_year'); exec(docList()).
then(function (dl) {
deepEqual(dl.length, 6, 'Key Schema: date_year');
})
);
RSVP.all(promise).then(noop).always(start);
}); });
test('Test key schema + complex queries', function () { test('Test key schema + complex queries', function () {
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': '10', 'number': '10'}, {'identifier': '10', 'number': '10'},
{'identifier': '19', 'number': '19'}, {'identifier': '19', 'number': '19'},
...@@ -189,9 +204,11 @@ ...@@ -189,9 +204,11 @@
cast_to: 'intType' cast_to: 'intType'
} }
} }
}; }, promise = [];
stop();
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'complex', type: 'complex',
operator: 'OR', operator: 'OR',
...@@ -206,44 +223,58 @@ ...@@ -206,44 +223,58 @@
operator: '=', operator: '=',
value: '19' value: '19'
}] }]
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '10', 'number': '10'}, {'identifier': '10', 'number': '10'},
{'identifier': '19', 'number': '19'} {'identifier': '19', 'number': '19'}
], 'Key schema should be propagated from complex to simple queries'); ], 'Key schema should be propagated from complex to simple queries');
})
);
RSVP.all(promise).then(noop).always(start);
}); });
test('Key Schema with translation lookup', function () { test('Key Schema with translation lookup', function () {
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': '1', 'state': 'open'}, {'identifier': '1', 'state': 'open'},
{'identifier': '2', 'state': 'closed'} {'identifier': '2', 'state': 'closed'}
]; ];
}; }, promise = [];
stop();
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'translated_state', key: 'translated_state',
value: 'ouvert' value: 'ouvert'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '1', 'state': 'open'} {'identifier': '1', 'state': 'open'}
], 'Key Schema: It should be possible to look for a translated string'); ], 'Key Schema: It should be possible to look for a translated string');
})
);
promise.push(
doc_list = docList();
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: 'translated_state', key: 'translated_state',
operator: '=', operator: '=',
value: 'ouvert' value: 'ouvert'
}, key_schema).exec(doc_list); }, key_schema).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '1', 'state': 'open'} {'identifier': '1', 'state': 'open'}
], 'Key Schema: It should be possible to look for a translated string with operator ='); ], 'Key Schema: It should be possible to look for a translated string with operator =');
})
);
// XXX not implemented yet // XXX not implemented yet
...@@ -258,6 +289,7 @@ ...@@ -258,6 +289,7 @@
// {'identifier': '2', 'state': 'closed'} // {'identifier': '2', 'state': 'closed'}
// ], 'Key Schema: It should be possible to look for a translated string with operator !='); // ], 'Key Schema: It should be possible to look for a translated string with operator !=');
RSVP.all(promise).then(noop).always(start);
}); });
})); }));
/*jslint indent: 2, maxlen: 120, nomen: true, vars: true */ /*jslint indent: 2, maxlen: 120, nomen: true, vars: true */
/*global define, exports, require, module, complex_queries, window, test, ok, /*global define, exports, require, module, complex_queries, window, test, ok,
equal, deepEqual, sinon */ equal, deepEqual, sinon, stop, start, RSVP */
// define([module_name], [dependencies], module); // define([module_name], [dependencies], module);
(function (dependencies, module) { (function (dependencies, module) {
...@@ -17,9 +17,13 @@ ...@@ -17,9 +17,13 @@
module('Custom Key Queries'); module('Custom Key Queries');
var noop = function () {
return; // use with RSVP.all
};
test('Simple Key with read_from', function () { test('Simple Key with read_from', function () {
/*jslint unparam: true*/ /*jslint unparam: true*/
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': 'a'}, {'identifier': 'a'},
{'identifier': 'A'}, {'identifier': 'A'},
...@@ -35,29 +39,41 @@ ...@@ -35,29 +39,41 @@
return (object_value.toLowerCase() === value.toLowerCase()); return (object_value.toLowerCase() === value.toLowerCase());
} }
} }
}; }, promise = [];
/*jslint unparam: false*/ /*jslint unparam: false*/
doc_list = docList(); stop();
promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.title, key: keys.title,
value: 'a' value: 'a'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': 'a'} {'identifier': 'a'}
], 'It should be possible to query with an alias key'); ], 'It should be possible to query with an alias key');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.case_insensitive_identifier, key: keys.case_insensitive_identifier,
value: 'A' value: 'A'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': 'a'}, {'identifier': 'a'},
{'identifier': 'A'} {'identifier': 'A'}
], 'It should be possible to query with a case-insensitive alias key'); ], 'It should be possible to query with a case-insensitive alias key');
})
);
RSVP.all(promise).then(noop).always(start);
}); });
...@@ -71,7 +87,7 @@ ...@@ -71,7 +87,7 @@
test('Simple Key with date casting', function () { test('Simple Key with date casting', function () {
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': 'a', 'date': '2013-01-01'}, {'identifier': 'a', 'date': '2013-01-01'},
{'identifier': 'b', 'date': '2013-02-01'}, {'identifier': 'b', 'date': '2013-02-01'},
...@@ -80,7 +96,7 @@ ...@@ -80,7 +96,7 @@
{'identifier': 'c', 'date': '2013-03-03'}, {'identifier': 'c', 'date': '2013-03-03'},
{'identifier': 'd', 'date': '2013-04-04'} {'identifier': 'd', 'date': '2013-04-04'}
]; ];
}; }, promise = [];
var sameDay = function (a, b) { var sameDay = function (a, b) {
return ( return (
...@@ -119,53 +135,57 @@ ...@@ -119,53 +135,57 @@
} }
}; };
doc_list = docList(); stop();
promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.day, key: keys.day,
value: '2013-02-02' value: '2013-02-02'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': 'bb', 'date': '2013-02-02'} {'identifier': 'bb', 'date': '2013-02-02'}
], 'It should be possible to compare dates with sameDay'); ], 'It should be possible to compare dates with sameDay');
})
);
promise.push(
doc_list = docList();
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.month, key: keys.month,
value: '2013-02-10' value: '2013-02-10'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
{ then(function (dl) {
'date': '2013-02-01', deepEqual(dl, [
'identifier': 'b' {'date': '2013-02-01', 'identifier': 'b'},
}, {'date': '2013-02-02', 'identifier': 'bb'},
{ {'date': '2013-02-03', 'identifier': 'bbb'}
'date': '2013-02-02',
'identifier': 'bb'
},
{
'date': '2013-02-03',
'identifier': 'bbb'
}
], 'It should be possible to compare dates with sameMonth'); ], 'It should be possible to compare dates with sameMonth');
})
);
promise.push(
doc_list = docList();
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.year, key: keys.year,
value: '2013-02-10' value: '2013-02-10'
}).exec(doc_list); }).
deepEqual(doc_list.length, 6, exec(docList()).
then(function (dl) {
deepEqual(dl.length, 6,
'It should be possible to compare dates with sameYear'); 'It should be possible to compare dates with sameYear');
})
);
RSVP.all(promise).then(noop).always(start);
}); });
test('Simple Key with date casting and <=> operators', function () { test('Simple Key with date casting and <=> operators', function () {
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': '1', 'date': '2013-01-01'}, {'identifier': '1', 'date': '2013-01-01'},
{'identifier': '2', 'date': '2013-02-02'}, {'identifier': '2', 'date': '2013-02-02'},
...@@ -176,82 +196,109 @@ ...@@ -176,82 +196,109 @@
read_from: 'date', read_from: 'date',
cast_to: dateCast cast_to: dateCast
} }
}; }, promise = [];
doc_list = docList(); stop();
promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.mydate, key: keys.mydate,
operator: '=', operator: '=',
value: '2013-02-02' value: '2013-02-02'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '2', 'date': '2013-02-02'} {'identifier': '2', 'date': '2013-02-02'}
], 'It should be possible to search for dates with operator ='); ], 'It should be possible to search for dates with operator =');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.mydate, key: keys.mydate,
operator: '!=', operator: '!=',
value: '2013-02-02' value: '2013-02-02'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '1', 'date': '2013-01-01'}, {'identifier': '1', 'date': '2013-01-01'},
{'identifier': '3', 'date': '2013-03-03'} {'identifier': '3', 'date': '2013-03-03'}
], 'It should be possible to search for dates with operator !='); ], 'It should be possible to search for dates with operator !=');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.mydate, key: keys.mydate,
operator: '<=', operator: '<=',
value: '2013-02-02' value: '2013-02-02'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '1', 'date': '2013-01-01'}, {'identifier': '1', 'date': '2013-01-01'},
{'identifier': '2', 'date': '2013-02-02'} {'identifier': '2', 'date': '2013-02-02'}
], 'It should be possible to search for dates with operator <='); ], 'It should be possible to search for dates with operator <=');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.mydate, key: keys.mydate,
operator: '<', operator: '<',
value: '2013-02-02' value: '2013-02-02'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '1', 'date': '2013-01-01'} {'identifier': '1', 'date': '2013-01-01'}
], 'It should be possible to search for dates with operator <'); ], 'It should be possible to search for dates with operator <');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.mydate, key: keys.mydate,
operator: '>', operator: '>',
value: '2013-02-02' value: '2013-02-02'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '3', 'date': '2013-03-03'} {'identifier': '3', 'date': '2013-03-03'}
], 'It should be possible to search for dates with operator >'); ], 'It should be possible to search for dates with operator >');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.mydate, key: keys.mydate,
operator: '>=', operator: '>=',
value: '2013-02-02' value: '2013-02-02'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '2', 'date': '2013-02-02'}, {'identifier': '2', 'date': '2013-02-02'},
{'identifier': '3', 'date': '2013-03-03'} {'identifier': '3', 'date': '2013-03-03'}
], 'It should be possible to search for dates with operator >='); ], 'It should be possible to search for dates with operator >=');
})
);
RSVP.all(promise).then(noop).always(start);
}); });
test('Simple Key with both equal_match and operator attributes', function () { test('Simple Key with both equal_match and operator attributes', function () {
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': '1', 'date': '2013-01-01'}, {'identifier': '1', 'date': '2013-01-01'},
{'identifier': '2', 'date': '2013-02-02'}, {'identifier': '2', 'date': '2013-02-02'},
...@@ -261,69 +308,81 @@ ...@@ -261,69 +308,81 @@
mydate: { mydate: {
read_from: 'date', read_from: 'date',
cast_to: dateCast, cast_to: dateCast,
equal_match: function alwaysTrue() { return true; } equal_match: function alwaysTrue(o1) { /*, o2*/
return o1.getDate() === 2;
} }
}; }
}, promise = [];
stop();
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.mydate, key: keys.mydate,
value: '2013-02-02' value: '2013-02-02'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
{'identifier': '1', 'date': '2013-01-01'}, then(function (dl) {
{'identifier': '2', 'date': '2013-02-02'}, deepEqual(dl, [
{'identifier': '3', 'date': '2013-03-03'} {'identifier': '2', 'date': '2013-02-02'}
], 'It should be possible to use a catch-all filter'); ], "'equal_match' with no 'operator'");
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.mydate, key: keys.mydate,
operator: '=', operator: '=',
value: '2013-02-02' value: '2013-01-01'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
{'identifier': '1', 'date': '2013-01-01'}, then(function (dl) {
{'identifier': '2', 'date': '2013-02-02'}, deepEqual(dl, [
{'identifier': '3', 'date': '2013-03-03'} {'identifier': '2', 'date': '2013-02-02'}
], "The catch-all filter overrides the default '=' operator"); ], "'equal_match' overrides '=' operator");
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.mydate, key: keys.mydate,
operator: '>=', operator: '>=',
value: '2013-02-02' value: '2013-02-02'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '2', 'date': '2013-02-02'}, {'identifier': '2', 'date': '2013-02-02'},
{'identifier': '3', 'date': '2013-03-03'} {'identifier': '3', 'date': '2013-03-03'}
], 'An explicit operator should override the catch-all filter'); ], "'equal_match' does not override '>' operator");
})
);
RSVP.all(promise).then(noop).always(start);
}); });
var intType = function (value) {
if (typeof value === 'string') {
return parseInt(value, 10);
}
return value;
};
test('Test overriding operators and compound query', function () { test('Test overriding operators and compound query', function () {
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': '10', 'number': '10'}, {'identifier': '10', 'number': '10'},
{'identifier': '19', 'number': '19'}, {'identifier': '19', 'number': '19'},
{'identifier': '100', 'number': '100'} {'identifier': '100', 'number': '100'}
]; ];
}; }, intType = function (value) {
if (typeof value === 'string') {
return parseInt(value, 10);
}
return value;
}, promise = [];
doc_list = docList(); stop();
promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: { key: {
...@@ -332,12 +391,16 @@ ...@@ -332,12 +391,16 @@
}, },
operator: '>', operator: '>',
value: '19' value: '19'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '100', 'number': '100'} {'identifier': '100', 'number': '100'}
], 'Numbers are correctly compared (>) after casting'); ], 'Numbers are correctly compared (>) after casting');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: { key: {
...@@ -346,12 +409,16 @@ ...@@ -346,12 +409,16 @@
}, },
operator: '<', operator: '<',
value: '19' value: '19'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '10', 'number': '10'} {'identifier': '10', 'number': '10'}
], 'Numbers are correctly compared (<) after casting'); ], 'Numbers are correctly compared (<) after casting');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'complex', type: 'complex',
operator: 'OR', operator: 'OR',
...@@ -372,12 +439,17 @@ ...@@ -372,12 +439,17 @@
operator: '=', operator: '=',
value: '19' value: '19'
}] }]
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '10', 'number': '10'}, {'identifier': '10', 'number': '10'},
{'identifier': '19', 'number': '19'} {'identifier': '19', 'number': '19'}
], 'Custom keys should also work within compound queries'); ], 'Custom keys should also work within compound queries');
})
);
RSVP.all(promise).then(noop).always(start);
}); });
...@@ -390,7 +462,7 @@ ...@@ -390,7 +462,7 @@
test('Simple Key with translation lookup', function () { test('Simple Key with translation lookup', function () {
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': '1', 'state': 'open'}, {'identifier': '1', 'state': 'open'},
{'identifier': '2', 'state': 'closed'} {'identifier': '2', 'state': 'closed'}
...@@ -402,31 +474,39 @@ ...@@ -402,31 +474,39 @@
read_from: 'state', read_from: 'state',
equal_match: equalState equal_match: equalState
} }
}; }, promise = [];
stop();
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.translated_state, key: keys.translated_state,
value: 'ouvert' value: 'ouvert'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '1', 'state': 'open'} {'identifier': '1', 'state': 'open'}
], 'It should be possible to look for a translated string with a custom match function'); ], 'It should be possible to look for a translated string with a custom match function');
})
);
doc_list = docList(); promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.translated_state, key: keys.translated_state,
operator: '=', operator: '=',
value: 'ouvert' value: 'ouvert'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': '1', 'state': 'open'} {'identifier': '1', 'state': 'open'}
], 'It should be possible to look for a translated string with operator ='); ], 'It should be possible to look for a translated string with operator =');
})
);
// XXX not implemented yet // XXX not implemented yet
// doc_list = docList(); // doc_list = docList();
...@@ -440,7 +520,7 @@ ...@@ -440,7 +520,7 @@
// {'identifier': '2', 'state': 'closed'} // {'identifier': '2', 'state': 'closed'}
// ], 'It should be possible to look for a translated string with operator !='); // ], 'It should be possible to look for a translated string with operator !=');
RSVP.all(promise).then(noop).always(start);
}); });
...@@ -483,7 +563,7 @@ ...@@ -483,7 +563,7 @@
test('Query with accent folding and wildcard', function () { test('Query with accent folding and wildcard', function () {
/*jslint unparam: true*/ /*jslint unparam: true*/
var doc_list, docList = function () { var docList = function () {
return [ return [
{'identifier': 'àéîöùç'}, {'identifier': 'àéîöùç'},
{'identifier': 'âèî ôùc'}, {'identifier': 'âèî ôùc'},
...@@ -495,21 +575,27 @@ ...@@ -495,21 +575,27 @@
read_from: 'identifier', read_from: 'identifier',
cast_to: accentFold cast_to: accentFold
} }
}; }, promise = [];
/*jslint unparam: false*/ /*jslint unparam: false*/
doc_list = docList(); stop();
promise.push(
complex_queries.QueryFactory.create({ complex_queries.QueryFactory.create({
type: 'simple', type: 'simple',
key: keys.identifier, key: keys.identifier,
value: 'aei%' value: 'aei%'
}).exec(doc_list); }).
deepEqual(doc_list, [ exec(docList()).
then(function (dl) {
deepEqual(dl, [
{'identifier': 'àéîöùç'}, {'identifier': 'àéîöùç'},
{'identifier': 'âèî ôùc'} {'identifier': 'âèî ôùc'}
], 'It should be possible to query regardless of accents'); ], 'It should be possible to query regardless of accents');
})
);
RSVP.all(promise).then(noop).always(start);
}); });
})); }));
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment