@@ -65,6 +65,15 @@ std::string CreateTestBundle(Firestore* db) {
65
65
return CreateBundle (db->app ()->options ().project_id ());
66
66
}
67
67
68
+ void SetPromiseValueWhenUpdateIsFinal (
69
+ LoadBundleTaskProgress progress,
70
+ std::promise<void >& final_update_received) {
71
+ if (progress.state () == LoadBundleTaskProgress::State::kError ||
72
+ progress.state () == LoadBundleTaskProgress::State::kSuccess ) {
73
+ final_update_received.set_value ();
74
+ }
75
+ }
76
+
68
77
class BundleTest : public FirestoreIntegrationTest {
69
78
protected:
70
79
void SetUp () override {
@@ -133,15 +142,19 @@ TEST_F(BundleTest, CanLoadBundlesWithProgressUpdates) {
133
142
auto bundle = CreateTestBundle (db);
134
143
135
144
std::vector<LoadBundleTaskProgress> progresses;
145
+ std::promise<void > final_update;
136
146
Future<LoadBundleTaskProgress> result = db->LoadBundle (
137
- bundle, [&progresses](const LoadBundleTaskProgress& progress) {
147
+ bundle,
148
+ [&progresses, &final_update](const LoadBundleTaskProgress& progress) {
138
149
progresses.push_back (progress);
150
+ SetPromiseValueWhenUpdateIsFinal (progress, final_update);
139
151
});
140
152
141
153
auto final_progress = AwaitResult (result);
142
154
143
155
// 4 progresses will be reported: initial, document 1, document 2, final
144
156
// success.
157
+ final_update.get_future ().wait ();
145
158
ASSERT_EQ (progresses.size (), 4 );
146
159
EXPECT_THAT (progresses[0 ], InProgressWithLoadedDocuments (0 ));
147
160
EXPECT_THAT (progresses[1 ], InProgressWithLoadedDocuments (1 ));
@@ -195,12 +208,16 @@ TEST_F(BundleTest, LoadBundlesForASecondTimeSkips) {
195
208
VerifySuccessProgress (first_load);
196
209
197
210
std::vector<LoadBundleTaskProgress> progresses;
211
+ std::promise<void > final_update;
198
212
LoadBundleTaskProgress second_load = AwaitResult (db->LoadBundle (
199
- bundle, [&progresses](const LoadBundleTaskProgress& progress) {
213
+ bundle,
214
+ [&progresses, &final_update](const LoadBundleTaskProgress& progress) {
200
215
progresses.push_back (progress);
216
+ SetPromiseValueWhenUpdateIsFinal (progress, final_update);
201
217
}));
202
218
203
219
// There will be 4 progress updates if it does not skip loading.
220
+ final_update.get_future ().wait ();
204
221
ASSERT_EQ (progresses.size (), 1 );
205
222
VerifySuccessProgress (progresses[0 ]);
206
223
EXPECT_EQ (progresses[0 ], second_load);
@@ -220,13 +237,18 @@ TEST_F(BundleTest, LoadInvalidBundlesShouldFail) {
220
237
};
221
238
for (const auto & bundle : invalid_bundles) {
222
239
std::vector<LoadBundleTaskProgress> progresses;
240
+ std::promise<void > final_update;
223
241
Future<LoadBundleTaskProgress> result = db->LoadBundle (
224
- bundle, [&progresses](const LoadBundleTaskProgress& progress) {
242
+ bundle,
243
+ [&progresses, &final_update](const LoadBundleTaskProgress& progress) {
225
244
progresses.push_back (progress);
245
+ SetPromiseValueWhenUpdateIsFinal (progress, final_update);
226
246
});
227
- Await (result);
228
247
248
+ Await (result);
229
249
EXPECT_NE (result.error (), Error::kErrorOk );
250
+
251
+ final_update.get_future ().wait ();
230
252
ASSERT_EQ (progresses.size (), 1 );
231
253
VerifyErrorProgress (progresses[0 ]);
232
254
}
@@ -306,13 +328,17 @@ TEST_F(BundleTest, LoadDocumentsFromOtherProjectsShouldFail) {
306
328
Firestore* db = TestFirestore ();
307
329
auto bundle = CreateBundle (" other-project" );
308
330
std::vector<LoadBundleTaskProgress> progresses;
331
+ std::promise<void > final_update;
309
332
Future<LoadBundleTaskProgress> result = db->LoadBundle (
310
- bundle, [&progresses](const LoadBundleTaskProgress& progress) {
333
+ bundle,
334
+ [&progresses, &final_update](const LoadBundleTaskProgress& progress) {
311
335
progresses.push_back (progress);
336
+ SetPromiseValueWhenUpdateIsFinal (progress, final_update);
312
337
});
313
338
Await (result);
314
-
315
339
EXPECT_NE (result.error (), Error::kErrorOk );
340
+
341
+ final_update.get_future ().wait ();
316
342
ASSERT_EQ (progresses.size (), 2 );
317
343
EXPECT_THAT (progresses[0 ], InProgressWithLoadedDocuments (0 ));
318
344
VerifyErrorProgress (progresses[1 ]);
0 commit comments