Skip to content

Commit a01e43c

Browse files
author
Rachel Prince
committed
Add tests for dialog cancellation and dismissal
1 parent 2dba16b commit a01e43c

File tree

2 files changed

+92
-49
lines changed

2 files changed

+92
-49
lines changed

firebase-app-distribution/src/test/java/com/google/firebase/app/distribution/FirebaseAppDistributionTest.java

Lines changed: 50 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -234,48 +234,28 @@ public void updateApp_whenNotSignedIn_throwsError() {
234234

235235
@Test
236236
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());
244238

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();
251240
assertEquals(
252241
String.format(
253242
"Version %s (%s) is available.\n\nRelease notes: %s",
254243
TEST_RELEASE_NEWER_AAB.getDisplayVersion(),
255244
TEST_RELEASE_NEWER_AAB.getVersionCode(),
256245
TEST_RELEASE_NEWER_AAB.getReleaseNotes()),
257-
shadowOf(updateDialog).getMessage().toString());
258-
assertTrue(updateDialog.isShowing());
246+
shadowOf(dialog).getMessage().toString());
259247
}
260248

261249
@Test
262250
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());
268252

269-
firebaseAppDistribution.updateIfNewReleaseAvailable();
270-
271-
// Update flow
272-
assertTrue(ShadowAlertDialog.getLatestDialog() instanceof AlertDialog);
273-
AlertDialog updateDialog = (AlertDialog) ShadowAlertDialog.getLatestDialog();
253+
AlertDialog dialog = verifyUpdateAlertDialog();
274254
assertEquals(
275255
String.format(
276256
"Version %s (%s) is available.",
277257
TEST_RELEASE_NEWER_AAB.getDisplayVersion(), TEST_RELEASE_NEWER_AAB.getVersionCode()),
278-
shadowOf(updateDialog).getMessage().toString());
258+
shadowOf(dialog).getMessage().toString());
279259
}
280260

281261
@Test
@@ -352,6 +332,34 @@ public void updateToNewRelease_whenSignInFailed_checkForUpdateNotCalled() {
352332
assertEquals(AUTHENTICATION_FAILURE, e.getErrorCode());
353333
}
354334

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+
355363
@Test
356364
public void updateToNewRelease_whenCheckForUpdateFails_updateAppNotCalled() {
357365
when(mockCheckForNewReleaseClient.checkForNewRelease())
@@ -374,14 +382,6 @@ public void updateToNewRelease_whenCheckForUpdateFails_updateAppNotCalled() {
374382
assertEquals(FirebaseAppDistributionException.Status.NETWORK_FAILURE, e.getErrorCode());
375383
}
376384

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-
385385
@Test
386386
public void signOutTester_setsSignInStatusFalse() {
387387
firebaseAppDistribution.signOutTester();
@@ -475,4 +475,20 @@ public void updateApp_withApkReleaseAvailable_returnsSameApkTask() {
475475

476476
assertEquals(updateTask, updateTaskToReturn);
477477
}
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+
}
478494
}

firebase-app-distribution/src/test/java/com/google/firebase/app/distribution/TesterSignInClientTest.java

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,8 @@ public void signInTester_whenDialogConfirmedAndChromeAvailable_opensCustomTab()
141141

142142
testerSignInClient.signInTester();
143143

144-
if (ShadowAlertDialog.getLatestDialog() instanceof AlertDialog) {
145-
AlertDialog dialog = (AlertDialog) ShadowAlertDialog.getLatestDialog();
146-
assertTrue(dialog.isShowing());
147-
dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
148-
}
144+
AlertDialog dialog = verifySignInAlertDialog();
145+
dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
149146

150147
verify(mockFirebaseInstallations, times(1)).getId();
151148
assertThat(shadowActivity.getNextStartedActivity().getData()).isEqualTo(Uri.parse(TEST_URL));
@@ -161,11 +158,8 @@ public void signInTester_whenDialogConfirmedAndChromeNotAvailable_opensBrowserIn
161158

162159
testerSignInClient.signInTester();
163160

164-
if (ShadowAlertDialog.getLatestDialog() instanceof AlertDialog) {
165-
AlertDialog dialog = (AlertDialog) ShadowAlertDialog.getLatestDialog();
166-
assertTrue(dialog.isShowing());
167-
dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
168-
}
161+
AlertDialog dialog = verifySignInAlertDialog();
162+
dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
169163

170164
verify(mockFirebaseInstallations, times(1)).getId();
171165
assertThat(shadowActivity.getNextStartedActivity().getData()).isEqualTo(Uri.parse(TEST_URL));
@@ -191,11 +185,8 @@ public void signInTester_whenTesterIsSignedIn_doesNotOpenDialog() {
191185
@Test
192186
public void signInTester_whenReturnFromSignIn_taskSucceeds() {
193187
Task signInTask = testerSignInClient.signInTester();
194-
if (ShadowAlertDialog.getLatestDialog() instanceof AlertDialog) {
195-
AlertDialog dialog = (AlertDialog) ShadowAlertDialog.getLatestDialog();
196-
assertTrue(dialog.isShowing());
197-
dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
198-
}
188+
AlertDialog dialog = verifySignInAlertDialog();
189+
dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
199190

200191
// Simulate re-entering app
201192
testerSignInClient.onActivityCreated(mockSignInResultActivity);
@@ -217,4 +208,40 @@ public void signInTester_whenAppReenteredDuringSignIn_taskFails() {
217208
assertEquals(AUTHENTICATION_CANCELED, ((FirebaseAppDistributionException) e).getErrorCode());
218209
assertEquals(ErrorMessages.AUTHENTICATION_CANCELED, e.getMessage());
219210
}
211+
212+
@Test
213+
public void signInTester_whenDialogDismissed_taskFails() {
214+
Task signInTask = testerSignInClient.signInTester();
215+
216+
AlertDialog dialog = verifySignInAlertDialog();
217+
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).performClick(); // dismiss dialog
218+
219+
assertFalse(signInTask.isSuccessful());
220+
Exception e = signInTask.getException();
221+
assertTrue(e instanceof FirebaseAppDistributionException);
222+
assertEquals(AUTHENTICATION_CANCELED, ((FirebaseAppDistributionException) e).getErrorCode());
223+
assertEquals(ErrorMessages.AUTHENTICATION_CANCELED, e.getMessage());
224+
}
225+
226+
@Test
227+
public void signInTester_whenDialogCanceled_taskFails() {
228+
Task signInTask = testerSignInClient.signInTester();
229+
230+
AlertDialog dialog = verifySignInAlertDialog();
231+
dialog.onBackPressed(); // cancel dialog
232+
233+
assertFalse(signInTask.isSuccessful());
234+
Exception e = signInTask.getException();
235+
assertTrue(e instanceof FirebaseAppDistributionException);
236+
assertEquals(AUTHENTICATION_CANCELED, ((FirebaseAppDistributionException) e).getErrorCode());
237+
assertEquals(ErrorMessages.AUTHENTICATION_CANCELED, e.getMessage());
238+
}
239+
240+
private AlertDialog verifySignInAlertDialog() {
241+
assertTrue(ShadowAlertDialog.getLatestDialog() instanceof AlertDialog);
242+
AlertDialog dialog = (AlertDialog) ShadowAlertDialog.getLatestDialog();
243+
assertTrue(dialog.isShowing());
244+
245+
return dialog;
246+
}
220247
}

0 commit comments

Comments
 (0)