Fixes issue affecting liveQuery on location null/undefined values (#4171)

This commit is contained in:
Florent Vilmart
2017-09-17 04:57:11 -04:00
committed by Natan Rolnik
parent d0184f438d
commit 8d8a8b250e
2 changed files with 28 additions and 1 deletions

View File

@@ -360,7 +360,16 @@ describe('matchesQuery', function() {
id: new Id('Checkin', 'C1'),
location: new Parse.GeoPoint(40, 40)
};
var ptUndefined = {
id: new Id('Checkin', 'C1')
};
var ptNull = {
id: new Id('Checkin', 'C1'),
location: null
};
expect(matchesQuery(pt, q)).toBe(true);
expect(matchesQuery(ptUndefined, q)).toBe(false);
expect(matchesQuery(ptNull, q)).toBe(false);
q = new Parse.Query('Checkin');
pt.location = new Parse.GeoPoint(40, 40);
@@ -384,6 +393,17 @@ describe('matchesQuery', function() {
name: 'Santa Clara'
};
var noLocation = {
id: new Id('Checkin', 'C2'),
name: 'Santa Clara'
};
var nullLocation = {
id: new Id('Checkin', 'C2'),
location: null,
name: 'Santa Clara'
};
var q = new Parse.Query('Checkin').withinGeoBox(
'location',
new Parse.GeoPoint(37.708813, -122.526398),
@@ -392,7 +412,8 @@ describe('matchesQuery', function() {
expect(matchesQuery(caltrainStation, q)).toBe(true);
expect(matchesQuery(santaClara, q)).toBe(false);
expect(matchesQuery(noLocation, q)).toBe(false);
expect(matchesQuery(nullLocation, q)).toBe(false);
// Invalid rectangles
q = new Parse.Query('Checkin').withinGeoBox(
'location',

View File

@@ -262,10 +262,16 @@ function matchesKeyConstraints(object, key, constraints) {
}
break;
case '$nearSphere':
if (!compareTo || !object[key]) {
return false;
}
var distance = compareTo.radiansTo(object[key]);
var max = constraints.$maxDistance || Infinity;
return distance <= max;
case '$within':
if (!compareTo || !object[key]) {
return false;
}
var southWest = compareTo.$box[0];
var northEast = compareTo.$box[1];
if (southWest.latitude > northEast.latitude ||