From 4a846b1f067ad8e462df673ada38589da224fcef Mon Sep 17 00:00:00 2001 From: Suraj Dhamecha <48670070+suraj-qlogic@users.noreply.github.com> Date: Tue, 16 Jun 2020 01:34:01 +0530 Subject: [PATCH] feat: add support for fieldmask to document reference (#245) --- .../google/cloud/firestore/DocumentReference.java | 13 +++++++++++++ .../cloud/firestore/DocumentReferenceTest.java | 13 +++++++++++++ .../com/google/cloud/firestore/it/ITSystemTest.java | 9 +++++++++ 3 files changed, 35 insertions(+) diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentReference.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentReference.java index 54bf8d5a6..1025ffe29 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentReference.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentReference.java @@ -354,6 +354,19 @@ public ApiFuture get() { return extractFirst(firestore.getAll(this)); } + /** + * Reads the document referenced by this DocumentReference. If the document doesn't exist, the + * get(FieldMask fieldMask) will return an empty DocumentSnapshot. + * + * @param fieldMask A FieldMask object to retrieve the field value + * @return An ApiFuture that will be resolved with the contents of the Document at this + * DocumentReference, or a failure if the document does not exist + */ + @Nonnull + public ApiFuture get(FieldMask fieldMask) { + return extractFirst(firestore.getAll(new DocumentReference[] {this}, fieldMask)); + } + /** * Fetches the subcollections that are direct children of this document. * diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java index 54be303b3..030f53de2 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java @@ -275,6 +275,19 @@ public void deserializeDocumentReference() throws Exception { assertEquals(documentReference, snapshot.getReference()); } + @Test + public void getFieldWithFieldMask() throws Exception { + doAnswer(getAllResponse(SINGLE_FIELD_PROTO)) + .when(firestoreMock) + .streamRequest( + getAllCapture.capture(), + streamObserverCapture.capture(), + Matchers.any()); + DocumentSnapshot snapshot = documentReference.get(FieldMask.of(FieldPath.of("foo"))).get(); + assertEquals("foo", getAllCapture.getValue().getMask().getFieldPaths(0)); + assertEquals("bar", snapshot.get("foo")); + } + @Test public void deserializesDates() throws Exception { doAnswer(getAllResponse(ALL_SUPPORTED_TYPES_PROTO)) diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITSystemTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITSystemTest.java index f50e346f1..e3b54526c 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITSystemTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITSystemTest.java @@ -157,6 +157,15 @@ public void getAllWithFieldMask() throws Exception { assertEquals(map("foo", "bar"), documentSnapshots.get(0).getData()); } + @Test + public void getFieldMaskWithDocumentReference() throws Exception { + DocumentReference ref = randomColl.document("doc1"); + ref.set(ALL_SUPPORTED_TYPES_MAP).get(); + DocumentSnapshot documentSnapshots = ref.get(FieldMask.of("foo", "foobar")).get(); + assertEquals("bar", documentSnapshots.get("foo")); + assertNull(documentSnapshots.get("foobar")); + } + @Test public void addDocument() throws Exception { DocumentReference documentReference = randomColl.add(SINGLE_FIELD_MAP).get();