New query condition support to match all strings that starts with some other given strings (#3864)

* feat: Convert $regex value to RegExp object

* feat: Add lib folder

* Revert "feat: Add lib folder"

This reverts commit c9dfbcbf699ff220baeb2df5586a944d19808e5e.

* feat: Add $regex test in $all array

* test: Test regex with $all only in MongoDB

* Revert "test: Test regex with $all only in MongoDB"

This reverts commit d7194c7869dee98d924fbc2502593a198385dba1.

* feat: Add tests for containsAllStartingWith

* feat: Add postgres support

Thanks to @dplewis

* feat: Check that all values in $all must be regex or none

* test: Check that $all vaules must be regex or none

* feat: Update tests to use only REST API

* refactor: Move $all regex check to adapter

* feat: Check for valid $all values in progres

* refactor: Update function name

* fix:  Postgres $all values regex checking

* fix: Check starts with as string

* fix: Define contains all regex sql function

* fix: Wrong value check

* fix: Check valid data

* fix: Check regex when there is only one value

* fix: Constains all starting with string returns empty with bad params

* fix: Pass correct regex value

* feat: Add missing tests

* feat: Add missing tests

* feat: Add more tests

* fix: Unify MongoDB and PostgreSQL functionality

* fix: Lint checks

* fix: Test broken

$regex in $all list must be { $regex: "string" }

* test for empty $all
This commit is contained in:
Eduard Bosch Bertran
2018-05-16 03:42:32 +02:00
committed by Diamond Lewis
parent 2c357df33e
commit c0e3672e32
7 changed files with 395 additions and 2 deletions

View File

@@ -353,6 +353,41 @@ describe('parseObjectToMongoObjectForCreate', () => {
expect(output.ts.iso).toEqual('2017-01-18T00:00:00.000Z');
done();
});
it('$regex in $all list', (done) => {
const input = {
arrayField: {'$all': [{$regex: '^\\Qone\\E'}, {$regex: '^\\Qtwo\\E'}, {$regex: '^\\Qthree\\E'}]},
};
const outputValue = {
arrayField: {'$all': [/^\Qone\E/, /^\Qtwo\E/, /^\Qthree\E/]},
};
const output = transform.transformWhere(null, input);
jequal(outputValue.arrayField, output.arrayField);
done();
});
it('$regex in $all list must be { $regex: "string" }', (done) => {
const input = {
arrayField: {'$all': [{$regex: 1}]},
};
expect(() => {
transform.transformWhere(null, input)
}).toThrow();
done();
});
it('all values in $all must be $regex (start with string) or non $regex (start with string)', (done) => {
const input = {
arrayField: {'$all': [{$regex: '^\\Qone\\E'}, {$unknown: '^\\Qtwo\\E'}]},
};
expect(() => {
transform.transformWhere(null, input)
}).toThrow();
done();
});
});
describe('transformUpdate', () => {