Decode Date JSON value at LiveQuery (#5540)

This commit is contained in:
ananfang
2019-05-01 02:00:23 +08:00
committed by Diamond Lewis
parent 2e2ee06279
commit fa97df5f4e
2 changed files with 49 additions and 0 deletions

View File

@@ -587,4 +587,49 @@ describe('matchesQuery', function() {
q.notContainedIn('profile', ['abc', 'def', 'ghi']);
expect(matchesQuery(message, q)).toBe(false);
});
it('matches on Date', () => {
// given
const now = new Date();
const obj = {
id: new Id('Person', '01'),
dateObject: now,
dateJSON: {
__type: 'Date',
iso: now.toISOString(),
},
};
// when, then: Equal
let q = new Parse.Query('Person');
q.equalTo('dateObject', now);
q.equalTo('dateJSON', now);
expect(matchesQuery(Object.assign({}, obj), q)).toBe(true);
// when, then: lessThan
const future = Date(now.getTime() + 1000);
q = new Parse.Query('Person');
q.lessThan('dateObject', future);
q.lessThan('dateJSON', future);
expect(matchesQuery(Object.assign({}, obj), q)).toBe(true);
// when, then: lessThanOrEqualTo
q = new Parse.Query('Person');
q.lessThanOrEqualTo('dateObject', now);
q.lessThanOrEqualTo('dateJSON', now);
expect(matchesQuery(Object.assign({}, obj), q)).toBe(true);
// when, then: greaterThan
const past = Date(now.getTime() - 1000);
q = new Parse.Query('Person');
q.greaterThan('dateObject', past);
q.greaterThan('dateJSON', past);
expect(matchesQuery(Object.assign({}, obj), q)).toBe(true);
// when, then: greaterThanOrEqualTo
q = new Parse.Query('Person');
q.greaterThanOrEqualTo('dateObject', now);
q.greaterThanOrEqualTo('dateJSON', now);
expect(matchesQuery(Object.assign({}, obj), q)).toBe(true);
});
});

View File

@@ -177,6 +177,10 @@ function matchesKeyConstraints(object, key, constraints) {
// Bail! We can't handle relational queries locally
return false;
}
// Decode Date JSON value
if (object[key] && object[key].__type == 'Date') {
object[key] = new Date(object[key].iso);
}
// Equality (or Array contains) cases
if (typeof constraints !== 'object') {
if (Array.isArray(object[key])) {