@@ -234,48 +234,28 @@ 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
+ updateToNewRelease (TEST_RELEASE_NEWER_AAB_INTERNAL .build ());
244
238
245
- firebaseAppDistribution .updateIfNewReleaseAvailable ();
246
-
247
- // Update flow
248
- verify (mockTesterSignInClient , times (1 )).signInTester ();
249
- assertTrue (ShadowAlertDialog .getLatestDialog () instanceof AlertDialog );
250
- AlertDialog updateDialog = (AlertDialog ) ShadowAlertDialog .getLatestDialog ();
239
+ AlertDialog dialog = verifyUpdateAlertDialog ();
251
240
assertEquals (
252
241
String .format (
253
242
"Version %s (%s) is available.\n \n Release notes: %s" ,
254
243
TEST_RELEASE_NEWER_AAB .getDisplayVersion (),
255
244
TEST_RELEASE_NEWER_AAB .getVersionCode (),
256
245
TEST_RELEASE_NEWER_AAB .getReleaseNotes ()),
257
- shadowOf (updateDialog ).getMessage ().toString ());
258
- assertTrue (updateDialog .isShowing ());
246
+ shadowOf (dialog ).getMessage ().toString ());
259
247
}
260
248
261
249
@ Test
262
250
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 );
251
+ updateToNewRelease (TEST_RELEASE_NEWER_AAB_INTERNAL .setReleaseNotes ("" ).build ());
268
252
269
- firebaseAppDistribution .updateIfNewReleaseAvailable ();
270
-
271
- // Update flow
272
- assertTrue (ShadowAlertDialog .getLatestDialog () instanceof AlertDialog );
273
- AlertDialog updateDialog = (AlertDialog ) ShadowAlertDialog .getLatestDialog ();
253
+ AlertDialog dialog = verifyUpdateAlertDialog ();
274
254
assertEquals (
275
255
String .format (
276
256
"Version %s (%s) is available." ,
277
257
TEST_RELEASE_NEWER_AAB .getDisplayVersion (), TEST_RELEASE_NEWER_AAB .getVersionCode ()),
278
- shadowOf (updateDialog ).getMessage ().toString ());
258
+ shadowOf (dialog ).getMessage ().toString ());
279
259
}
280
260
281
261
@ Test
@@ -352,6 +332,34 @@ public void updateToNewRelease_whenSignInFailed_checkForUpdateNotCalled() {
352
332
assertEquals (AUTHENTICATION_FAILURE , e .getErrorCode ());
353
333
}
354
334
335
+ @ Test
336
+ public void updateToNewRelease_whenDialogDismissed_taskFails () {
337
+ UpdateTask updateTask = updateToNewRelease (TEST_RELEASE_NEWER_AAB_INTERNAL .build ());
338
+ AlertDialog updateDialog = verifyUpdateAlertDialog ();
339
+ updateDialog .getButton (AlertDialog .BUTTON_NEGATIVE ).performClick (); // dismiss dialog
340
+
341
+ assertFalse (updateDialog .isShowing ());
342
+ assertFalse (updateTask .isSuccessful ());
343
+ Exception e = updateTask .getException ();
344
+ assertTrue (e instanceof FirebaseAppDistributionException );
345
+ assertEquals (INSTALLATION_CANCELED , ((FirebaseAppDistributionException ) e ).getErrorCode ());
346
+ assertEquals (ErrorMessages .UPDATE_CANCELED , e .getMessage ());
347
+ }
348
+
349
+ @ Test
350
+ public void updateToNewRelease_whenDialogCanceled_taskFails () {
351
+ UpdateTask updateTask = updateToNewRelease (TEST_RELEASE_NEWER_AAB_INTERNAL .build ());
352
+ AlertDialog updateDialog = verifyUpdateAlertDialog ();
353
+ updateDialog .onBackPressed (); // cancels the dialog
354
+
355
+ assertFalse (updateDialog .isShowing ());
356
+ assertFalse (updateTask .isSuccessful ());
357
+ Exception e = updateTask .getException ();
358
+ assertTrue (e instanceof FirebaseAppDistributionException );
359
+ assertEquals (INSTALLATION_CANCELED , ((FirebaseAppDistributionException ) e ).getErrorCode ());
360
+ assertEquals (ErrorMessages .UPDATE_CANCELED , e .getMessage ());
361
+ }
362
+
355
363
@ Test
356
364
public void updateToNewRelease_whenCheckForUpdateFails_updateAppNotCalled () {
357
365
when (mockCheckForNewReleaseClient .checkForNewRelease ())
@@ -374,14 +382,6 @@ public void updateToNewRelease_whenCheckForUpdateFails_updateAppNotCalled() {
374
382
assertEquals (FirebaseAppDistributionException .Status .NETWORK_FAILURE , e .getErrorCode ());
375
383
}
376
384
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
385
@ Test
386
386
public void signOutTester_setsSignInStatusFalse () {
387
387
firebaseAppDistribution .signOutTester ();
@@ -475,4 +475,20 @@ public void updateApp_withApkReleaseAvailable_returnsSameApkTask() {
475
475
476
476
assertEquals (updateTask , updateTaskToReturn );
477
477
}
478
+
479
+ private UpdateTask updateToNewRelease (AppDistributionReleaseInternal newRelease ) {
480
+ when (mockSignInStorage .getSignInStatus ()).thenReturn (true );
481
+ when (mockCheckForNewReleaseClient .checkForNewRelease ()).thenReturn (Tasks .forResult (newRelease ));
482
+ firebaseAppDistribution .setCachedNewRelease (newRelease );
483
+
484
+ return firebaseAppDistribution .updateIfNewReleaseAvailable ();
485
+ }
486
+
487
+ private AlertDialog verifyUpdateAlertDialog () {
488
+ assertTrue (ShadowAlertDialog .getLatestDialog () instanceof AlertDialog );
489
+ AlertDialog dialog = (AlertDialog ) ShadowAlertDialog .getLatestDialog ();
490
+ assertTrue (dialog .isShowing ());
491
+
492
+ return dialog ;
493
+ }
478
494
}
0 commit comments