From 4d23cfaf16b561c00b8a5c26e32890f8697d0936 Mon Sep 17 00:00:00 2001 From: Marek Gilbert Date: Fri, 11 Jan 2019 15:24:51 -0800 Subject: [PATCH] Include a trailing /documents on root resource paths This is required for v1 and accepted in v1beta1. Port of firebase/firebase-js-sdk@4cec9b1. --- .../firestore/remote/RemoteSerializer.java | 8 +++----- .../firestore/remote/RemoteSerializerTest.java | 14 +++++++------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/firebase-firestore/src/main/java/com/google/firebase/firestore/remote/RemoteSerializer.java b/firebase-firestore/src/main/java/com/google/firebase/firestore/remote/RemoteSerializer.java index 555639025b1..a9b6607eee5 100644 --- a/firebase-firestore/src/main/java/com/google/firebase/firestore/remote/RemoteSerializer.java +++ b/firebase-firestore/src/main/java/com/google/firebase/firestore/remote/RemoteSerializer.java @@ -174,17 +174,15 @@ public DocumentKey decodeKey(String name) { } private String encodeQueryPath(ResourcePath path) { - if (path.length() == 0) { - // If the path is empty, the backend requires we leave off the /documents at the end. - return databaseName; - } return encodeResourceName(databaseId, path); } private ResourcePath decodeQueryPath(String name) { ResourcePath resource = decodeResourceName(name); if (resource.length() == 4) { - // Path missing the trailing documents path segment, indicating an empty path. + // In v1beta1 queries for collections at the root did not have a trailing "/documents". In v1 + // all resource paths contain "/documents". Preserve the ability to read the v1beta1 form for + // compatibility with queries persisted in the local query cache. return ResourcePath.EMPTY; } else { return extractLocalPathFromResourceName(resource); diff --git a/firebase-firestore/src/test/java/com/google/firebase/firestore/remote/RemoteSerializerTest.java b/firebase-firestore/src/test/java/com/google/firebase/firestore/remote/RemoteSerializerTest.java index 6d42152d5f9..e7ec5fdd1b0 100644 --- a/firebase-firestore/src/test/java/com/google/firebase/firestore/remote/RemoteSerializerTest.java +++ b/firebase-firestore/src/test/java/com/google/firebase/firestore/remote/RemoteSerializerTest.java @@ -498,7 +498,7 @@ public void testEncodesFirstLevelAncestorQueries() { .addOrderBy(defaultKeyOrder()); QueryTarget.Builder queryBuilder = QueryTarget.newBuilder() - .setParent("projects/p/databases/d") + .setParent("projects/p/databases/d/documents") .setStructuredQuery(structuredQueryBuilder); Target expected = Target.newBuilder() @@ -558,7 +558,7 @@ public void testEncodesSingleFilterAtFirstLevelCollections() { .addOrderBy(defaultKeyOrder()); QueryTarget.Builder queryBuilder = QueryTarget.newBuilder() - .setParent("projects/p/databases/d") + .setParent("projects/p/databases/d/documents") .setStructuredQuery(structuredQueryBuilder); Target expected = Target.newBuilder() @@ -664,7 +664,7 @@ private void unaryFilterTest(Object equalityValue, UnaryFilter.Operator unaryOpe .addOrderBy(defaultKeyOrder()); QueryTarget.Builder queryBuilder = QueryTarget.newBuilder() - .setParent("projects/p/databases/d") + .setParent("projects/p/databases/d/documents") .setStructuredQuery(structuredQueryBuilder); Target expected = Target.newBuilder() @@ -692,7 +692,7 @@ public void testEncodesSortOrders() { .addOrderBy(defaultKeyOrder()); QueryTarget.Builder queryBuilder = QueryTarget.newBuilder() - .setParent("projects/p/databases/d") + .setParent("projects/p/databases/d/documents") .setStructuredQuery(structuredQueryBuilder); Target expected = Target.newBuilder() @@ -751,7 +751,7 @@ public void testEncodesLimits() { .setLimit(Int32Value.newBuilder().setValue(26)); QueryTarget.Builder queryBuilder = QueryTarget.newBuilder() - .setParent("projects/p/databases/d") + .setParent("projects/p/databases/d/documents") .setStructuredQuery(structuredQueryBuilder); Target expected = Target.newBuilder() @@ -791,7 +791,7 @@ public void testEncodesBounds() { QueryTarget.Builder queryBuilder = QueryTarget.newBuilder() - .setParent("projects/p/databases/d") + .setParent("projects/p/databases/d/documents") .setStructuredQuery(structuredQueryBuilder); Target expected = Target.newBuilder() @@ -819,7 +819,7 @@ public void testEncodesResumeTokens() { QueryTarget.Builder queryBuilder = QueryTarget.newBuilder() - .setParent("projects/p/databases/d") + .setParent("projects/p/databases/d/documents") .setStructuredQuery(structuredQueryBuilder); Target expected = Target.newBuilder()