Browse Source

Use LaunchedEffect and improve test

pull/2806/head
Valere 5 months ago
parent
commit
a8f5c8db39
  1. 2
      appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt
  2. 27
      appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt

2
appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt

@ -71,7 +71,9 @@ class LoggedInPresenter @Inject constructor(
} }
val verificationState by sessionVerificationService.sessionVerifiedStatus.collectAsState() val verificationState by sessionVerificationService.sessionVerifiedStatus.collectAsState()
val recoveryState by encryptionService.recoveryStateStateFlow.collectAsState() val recoveryState by encryptionService.recoveryStateStateFlow.collectAsState()
LaunchedEffect(verificationState, recoveryState) {
reportCryptoStatusToAnalytics(verificationState, recoveryState) reportCryptoStatusToAnalytics(verificationState, recoveryState)
}
return LoggedInState( return LoggedInState(
showSyncSpinner = showSyncSpinner, showSyncSpinner = showSyncSpinner,

27
appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt

@ -73,10 +73,11 @@ class LoggedInPresenterTest {
@Test @Test
fun `present - report crypto status analytics`() = runTest { fun `present - report crypto status analytics`() = runTest {
val analyticsService = FakeAnalyticsService() val analyticsService = FakeAnalyticsService()
val roomListService = FakeRoomListService()
val verificationService = FakeSessionVerificationService() val verificationService = FakeSessionVerificationService()
val encryptionService = FakeEncryptionService() val encryptionService = FakeEncryptionService()
val presenter = LoggedInPresenter( val presenter = LoggedInPresenter(
matrixClient = FakeMatrixClient(encryptionService = encryptionService), matrixClient = FakeMatrixClient(roomListService = roomListService, encryptionService = encryptionService),
networkMonitor = FakeNetworkMonitor(NetworkStatus.Online), networkMonitor = FakeNetworkMonitor(NetworkStatus.Online),
pushService = FakePushService(), pushService = FakePushService(),
sessionVerificationService = verificationService, sessionVerificationService = verificationService,
@ -90,17 +91,19 @@ class LoggedInPresenterTest {
encryptionService.emitRecoveryState(RecoveryState.INCOMPLETE) encryptionService.emitRecoveryState(RecoveryState.INCOMPLETE)
verificationService.emitVerifiedStatus(SessionVerifiedStatus.Verified) verificationService.emitVerifiedStatus(SessionVerifiedStatus.Verified)
// Should only capture once (not report while checking state -like unknown-) skipItems(4)
consumeItemsUntilPredicate {
analyticsService.capturedEvents.size == 1 && assertThat(analyticsService.capturedEvents.size).isEqualTo(1)
analyticsService.capturedEvents[0] is CryptoSessionStateChange assertThat(analyticsService.capturedEvents[0]).isInstanceOf(CryptoSessionStateChange::class.java)
}
consumeItemsUntilPredicate { assertThat(analyticsService.capturedUserProperties.size).isEqualTo(1)
analyticsService.capturedUserProperties.size == 1 && assertThat(analyticsService.capturedUserProperties[0].recoveryState).isEqualTo(UserProperties.RecoveryState.Incomplete)
analyticsService.capturedUserProperties[0].recoveryState == UserProperties.RecoveryState.Incomplete && assertThat(analyticsService.capturedUserProperties[0].verificationState).isEqualTo(UserProperties.VerificationState.Verified)
analyticsService.capturedUserProperties[0].verificationState == UserProperties.VerificationState.Verified
} // ensure a sync status change does not trigger a new capture
cancelAndConsumeRemainingEvents() roomListService.postSyncIndicator(RoomListService.SyncIndicator.Show)
skipItems(1)
assertThat(analyticsService.capturedEvents.size).isEqualTo(1)
} }
} }

Loading…
Cancel
Save