@@ -500,6 +500,65 @@ public void testFidListener_fidChanged_successful() throws Exception {
500500 assertNull (fidListener2 .getLatestFid ());
501501 }
502502
503+ @ Test
504+ public void testFidListener_fidRegistered_sameFid_successful () throws Exception {
505+ when (mockIidStore .readIid ()).thenReturn (null );
506+ when (mockIidStore .readToken ()).thenReturn (null );
507+ when (mockBackend .createFirebaseInstallation (
508+ anyString (), anyString (), anyString (), anyString (), any ()))
509+ .thenReturn (TEST_INSTALLATION_RESPONSE );
510+
511+ FakeFidListener fidListener = new FakeFidListener ();
512+
513+ // Register the FidListener
514+ firebaseInstallations .registerFidListener (fidListener );
515+
516+ // Do the actual getId() call under test.
517+ TestOnCompleteListener <String > onCompleteListener = new TestOnCompleteListener <>();
518+ Task <String > task = firebaseInstallations .getId ();
519+
520+ task .addOnCompleteListener (backgroundExecutor , onCompleteListener );
521+ String fid = onCompleteListener .await ();
522+ assertWithMessage ("getId Task failed." ).that (fid ).isEqualTo (TEST_FID_1 );
523+
524+ // Waiting for Task that registers FID on the FIS Servers
525+ backgroundExecutor .awaitTermination (500 , TimeUnit .MILLISECONDS );
526+ PersistedInstallationEntry entry = persistedInstallation .readPersistedInstallationEntryValue ();
527+ assertThat (entry .getFirebaseInstallationId ()).isEqualTo (TEST_FID_1 );
528+
529+ // Verify FidListener receives fid registration notification.
530+ assertThat (fidListener .getLatestFid ()).isEqualTo (TEST_FID_1 );
531+ }
532+
533+ @ Test
534+ public void testFidListener_alreadyRegistered_noFidChange_notNotified () throws Exception {
535+ persistedInstallation .insertOrUpdatePersistedInstallationEntry (
536+ PersistedInstallationEntry .INSTANCE .withRegisteredFid (
537+ TEST_FID_1 ,
538+ TEST_REFRESH_TOKEN ,
539+ utils .currentTimeInSecs (),
540+ TEST_AUTH_TOKEN ,
541+ TEST_TOKEN_EXPIRATION_TIMESTAMP ));
542+
543+ FakeFidListener fidListener = new FakeFidListener ();
544+
545+ // Register the FidListener
546+ firebaseInstallations .registerFidListener (fidListener );
547+
548+ // Do the actual getId() call under test.
549+ TestOnCompleteListener <String > onCompleteListener = new TestOnCompleteListener <>();
550+ Task <String > task = firebaseInstallations .getId ();
551+ task .addOnCompleteListener (backgroundExecutor , onCompleteListener );
552+ String fid = onCompleteListener .await ();
553+ assertWithMessage ("getId Task failed." ).that (fid ).isEqualTo (TEST_FID_1 );
554+
555+ backgroundExecutor .awaitTermination (500 , TimeUnit .MILLISECONDS );
556+
557+ // Verify FidListener does not receive any notification since the FID was already registered
558+ // and didn't change.
559+ assertNull (fidListener .getLatestFid ());
560+ }
561+
503562 @ Test
504563 public void testGetId_migrateIid_successful () throws Exception {
505564 when (mockIidStore .readIid ()).thenReturn (TEST_INSTANCE_ID_1 );
0 commit comments