it('geo max distance in miles bay area', async () => { await makeSomeGeoPoints(); const sfo = new Parse.GeoPoint(37.6189722, -122.3748889); const query = new Parse.Query(TestObject); query.withinMiles('location', sfo, 62.0); const results = await query.find(); equal(results.length, 1); equal(results[0].get('name'), 'San Francisco'); });
const makeSomeGeoPoints = function() { const sacramento = new TestObject(); sacramento.set('location', new Parse.GeoPoint(38.52, -121.5)); sacramento.set('name', 'Sacramento'); const honolulu = new TestObject(); honolulu.set('location', new Parse.GeoPoint(21.35, -157.93)); honolulu.set('name', 'Honolulu'); const sf = new TestObject(); sf.set('location', new Parse.GeoPoint(37.75, -122.68)); sf.set('name', 'San Francisco'); return Parse.Object.saveAll([sacramento, sf, honolulu]); }
it('geo point roundtrip', async () => { const point = new Parse.GeoPoint(44.0, -11.0); const obj = new TestObject(); obj.set('location', point); obj.set('name', 'Ferndale'); await obj.save(); const result = await new Parse.Query(TestObject).get(obj.id); const pointAgain = result.get('location'); ok(pointAgain); equal(pointAgain.latitude, 44.0); equal(pointAgain.longitude, -11.0); });
it('withinKilometers supports count', async () => { const inside = new Parse.GeoPoint(10, 10); const outside = new Parse.GeoPoint(20, 20); const obj1 = new Parse.Object('TestObject', { location: inside }); const obj2 = new Parse.Object('TestObject', { location: outside }); await Parse.Object.saveAll([obj1, obj2]); const q = new Parse.Query(TestObject).withinKilometers( 'location', inside, 5 ); const count = await q.count(); equal(count, 1); });
it('supports array of geo points', async () => { const point1 = new Parse.GeoPoint(44.0, -11.0); const point2 = new Parse.GeoPoint(22.0, -55.0); const obj = new TestObject(); obj.set('locations', [point1, point2]); await obj.save(); const query = new Parse.Query(TestObject); const results = await query.find(); equal(results.length, 1); const locations = results[0].get('locations'); expect(locations.length).toEqual(2); expect(locations[0]).toEqual(point1); expect(locations[1]).toEqual(point2); });
it('creating geo point exception two fields', done => { const point = new Parse.GeoPoint(20, 20); const obj = new TestObject(); obj.set('locationOne', point); obj.set('locationTwo', point); obj.save().then( () => { fail('expected error'); }, err => { equal(err.code, Parse.Error.INCORRECT_TYPE); done(); } ); });
it('supports a sub-object with a geo point', async () => { const point = new Parse.GeoPoint(44.0, -11.0); const obj = new TestObject(); obj.set('subobject', { location: point }); await obj.save(); const query = new Parse.Query(TestObject); const results = await query.find(); equal(results.length, 1); const pointAgain = results[0].get('subobject')['location']; ok(pointAgain); equal(pointAgain.latitude, 44.0); equal(pointAgain.longitude, -11.0); });
it('geo max distance in km everywhere', async done => { await makeSomeGeoPoints(); const sfo = new Parse.GeoPoint(37.6189722, -122.3748889); const query = new Parse.Query(TestObject); // Honolulu is 4300 km away from SFO on a sphere ;) query.withinKilometers('location', sfo, 4800.0); const results = await query.find(); equal(results.length, 3); done(); });
it('returns nearest location', async () => { await makeSomeGeoPoints(); const sfo = new Parse.GeoPoint(37.6189722, -122.3748889); const query = new Parse.Query(TestObject); query.near('location', sfo); const results = await query.find(); equal(results[0].get('name'), 'San Francisco'); equal(results[1].get('name'), 'Sacramento'); });
it('geo max distance in km california', async () => { await makeSomeGeoPoints(); const sfo = new Parse.GeoPoint(37.6189722, -122.3748889); const query = new Parse.Query(TestObject); query.withinKilometers('location', sfo, 3700.0); const results = await query.find(); equal(results.length, 2); equal(results[0].get('name'), 'San Francisco'); equal(results[1].get('name'), 'Sacramento'); });
it('geo max distance in miles mid peninsula', async () => { await makeSomeGeoPoints(); const sfo = new Parse.GeoPoint(37.6189722, -122.3748889); const query = new Parse.Query(TestObject); query.withinMiles('location', sfo, 10.0); const results = await query.find(); equal(results.length, 0); });
it('geo max distance in km mid peninsula', async () => { await makeSomeGeoPoints(); const sfo = new Parse.GeoPoint(37.6189722, -122.3748889); const query = new Parse.Query(TestObject); query.withinKilometers('location', sfo, 10.0); const results = await query.find(); equal(results.length, 0); });
it('geo max distance in miles california', async () => { await makeSomeGeoPoints(); const sfo = new Parse.GeoPoint(37.6189722, -122.3748889); const query = new Parse.Query(TestObject); query.withinMiles('location', sfo, 2200.0); const results = await query.find(); equal(results.length, 2); equal(results[0].get('name'), 'San Francisco'); equal(results[1].get('name'), 'Sacramento'); });
it('geo max distance in km bay area', async () => { await makeSomeGeoPoints(); const sfo = new Parse.GeoPoint(37.6189722, -122.3748889); const query = new Parse.Query(TestObject); query.withinKilometers('location', sfo, 100.0); const results = await query.find(); equal(results.length, 1); equal(results[0].get('name'), 'San Francisco'); });
it('geo max distance in miles everywhere', async () => { await makeSomeGeoPoints(); const sfo = new Parse.GeoPoint(37.6189722, -122.3748889); const query = new Parse.Query(TestObject); query.withinMiles('location', sfo, 2600.0); const results = await query.find(); equal(results.length, 3); });