@@ -165,11 +165,11 @@ public void setup() {
165
165
166
166
activity = Robolectric .buildActivity (TestActivity .class ).create ().get ();
167
167
when (mockLifecycleNotifier .getCurrentActivity ()).thenReturn (activity );
168
+ when (mockSignInStorage .getSignInStatus ()).thenReturn (true );
168
169
}
169
170
170
171
@ Test
171
172
public void checkForNewRelease_whenCheckForNewReleaseFails_throwsError () {
172
- firebaseAppDistribution .setCachedNewRelease (null );
173
173
when (mockCheckForNewReleaseClient .checkForNewRelease ())
174
174
.thenReturn (
175
175
Tasks .forException (
@@ -234,55 +234,40 @@ public void updateApp_whenNotSignedIn_throwsError() {
234
234
235
235
@ Test
236
236
public void updateToNewRelease_whenNewAabReleaseAvailable_showsUpdateDialog () {
237
- // mockSignInStorage returns false then true to simulate logging in during first signIn check in
238
- // updateIfNewReleaseAvailable
239
- when (mockSignInStorage .getSignInStatus ()).thenReturn (false ).thenReturn (true );
240
- AppDistributionReleaseInternal newRelease = TEST_RELEASE_NEWER_AAB_INTERNAL .build ();
241
- when (mockCheckForNewReleaseClient .checkForNewRelease ()).thenReturn (Tasks .forResult (newRelease ));
242
- firebaseAppDistribution .setCachedNewRelease (newRelease );
243
- doReturn (new UpdateTaskImpl ()).when (mockUpdateAabClient ).updateAab (newRelease );
237
+ when (mockCheckForNewReleaseClient .checkForNewRelease ())
238
+ .thenReturn (Tasks .forResult ((TEST_RELEASE_NEWER_AAB_INTERNAL .build ())));
244
239
245
240
firebaseAppDistribution .updateIfNewReleaseAvailable ();
246
241
247
- // Update flow
248
- verify (mockTesterSignInClient , times (1 )).signInTester ();
249
- assertTrue (ShadowAlertDialog .getLatestDialog () instanceof AlertDialog );
250
- AlertDialog updateDialog = (AlertDialog ) ShadowAlertDialog .getLatestDialog ();
242
+ AlertDialog dialog = verifyUpdateAlertDialog ();
251
243
assertEquals (
252
244
String .format (
253
245
"Version %s (%s) is available.\n \n Release notes: %s" ,
254
246
TEST_RELEASE_NEWER_AAB .getDisplayVersion (),
255
247
TEST_RELEASE_NEWER_AAB .getVersionCode (),
256
248
TEST_RELEASE_NEWER_AAB .getReleaseNotes ()),
257
- shadowOf (updateDialog ).getMessage ().toString ());
258
- assertTrue (updateDialog .isShowing ());
249
+ shadowOf (dialog ).getMessage ().toString ());
259
250
}
260
251
261
252
@ Test
262
253
public void updateToNewRelease_whenReleaseNotesEmpty_doesNotShowReleaseNotes () {
263
- when (mockSignInStorage .getSignInStatus ()).thenReturn (true );
264
- AppDistributionReleaseInternal newRelease =
265
- TEST_RELEASE_NEWER_AAB_INTERNAL .setReleaseNotes ("" ).build ();
266
- when (mockCheckForNewReleaseClient .checkForNewRelease ()).thenReturn (Tasks .forResult (newRelease ));
267
- firebaseAppDistribution .setCachedNewRelease (newRelease );
254
+ when (mockCheckForNewReleaseClient .checkForNewRelease ())
255
+ .thenReturn (Tasks .forResult ((TEST_RELEASE_NEWER_AAB_INTERNAL .setReleaseNotes ("" ).build ())));
268
256
269
257
firebaseAppDistribution .updateIfNewReleaseAvailable ();
270
258
271
- // Update flow
272
- assertTrue (ShadowAlertDialog .getLatestDialog () instanceof AlertDialog );
273
- AlertDialog updateDialog = (AlertDialog ) ShadowAlertDialog .getLatestDialog ();
259
+ AlertDialog dialog = verifyUpdateAlertDialog ();
274
260
assertEquals (
275
261
String .format (
276
262
"Version %s (%s) is available." ,
277
263
TEST_RELEASE_NEWER_AAB .getDisplayVersion (), TEST_RELEASE_NEWER_AAB .getVersionCode ()),
278
- shadowOf (updateDialog ).getMessage ().toString ());
264
+ shadowOf (dialog ).getMessage ().toString ());
279
265
}
280
266
281
267
@ Test
282
268
public void updateToNewRelease_whenNoReleaseAvailable_updateDialogNotShown () {
283
269
when (mockSignInStorage .getSignInStatus ()).thenReturn (false );
284
270
when (mockCheckForNewReleaseClient .checkForNewRelease ()).thenReturn (Tasks .forResult (null ));
285
- firebaseAppDistribution .setCachedNewRelease (null );
286
271
287
272
UpdateTask task = firebaseAppDistribution .updateIfNewReleaseAvailable ();
288
273
@@ -298,7 +283,6 @@ public void updateToNewRelease_whenNoReleaseAvailable_updateDialogNotShown() {
298
283
public void updateToNewRelease_whenActivityBackgrounded_updateDialogNotShown () {
299
284
when (mockSignInStorage .getSignInStatus ()).thenReturn (false );
300
285
when (mockCheckForNewReleaseClient .checkForNewRelease ()).thenReturn (Tasks .forResult (null ));
301
- firebaseAppDistribution .setCachedNewRelease (null );
302
286
when (mockLifecycleNotifier .getCurrentActivity ()).thenReturn (null );
303
287
304
288
UpdateTask task = firebaseAppDistribution .updateIfNewReleaseAvailable ();
@@ -352,6 +336,41 @@ public void updateToNewRelease_whenSignInFailed_checkForUpdateNotCalled() {
352
336
assertEquals (AUTHENTICATION_FAILURE , e .getErrorCode ());
353
337
}
354
338
339
+ @ Test
340
+ public void updateToNewRelease_whenDialogDismissed_taskFails () {
341
+ when (mockCheckForNewReleaseClient .checkForNewRelease ())
342
+ .thenReturn (Tasks .forResult (TEST_RELEASE_NEWER_AAB_INTERNAL .build ()));
343
+
344
+ UpdateTask updateTask = firebaseAppDistribution .updateIfNewReleaseAvailable ();
345
+ AlertDialog updateDialog = verifyUpdateAlertDialog ();
346
+ updateDialog .getButton (AlertDialog .BUTTON_NEGATIVE ).performClick (); // dismiss dialog
347
+
348
+ assertFalse (updateDialog .isShowing ());
349
+ assertFalse (updateTask .isSuccessful ());
350
+ Exception e = updateTask .getException ();
351
+ assertTrue (e instanceof FirebaseAppDistributionException );
352
+ assertEquals (INSTALLATION_CANCELED , ((FirebaseAppDistributionException ) e ).getErrorCode ());
353
+ assertEquals (ErrorMessages .UPDATE_CANCELED , e .getMessage ());
354
+ }
355
+
356
+ @ Test
357
+ public void updateToNewRelease_whenDialogCanceled_taskFails () {
358
+ when (mockCheckForNewReleaseClient .checkForNewRelease ())
359
+ .thenReturn (Tasks .forResult (TEST_RELEASE_NEWER_AAB_INTERNAL .build ()));
360
+
361
+ UpdateTask updateTask = firebaseAppDistribution .updateIfNewReleaseAvailable ();
362
+
363
+ AlertDialog updateDialog = verifyUpdateAlertDialog ();
364
+ updateDialog .onBackPressed (); // cancels the dialog
365
+
366
+ assertFalse (updateDialog .isShowing ());
367
+ assertFalse (updateTask .isSuccessful ());
368
+ Exception e = updateTask .getException ();
369
+ assertTrue (e instanceof FirebaseAppDistributionException );
370
+ assertEquals (INSTALLATION_CANCELED , ((FirebaseAppDistributionException ) e ).getErrorCode ());
371
+ assertEquals (ErrorMessages .UPDATE_CANCELED , e .getMessage ());
372
+ }
373
+
355
374
@ Test
356
375
public void updateToNewRelease_whenCheckForUpdateFails_updateAppNotCalled () {
357
376
when (mockCheckForNewReleaseClient .checkForNewRelease ())
@@ -374,14 +393,6 @@ public void updateToNewRelease_whenCheckForUpdateFails_updateAppNotCalled() {
374
393
assertEquals (FirebaseAppDistributionException .Status .NETWORK_FAILURE , e .getErrorCode ());
375
394
}
376
395
377
- @ Test
378
- public void updateToNewRelease_callsSignInTester () {
379
- when (mockCheckForNewReleaseClient .checkForNewRelease ())
380
- .thenReturn (Tasks .forResult (TEST_RELEASE_NEWER_AAB_INTERNAL .build ()));
381
- firebaseAppDistribution .updateIfNewReleaseAvailable ();
382
- verify (mockTesterSignInClient , times (1 )).signInTester ();
383
- }
384
-
385
396
@ Test
386
397
public void signOutTester_setsSignInStatusFalse () {
387
398
firebaseAppDistribution .signOutTester ();
@@ -390,10 +401,8 @@ public void signOutTester_setsSignInStatusFalse() {
390
401
391
402
@ Test
392
403
public void updateToNewRelease_receiveProgressUpdateFromUpdateApp () {
393
- when (mockSignInStorage .getSignInStatus ()).thenReturn (true );
394
404
AppDistributionReleaseInternal newRelease = TEST_RELEASE_NEWER_AAB_INTERNAL .build ();
395
405
when (mockCheckForNewReleaseClient .checkForNewRelease ()).thenReturn (Tasks .forResult (newRelease ));
396
- firebaseAppDistribution .setCachedNewRelease (newRelease );
397
406
UpdateTaskImpl mockTask = new UpdateTaskImpl ();
398
407
when (mockUpdateAabClient .updateAab (newRelease )).thenReturn (mockTask );
399
408
mockTask .updateProgress (
@@ -419,10 +428,8 @@ public void updateToNewRelease_receiveProgressUpdateFromUpdateApp() {
419
428
420
429
@ Test
421
430
public void taskCancelledOnScreenRotation () {
422
- when (mockSignInStorage .getSignInStatus ()).thenReturn (true );
423
431
AppDistributionReleaseInternal newRelease = TEST_RELEASE_NEWER_AAB_INTERNAL .build ();
424
432
when (mockCheckForNewReleaseClient .checkForNewRelease ()).thenReturn (Tasks .forResult (newRelease ));
425
- firebaseAppDistribution .setCachedNewRelease (newRelease );
426
433
427
434
UpdateTask task = firebaseAppDistribution .updateIfNewReleaseAvailable ();
428
435
@@ -475,4 +482,12 @@ public void updateApp_withApkReleaseAvailable_returnsSameApkTask() {
475
482
476
483
assertEquals (updateTask , updateTaskToReturn );
477
484
}
485
+
486
+ private AlertDialog verifyUpdateAlertDialog () {
487
+ assertTrue (ShadowAlertDialog .getLatestDialog () instanceof AlertDialog );
488
+ AlertDialog dialog = (AlertDialog ) ShadowAlertDialog .getLatestDialog ();
489
+ assertTrue (dialog .isShowing ());
490
+
491
+ return dialog ;
492
+ }
478
493
}
0 commit comments