summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/test
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2022-11-18 10:41:10 +0100
committerAlbin <albin@mullvad.net>2022-11-18 10:41:10 +0100
commit0c2399a4c77db5707b022588b1e1b75aa8c4d483 (patch)
tree2b4af5f4fca2cf46ed3cf5060e17786dfe27efd7 /android/app/src/test
parent499c06decda37dc639e5f944f98eff422a7e6131 (diff)
parent678c2abac8641416cb34e389965525f8f78ab945 (diff)
downloadmullvadvpn-0c2399a4c77db5707b022588b1e1b75aa8c4d483.tar.xz
mullvadvpn-0c2399a4c77db5707b022588b1e1b75aa8c4d483.zip
Merge branch 'show-changes-after-upgrade'
Diffstat (limited to 'android/app/src/test')
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ChangelogViewModelTest.kt97
1 files changed, 97 insertions, 0 deletions
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ChangelogViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ChangelogViewModelTest.kt
new file mode 100644
index 0000000000..eafac23bfc
--- /dev/null
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ChangelogViewModelTest.kt
@@ -0,0 +1,97 @@
+package net.mullvad.mullvadvpn.viewmodel
+
+import app.cash.turbine.test
+import io.mockk.MockKAnnotations
+import io.mockk.Runs
+import io.mockk.every
+import io.mockk.impl.annotations.MockK
+import io.mockk.just
+import io.mockk.mockkStatic
+import io.mockk.unmockkAll
+import io.mockk.verify
+import junit.framework.Assert
+import kotlin.test.assertEquals
+import kotlinx.coroutines.test.runBlockingTest
+import net.mullvad.mullvadvpn.repository.ChangelogRepository
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+
+class ChangelogViewModelTest {
+
+ @MockK
+ private lateinit var mockedChangelogRepository: ChangelogRepository
+
+ private lateinit var viewModel: ChangelogViewModel
+
+ @Before
+ fun setup() {
+ MockKAnnotations.init(this)
+ mockkStatic(EVENT_NOTIFIER_EXTENSION_CLASS)
+ every {
+ mockedChangelogRepository.setVersionCodeOfMostRecentChangelogShowed(any())
+ } just Runs
+ viewModel = ChangelogViewModel(mockedChangelogRepository, 1, false)
+ }
+
+ @After
+ fun teardown() {
+ unmockkAll()
+ }
+
+ @Test
+ fun testInitialState() = runBlockingTest {
+ // Arrange, Act, Assert
+ viewModel.changelogDialogUiState.test {
+ Assert.assertEquals(ChangelogDialogUiState.Hide, awaitItem())
+ }
+ }
+
+ @Test
+ fun testShowAndDismissChangelogDialog() = runBlockingTest {
+ viewModel.changelogDialogUiState.test {
+ // Arrange
+ val fakeList = listOf("test")
+ every {
+ mockedChangelogRepository.getVersionCodeOfMostRecentChangelogShowed()
+ } returns -1
+ every { mockedChangelogRepository.getLastVersionChanges() } returns fakeList
+
+ // Assert initial ui state
+ assertEquals(ChangelogDialogUiState.Hide, awaitItem())
+
+ // Refresh and verify that the dialog should be shown
+ viewModel.refreshChangelogDialogUiState()
+ assertEquals(ChangelogDialogUiState.Show(fakeList), awaitItem())
+
+ // Dismiss dialog and verify that the dialog should be hidden
+ viewModel.dismissChangelogDialog()
+ assertEquals(ChangelogDialogUiState.Hide, awaitItem())
+ verify { mockedChangelogRepository.setVersionCodeOfMostRecentChangelogShowed(1) }
+ }
+ }
+
+ @Test
+ fun testShowCaseChangelogWithEmptyListDialog() = runBlockingTest {
+ viewModel.changelogDialogUiState.test {
+ // Arrange
+ val fakeEmptyList = emptyList<String>()
+ every {
+ mockedChangelogRepository.getVersionCodeOfMostRecentChangelogShowed()
+ } returns -1
+ every { mockedChangelogRepository.getLastVersionChanges() } returns fakeEmptyList
+
+ // Assert initial ui state
+ assertEquals(ChangelogDialogUiState.Hide, awaitItem())
+
+ // Refresh and verify that the Ui state remain same due list being empty
+ viewModel.refreshChangelogDialogUiState()
+ expectNoEvents()
+ }
+ }
+
+ companion object {
+ private const val EVENT_NOTIFIER_EXTENSION_CLASS =
+ "net.mullvad.talpid.util.EventNotifierExtensionsKt"
+ }
+}