|
17 | 17 | import static com.google.firebase.firestore.AccessHelper.getAsyncQueue;
|
18 | 18 | import static com.google.firebase.firestore.testutil.IntegrationTestUtil.newTestSettings;
|
19 | 19 | import static com.google.firebase.firestore.testutil.IntegrationTestUtil.provider;
|
| 20 | +import static com.google.firebase.firestore.testutil.IntegrationTestUtil.testChangeUserTo; |
20 | 21 | import static com.google.firebase.firestore.testutil.IntegrationTestUtil.testCollection;
|
21 | 22 | import static com.google.firebase.firestore.testutil.IntegrationTestUtil.testCollectionWithDocs;
|
22 | 23 | import static com.google.firebase.firestore.testutil.IntegrationTestUtil.testDocument;
|
|
44 | 45 | import com.google.firebase.Timestamp;
|
45 | 46 | import com.google.firebase.firestore.FirebaseFirestoreException.Code;
|
46 | 47 | import com.google.firebase.firestore.Query.Direction;
|
| 48 | +import com.google.firebase.firestore.auth.User; |
47 | 49 | import com.google.firebase.firestore.testutil.EventAccumulator;
|
48 | 50 | import com.google.firebase.firestore.testutil.IntegrationTestUtil;
|
49 | 51 | import com.google.firebase.firestore.util.AsyncQueue.TimerId;
|
@@ -1098,23 +1100,47 @@ public void testShutdownCalledMultipleTimes() {
|
1098 | 1100 | }
|
1099 | 1101 |
|
1100 | 1102 | @Test
|
1101 |
| - public void testAwaitPendingWritesResolves() { |
| 1103 | + public void testWaitForPendingWritesResolves() { |
1102 | 1104 | DocumentReference documentReference = testCollection("abc").document("123");
|
1103 | 1105 | FirebaseFirestore firestore = documentReference.getFirestore();
|
1104 | 1106 | Map<String, Object> data = map("foo", "bar");
|
1105 | 1107 |
|
1106 | 1108 | waitFor(firestore.disableNetwork());
|
1107 |
| - Task<Void> awaitsPendingWrites1 = firestore.awaitPendingWrites(); |
| 1109 | + Task<Void> awaitsPendingWrites1 = firestore.waitForPendingWrites(); |
1108 | 1110 | Task<Void> pendingWrite = documentReference.set(data);
|
1109 |
| - Task<Void> awaitsPendingWrites2 = firestore.awaitPendingWrites(); |
| 1111 | + Task<Void> awaitsPendingWrites2 = firestore.waitForPendingWrites(); |
1110 | 1112 |
|
1111 |
| - assertTrue(!awaitsPendingWrites1.isComplete()); |
| 1113 | + // `awaitsPendingWrites1` is complete immediately because there is no pending writes at |
| 1114 | + // the time it is created. |
| 1115 | + waitFor(awaitsPendingWrites1); |
| 1116 | + assertTrue(awaitsPendingWrites1.isComplete() && awaitsPendingWrites1.isSuccessful()); |
1112 | 1117 | assertTrue(!pendingWrite.isComplete());
|
1113 | 1118 | assertTrue(!awaitsPendingWrites2.isComplete());
|
1114 | 1119 |
|
1115 | 1120 | waitFor(firestore.enableNetwork());
|
1116 | 1121 | waitFor(pendingWrite);
|
1117 |
| - waitFor(awaitsPendingWrites1); |
1118 | 1122 | waitFor(awaitsPendingWrites2);
|
| 1123 | + assertTrue(awaitsPendingWrites2.isComplete() && awaitsPendingWrites2.isSuccessful()); |
| 1124 | + } |
| 1125 | + |
| 1126 | + @Test |
| 1127 | + public void testWaitForPendingWritesFailsWhenUserChanges() { |
| 1128 | + DocumentReference documentReference = testCollection("abc").document("123"); |
| 1129 | + FirebaseFirestore firestore = documentReference.getFirestore(); |
| 1130 | + Map<String, Object> data = map("foo", "bar"); |
| 1131 | + |
| 1132 | + // Prevent pending writes receiving acknowledgement. |
| 1133 | + waitFor(firestore.disableNetwork()); |
| 1134 | + Task<Void> pendingWrite = documentReference.set(data); |
| 1135 | + Task<Void> awaitsPendingWrites = firestore.waitForPendingWrites(); |
| 1136 | + assertTrue(!pendingWrite.isComplete()); |
| 1137 | + assertTrue(!awaitsPendingWrites.isComplete()); |
| 1138 | + |
| 1139 | + testChangeUserTo(new User("new user")); |
| 1140 | + |
| 1141 | + assertTrue(!pendingWrite.isComplete()); |
| 1142 | + assertEquals( |
| 1143 | + "'waitForPendingWrites' task is cancelled due to User change.", |
| 1144 | + waitForException(awaitsPendingWrites).getMessage()); |
1119 | 1145 | }
|
1120 | 1146 | }
|
0 commit comments