diff options
| author | David Göransson <david.goransson90@gmail.com> | 2023-09-27 12:11:26 +0200 |
|---|---|---|
| committer | David Göransson <david.goransson90@gmail.com> | 2023-10-04 09:19:41 +0200 |
| commit | e3ed0ac859542dfe048b4434c84b2b356ea560d4 (patch) | |
| tree | 64a40b6ad09e3c47651590c50ac77a3524345fa4 /android/app/src/test | |
| parent | e6b30e63580b285d9f826c023a2d7fb6b5cba69c (diff) | |
| download | mullvadvpn-e3ed0ac859542dfe048b4434c84b2b356ea560d4.tar.xz mullvadvpn-e3ed0ac859542dfe048b4434c84b2b356ea560d4.zip | |
Add report problem test
Diffstat (limited to 'android/app/src/test')
| -rw-r--r-- | android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ReportProblemModelTest.kt | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ReportProblemModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ReportProblemModelTest.kt new file mode 100644 index 0000000000..4f91189d0a --- /dev/null +++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ReportProblemModelTest.kt @@ -0,0 +1,117 @@ +package net.mullvad.mullvadvpn.viewmodel + +import androidx.lifecycle.viewModelScope +import app.cash.turbine.test +import io.mockk.MockKAnnotations +import io.mockk.coEvery +import io.mockk.impl.annotations.MockK +import kotlin.test.assertEquals +import kotlinx.coroutines.cancel +import kotlinx.coroutines.test.runTest +import net.mullvad.mullvadvpn.dataproxy.MullvadProblemReport +import net.mullvad.mullvadvpn.dataproxy.SendProblemReportResult +import net.mullvad.mullvadvpn.lib.common.test.TestCoroutineRule +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.Test + +class ReportProblemModelTest { + @get:Rule val testCoroutineRule = TestCoroutineRule() + + @MockK private lateinit var mockMullvadProblemReport: MullvadProblemReport + + private lateinit var viewModel: ReportProblemViewModel + + @Before + fun setUp() { + MockKAnnotations.init(this) + coEvery { mockMullvadProblemReport.collectLogs() } returns true + viewModel = ReportProblemViewModel(mockMullvadProblemReport) + } + + @After + fun tearDown() { + viewModel.viewModelScope.coroutineContext.cancel() + } + + @Test + fun sendReportFailedToCollectLogs() = runTest { + // Arrange + coEvery { mockMullvadProblemReport.sendReport(any()) } returns + SendProblemReportResult.Error.CollectLog + val email = "my@email.com" + + // Act, Assert + viewModel.uiState.test { + assertEquals(null, awaitItem().sendingState) + viewModel.sendReport(email, "My description") + assertEquals(SendingReportUiState.Sending, awaitItem().sendingState) + assertEquals( + SendingReportUiState.Error(SendProblemReportResult.Error.CollectLog), + awaitItem().sendingState + ) + } + } + + @Test + fun sendReportFailedToSendReport() = runTest { + // Arrange + coEvery { mockMullvadProblemReport.sendReport(any()) } returns + SendProblemReportResult.Error.SendReport + val email = "my@email.com" + + // Act, Assert + viewModel.uiState.test { + assertEquals(null, awaitItem().sendingState) + viewModel.sendReport(email, "My description") + assertEquals(SendingReportUiState.Sending, awaitItem().sendingState) + assertEquals( + SendingReportUiState.Error(SendProblemReportResult.Error.SendReport), + awaitItem().sendingState + ) + } + } + + @Test + fun sendReportWithoutEmailSuccessfully() = runTest { + // Arrange + coEvery { mockMullvadProblemReport.sendReport(any()) } returns + SendProblemReportResult.Success + val email = "" + + // Act, Assert + viewModel.uiState.test { + assertEquals(ReportProblemUiState(false, null), awaitItem()) + viewModel.sendReport(email, "My description") + assertEquals(ReportProblemUiState(true, null), awaitItem()) + viewModel.sendReport(email, "My description") + assertEquals(ReportProblemUiState(false, SendingReportUiState.Sending), awaitItem()) + assertEquals( + ReportProblemUiState(false, SendingReportUiState.Success(null)), + awaitItem() + ) + } + } + + @Test + fun sendReportSuccessfully() = runTest { + // Arrange + coEvery { mockMullvadProblemReport.collectLogs() } returns true + coEvery { mockMullvadProblemReport.sendReport(any()) } returns + SendProblemReportResult.Success + val email = "my@email.com" + + // Act, Assert + viewModel.uiState.test { + assertEquals(awaitItem(), ReportProblemUiState(false, null)) + viewModel.sendReport(email, "My description") + + assertEquals(awaitItem(), ReportProblemUiState(false, SendingReportUiState.Sending)) + assertEquals( + awaitItem(), + ReportProblemUiState(false, SendingReportUiState.Success(email)) + ) + } + } +} |
