diff --git a/packages/firestore/src/api/user_data_writer.ts b/packages/firestore/src/api/user_data_writer.ts index 0f452ebde01..61c00bcc653 100644 --- a/packages/firestore/src/api/user_data_writer.ts +++ b/packages/firestore/src/api/user_data_writer.ts @@ -75,10 +75,7 @@ export class UserDataWriter { case TypeOrder.RefValue: return this.convertReference(value.referenceValue!); case TypeOrder.GeoPointValue: - return new GeoPoint( - value.geoPointValue!.latitude!, - value.geoPointValue!.longitude! - ); + return this.convertGeoPoint(value.geoPointValue!); case TypeOrder.ArrayValue: return this.convertArray(value.arrayValue!); case TypeOrder.ObjectValue: @@ -96,6 +93,13 @@ export class UserDataWriter { return result; } + private convertGeoPoint(value: api.LatLng): GeoPoint { + return new GeoPoint( + normalizeNumber(value.latitude), + normalizeNumber(value.longitude) + ); + } + private convertArray(arrayValue: api.ArrayValue): unknown[] { return (arrayValue.values || []).map(value => this.convertValue(value)); } diff --git a/packages/firestore/test/integration/api/type.test.ts b/packages/firestore/test/integration/api/type.test.ts index 0935d778e65..f228c0041c9 100644 --- a/packages/firestore/test/integration/api/type.test.ts +++ b/packages/firestore/test/integration/api/type.test.ts @@ -62,15 +62,23 @@ apiDescribe('Firestore', (persistence: boolean) => { it('can read and write geo point fields', () => { return withTestDoc(persistence, doc => { return doc - .set({ geopoint: new GeoPoint(1.23, 4.56) }) + .set({ + geopoint1: new GeoPoint(1.23, 4.56), + geopoint2: new GeoPoint(0, 0) + }) .then(() => { return doc.get(); }) .then(docSnapshot => { - const latLong = docSnapshot.data()!['geopoint']; + const latLong = docSnapshot.data()!['geopoint1']; expect(latLong instanceof GeoPoint).to.equal(true); expect(latLong.latitude).to.equal(1.23); expect(latLong.longitude).to.equal(4.56); + + const zeroLatLong = docSnapshot.data()!['geopoint2']; + expect(zeroLatLong instanceof GeoPoint).to.equal(true); + expect(zeroLatLong.latitude).to.equal(0); + expect(zeroLatLong.longitude).to.equal(0); }); }); });