summaryrefslogtreecommitdiffstats
path: root/node_modules/sift/test/basic-test.js
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
commite06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch)
tree55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/sift/test/basic-test.js
downloadwebsite_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip
api, login, auth
Diffstat (limited to 'node_modules/sift/test/basic-test.js')
-rw-r--r--node_modules/sift/test/basic-test.js237
1 files changed, 237 insertions, 0 deletions
diff --git a/node_modules/sift/test/basic-test.js b/node_modules/sift/test/basic-test.js
new file mode 100644
index 0000000..799f0d0
--- /dev/null
+++ b/node_modules/sift/test/basic-test.js
@@ -0,0 +1,237 @@
+import * as assert from 'assert';
+import sift, {indexOf as siftIndexOf} from '..';
+
+describe(__filename + '#', function() {
+
+ it('doesn\'t sort arrays', function () {
+ var values = sift({
+ $or: [3, 2, 1]
+ }, [9,8,7,6,5,4,3,2,1]);
+
+
+ assert.equal(values.length, 3);
+ assert.equal(values[0], 3);
+ assert.equal(values[1], 2);
+ assert.equal(values[2], 1);
+ });
+
+ it('can create a custom selector, and use it', function () {
+ var sifter = sift({ age: { $gt: 5}}, function (item) {
+ return item.person;
+ });
+
+ var people = [{ person: { age: 6 }}],
+ filtered = people.filter(sifter);
+
+
+ assert.equal(filtered.length, 1);
+ assert.equal(filtered[0], people[0]);
+ });
+
+ it('throws an error if the operation is invalid', function () {
+
+ var err;
+ try {
+ sift({$aaa:1})('b');
+ } catch (e) {
+ err = e;
+ }
+
+ assert.equal(err.message, 'Unknown operation $aaa');
+
+ });
+
+ it('can use a custom selector as the 3rd param', function () {
+
+ var people = [{ person: { age: 6 }}];
+
+ var filtered = sift({ age: { $gt: 5}}, people, function (item) {
+ return item.person;
+ });
+
+ assert.equal(filtered.length, 1);
+ assert.equal(filtered[0], people[0]);
+ });
+
+ it('can get the first index of a matching element', function () {
+ var index = siftIndexOf({ val: { $gt: 5}}, [{val: 4}, {val: 3}, {val: 6}, {val: 7}]);
+
+ assert.equal(index, 2);
+ });
+
+ it('returns -1 as index if no matching element is found', function () {
+ var index = siftIndexOf({ val: { $gt: 7}}, [{val: 4}, {val: 3}, {val: 6}, {val: 7}]);
+
+ assert.equal(index, -1);
+ });
+
+ it('can match empty arrays', function () {
+ var statusQuery = {$or: [{status: {$exists: false}},
+ {status: []},
+ {status: {$in: ['urgent', 'completed', 'today']}}
+ ]};
+
+ var filtered = sift(statusQuery, [{ status: [] },
+ { status: ['urgent'] },
+ { status: ['nope'] }
+ ]);
+
+ assert.equal(filtered.length, 2);
+ });
+
+ it('$ne: null does not hit when field is present', function(){
+ var sifter = sift({age: {$ne: null}});
+
+ var people = [
+ {age: 'matched'},
+ {missed: 1}
+ ];
+ var filtered = people.filter(sifter);
+
+ assert.equal(filtered.length, 1);
+ assert.equal(filtered[0].age, 'matched');
+ });
+
+ it('$ne does not hit when field is different', function () {
+ var sifter = sift({ age: { $ne: 5 }});
+
+ var people = [{ age: 5 }],
+ filtered = people.filter(sifter);
+
+ assert.equal(filtered.length, 0);
+ });
+
+ it('$ne does hit when field exists with different value', function () {
+ var sifter = sift({ age: { $ne: 4 }});
+
+ var people = [{ age: 5 }],
+ filtered = people.filter(sifter);
+
+ assert.equal(filtered.length, 1);
+ });
+
+ it('$ne does hit when field does not exist', function(){
+ var sifter = sift({ age: { $ne: 5 }});
+
+ var people = [{}],
+ filtered = people.filter(sifter);
+
+ assert.equal(filtered.length, 1);
+ });
+
+ it('$eq matches objects that serialize to the same value', function() {
+ var counter = 0;
+ function Book(name) {
+ this.name = name;
+ this.copyNumber = counter;
+ this.toJSON = function() {
+ return this.name; // discard the copy when serializing.
+ };
+ counter += 1;
+ }
+
+ var warAndPeace = new Book('War and Peace');
+
+ var sifter = sift({ $eq: warAndPeace});
+
+ var books = [ new Book('War and Peace')];
+ var filtered = books.filter(sifter);
+
+ assert.equal(filtered.length, 1);
+ });
+
+ it('$neq does not match objects that serialize to the same value', function() {
+ var counter = 0;
+ function Book(name) {
+ this.name = name;
+ this.copyNumber = counter;
+ this.toJSON = function() {
+ return this.name; // discard the copy when serializing.
+ };
+ counter += 1;
+ }
+
+ var warAndPeace = new Book('War and Peace');
+
+ var sifter = sift({ $ne: warAndPeace});
+
+ var books = [ new Book('War and Peace')];
+ var filtered = books.filter(sifter);
+
+ assert.equal(filtered.length, 0);
+ });
+
+ // https://gist.github.com/jdnichollsc/00ea8cf1204b17d9fb9a991fbd1dfee6
+ it('returns a period between start and end dates', function() {
+
+ var product = {
+ 'productTypeCode': 'productTypeEnergy',
+ 'quantities': [
+ {
+ 'period': {
+ 'startDate': new Date('2017-01-13T05:00:00.000Z'),
+ 'endDate': new Date('2017-01-31T05:00:00.000Z'),
+ 'dayType': {
+ 'normal': true,
+ 'holiday': true
+ },
+ 'specificDays': [
+ 'monday',
+ 'wednesday',
+ 'friday'
+ ],
+ 'loadType': {
+ 'high': true,
+ 'medium': false,
+ 'low': false
+ }
+ },
+ 'type': 'DemandPercentage',
+ 'quantityValue': '44'
+ },
+ {
+ 'period': {
+ 'startDate': new Date('2017-01-13T05:00:00.000Z'),
+ 'endDate': new Date('2017-01-31T05:00:00.000Z'),
+ 'dayType': {
+ 'normal': true,
+ 'holiday': true
+ },
+ 'loadType': {
+ 'high': false,
+ 'medium': true,
+ 'low': false
+ }
+ },
+ 'type': 'Value',
+ 'quantityValue': '22'
+ }
+ ]
+ };
+
+ var period = {
+ 'startDate': new Date('2017-01-08T05:00:00.000Z'),
+ 'endDate': new Date('2017-01-29T05:00:00.000Z'),
+ 'dayType': {
+ 'normal': true,
+ 'holiday': true
+ },
+ 'loadType': {
+ 'high': true,
+ 'medium': false,
+ 'low': true
+ },
+ specificPeriods : ['3', '4', '5-10']
+ };
+
+
+ var results = sift({
+ $and: [
+ { 'period.startDate': { $lte : period.endDate } },
+ { 'period.endDate': { $gte : period.startDate } }
+ ]
+ }, product.quantities);
+
+ assert.equal(results.length, 2);
+ });
+});