Loading app/ui/legacy/src/test/java/com/fsck/k9/ui/settings/general/GeneralSettingsViewModelTest.kt +40 −43 Original line number Diff line number Diff line Loading @@ -12,12 +12,11 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.take import kotlinx.coroutines.flow.toList import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.test.TestCoroutineDispatcher import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain import kotlinx.coroutines.withTimeout import org.junit.After import org.junit.Before import org.junit.Test Loading @@ -28,7 +27,7 @@ class GeneralSettingsViewModelTest { private val logFileWriter = TestLogFileWriter() private val contentUri = mock<Uri>() private val viewModel = GeneralSettingsViewModel(logFileWriter) private val testCoroutineDispatcher = TestCoroutineDispatcher() private val testCoroutineDispatcher = StandardTestDispatcher() @Before fun setUp() { Loading @@ -41,22 +40,21 @@ class GeneralSettingsViewModelTest { } @Test fun `export logs without errors`() = runBlocking { fun `export logs without errors`() = runTest { viewModel.uiState.test { viewModel.exportLogs(contentUri) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Success) testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } @Test fun `export logs with consumer changing while LogFileWriter_writeLogTo is running`() = runBlocking { withTimeout(timeMillis = 1000L) { fun `export logs with consumer changing while LogFileWriter_writeLogTo is running`() = runTest { logFileWriter.shouldWait() val mutex = Mutex(locked = true) Loading Loading @@ -88,15 +86,14 @@ class GeneralSettingsViewModelTest { assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) logFileWriter.resume() assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Success) testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } } @Test fun `export logs with IOException`() = runBlocking { fun `export logs with IOException`() = runTest { logFileWriter.exception = IOException() viewModel.uiState.test { Loading @@ -105,14 +102,14 @@ class GeneralSettingsViewModelTest { assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Failure) testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } @Test fun `export logs with IllegalStateException`() = runBlocking { fun `export logs with IllegalStateException`() = runTest { logFileWriter.exception = IllegalStateException() viewModel.uiState.test { Loading @@ -121,8 +118,8 @@ class GeneralSettingsViewModelTest { assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Failure) testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } Loading build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ buildscript { 'mockito': '4.6.1', 'mockitoKotlin': '4.0.0', 'truth': '1.1.3', 'turbine': '0.7.0', 'turbine': '0.9.0', 'ktlint': '0.40.0' ] Loading Loading
app/ui/legacy/src/test/java/com/fsck/k9/ui/settings/general/GeneralSettingsViewModelTest.kt +40 −43 Original line number Diff line number Diff line Loading @@ -12,12 +12,11 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.take import kotlinx.coroutines.flow.toList import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.test.TestCoroutineDispatcher import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain import kotlinx.coroutines.withTimeout import org.junit.After import org.junit.Before import org.junit.Test Loading @@ -28,7 +27,7 @@ class GeneralSettingsViewModelTest { private val logFileWriter = TestLogFileWriter() private val contentUri = mock<Uri>() private val viewModel = GeneralSettingsViewModel(logFileWriter) private val testCoroutineDispatcher = TestCoroutineDispatcher() private val testCoroutineDispatcher = StandardTestDispatcher() @Before fun setUp() { Loading @@ -41,22 +40,21 @@ class GeneralSettingsViewModelTest { } @Test fun `export logs without errors`() = runBlocking { fun `export logs without errors`() = runTest { viewModel.uiState.test { viewModel.exportLogs(contentUri) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Success) testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } @Test fun `export logs with consumer changing while LogFileWriter_writeLogTo is running`() = runBlocking { withTimeout(timeMillis = 1000L) { fun `export logs with consumer changing while LogFileWriter_writeLogTo is running`() = runTest { logFileWriter.shouldWait() val mutex = Mutex(locked = true) Loading Loading @@ -88,15 +86,14 @@ class GeneralSettingsViewModelTest { assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) logFileWriter.resume() assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Success) testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } } @Test fun `export logs with IOException`() = runBlocking { fun `export logs with IOException`() = runTest { logFileWriter.exception = IOException() viewModel.uiState.test { Loading @@ -105,14 +102,14 @@ class GeneralSettingsViewModelTest { assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Failure) testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } @Test fun `export logs with IllegalStateException`() = runBlocking { fun `export logs with IllegalStateException`() = runTest { logFileWriter.exception = IllegalStateException() viewModel.uiState.test { Loading @@ -121,8 +118,8 @@ class GeneralSettingsViewModelTest { assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Exporting) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Failure) testCoroutineDispatcher.advanceTimeBy(GeneralSettingsViewModel.SNACKBAR_DURATION) assertThat(awaitItem()).isEqualTo(GeneralSettingsUiState.Idle) testCoroutineDispatcher.scheduler.advanceUntilIdle() assertThat(cancelAndConsumeRemainingEvents()).isEmpty() } } Loading
build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ buildscript { 'mockito': '4.6.1', 'mockitoKotlin': '4.0.0', 'truth': '1.1.3', 'turbine': '0.7.0', 'turbine': '0.9.0', 'ktlint': '0.40.0' ] Loading