summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAleksandr Granin <aleksandr@mullvad.net>2021-03-31 18:08:14 +0200
committerAleksandr Granin <aleksandr@mullvad.net>2021-04-01 13:30:37 +0200
commit818a60da2ae1df45dc7d522bc244aeb9700e346e (patch)
tree594f02a6eeb741a267ace7eb0970eabb92d467f9
parent3308421996fd57cc4e8670f7d28bb3bc0e4af205 (diff)
downloadmullvadvpn-818a60da2ae1df45dc7d522bc244aeb9700e346e.tar.xz
mullvadvpn-818a60da2ae1df45dc7d522bc244aeb9700e346e.zip
Remove Deferred from ApplicationsProvider
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt8
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt2
-rw-r--r--android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt5
-rw-r--r--android/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModelTest.kt53
4 files changed, 30 insertions, 38 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt
index 182d6608fd..a097ffd231 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt
@@ -3,8 +3,6 @@ package net.mullvad.mullvadvpn.applist
import android.Manifest
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
-import kotlinx.coroutines.CompletableDeferred
-import kotlinx.coroutines.Deferred
class ApplicationsProvider(
private val packageManager: PackageManager,
@@ -16,15 +14,15 @@ class ApplicationsProvider(
!isSelfApplication(appInfo.packageName)
}
- fun getAppsList(): Deferred<List<AppData>> = CompletableDeferred(
- packageManager.getInstalledApplications(PackageManager.GET_META_DATA)
+ fun getAppsList(): List<AppData> {
+ return packageManager.getInstalledApplications(PackageManager.GET_META_DATA)
.asSequence()
.filter(applicationFilterPredicate)
.map { info ->
AppData(info.packageName, info.icon, info.loadLabel(packageManager).toString())
}
.toList()
- )
+ }
private fun hasInternetPermission(packageName: String): Boolean {
return PackageManager.PERMISSION_GRANTED ==
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt
index 9ce3254f63..98730de960 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt
@@ -91,7 +91,7 @@ class SplitTunnelingViewModel(
}
private suspend fun fetchData() {
- appsProvider.getAppsList().await()
+ appsProvider.getAppsList()
.partition { app -> splitTunneling.excludedAppList.contains(app.packageName) }
.let { (excludedAppsList, notExcludedAppsList) ->
// TODO: remove potential package names from splitTunneling list
diff --git a/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt b/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt
index 93aee6d897..689047e565 100644
--- a/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt
+++ b/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt
@@ -7,7 +7,6 @@ import io.mockk.every
import io.mockk.mockk
import io.mockk.unmockkAll
import io.mockk.verifyAll
-import kotlinx.coroutines.test.runBlockingTest
import net.mullvad.mullvadvpn.assertLists
import org.junit.After
import org.junit.Test
@@ -24,7 +23,7 @@ class ApplicationsProviderTest {
}
@Test
- fun test_get_apps() = runBlockingTest {
+ fun test_get_apps() {
val launchWithInternetPackageName = "launch_with_internet_package_name"
val launchWithoutInternetPackageName = "launch_without_internet_package_name"
val nonLaunchWithInternetPackageName = "non_launch_with_internet_package_name"
@@ -40,7 +39,7 @@ class ApplicationsProviderTest {
createApplicationInfo(selfPackageName, internet = true, launch = true)
)
- val result = testSubject.getAppsList().await()
+ val result = testSubject.getAppsList()
val expected = listOf(
AppData(launchWithInternetPackageName, 0, launchWithInternetPackageName)
)
diff --git a/android/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModelTest.kt b/android/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModelTest.kt
index 903ae9f874..4bfd98f9da 100644
--- a/android/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModelTest.kt
+++ b/android/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModelTest.kt
@@ -3,7 +3,6 @@ package net.mullvad.mullvadvpn.viewmodel
import androidx.annotation.StringRes
import androidx.lifecycle.viewModelScope
import io.mockk.Runs
-import io.mockk.coEvery
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
@@ -11,10 +10,8 @@ import io.mockk.unmockkAll
import io.mockk.verify
import io.mockk.verifyAll
import java.util.concurrent.TimeUnit
-import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.first
-import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runBlockingTest
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.TestCoroutineRule
@@ -39,18 +36,11 @@ class SplitTunnelingViewModelTest {
val timeout = Timeout(3000L, TimeUnit.MILLISECONDS)
private val mockedApplicationsProvider = mockk<ApplicationsProvider>()
private val mockedSplitTunneling = mockk<SplitTunneling>()
- private val appsProviderDeferred = CompletableDeferred<List<AppData>>()
private lateinit var testSubject: SplitTunnelingViewModel
@Before
fun setup() {
every { mockedSplitTunneling.enabled } returns true
- coEvery { mockedApplicationsProvider.getAppsList() } returns appsProviderDeferred
- testSubject = SplitTunnelingViewModel(
- mockedApplicationsProvider,
- mockedSplitTunneling,
- testCoroutineRule.testDispatcher
- )
}
@After
@@ -60,27 +50,26 @@ class SplitTunnelingViewModelTest {
}
@Test
- fun test_has_progress_on_start() {
- runBlocking(testCoroutineRule.testDispatcher) {
- val actualList: List<ListItemData> = testSubject.listItems.first()
+ fun test_has_progress_on_start() = runBlockingTest(testCoroutineRule.testDispatcher) {
+ initTestSubject(emptyList())
+ val actualList: List<ListItemData> = testSubject.listItems.first()
- val initialExpectedList = listOf(
- createTextItem(R.string.split_tunneling_description),
- createDivider(0), createProgressItem()
- )
+ val initialExpectedList = listOf(
+ createTextItem(R.string.split_tunneling_description),
+ createDivider(0),
+ createProgressItem()
+ )
- assertLists(initialExpectedList, actualList)
+ assertLists(initialExpectedList, actualList)
- verify(exactly = 1) {
- mockedApplicationsProvider.getAppsList()
- }
+ verify(exactly = 1) {
+ mockedApplicationsProvider.getAppsList()
}
}
@Test
fun test_empty_app_list() = runBlockingTest(testCoroutineRule.testDispatcher) {
- testCoroutineRule.testDispatcher.advanceUntilIdle()
- appsProviderDeferred.complete(emptyList())
+ initTestSubject(emptyList())
testSubject.processIntent(ViewIntent.ViewIsReady)
val actualList = testSubject.listItems.first()
val expectedList = listOf(createTextItem(R.string.split_tunneling_description))
@@ -93,7 +82,7 @@ class SplitTunnelingViewModelTest {
val appNotExcluded = AppData("test.not.excluded", 0, "testName2")
every { mockedSplitTunneling.excludedAppList } returns listOf(appExcluded.packageName)
- appsProviderDeferred.complete(listOf(appExcluded, appNotExcluded))
+ initTestSubject(listOf(appExcluded, appNotExcluded))
testSubject.processIntent(ViewIntent.ViewIsReady)
val actualList = testSubject.listItems.first()
@@ -111,10 +100,7 @@ class SplitTunnelingViewModelTest {
verifyAll {
mockedSplitTunneling.enabled
mockedSplitTunneling.excludedAppList
- mockedSplitTunneling.excludedAppList
}
-
- testSubject.viewModelScope.coroutineContext.cancel()
}
@Test
@@ -123,7 +109,7 @@ class SplitTunnelingViewModelTest {
every { mockedSplitTunneling.excludedAppList } returns listOf(app.packageName)
every { mockedSplitTunneling.includeApp(app.packageName) } just Runs
- appsProviderDeferred.complete(listOf(app))
+ initTestSubject(listOf(app))
testSubject.processIntent(ViewIntent.ViewIsReady)
val listBeforeAction = testSubject.listItems.first()
@@ -161,8 +147,8 @@ class SplitTunnelingViewModelTest {
val app = AppData("test", 0, "testName")
every { mockedSplitTunneling.excludedAppList } returns emptyList()
every { mockedSplitTunneling.excludeApp(app.packageName) } just Runs
+ initTestSubject(listOf(app))
testSubject.processIntent(ViewIntent.ViewIsReady)
- appsProviderDeferred.complete(listOf(app))
val listBeforeAction = testSubject.listItems.first()
val expectedListBeforeAction = listOf(
@@ -194,6 +180,15 @@ class SplitTunnelingViewModelTest {
}
}
+ private fun initTestSubject(appList: List<AppData>) {
+ every { mockedApplicationsProvider.getAppsList() } returns appList
+ testSubject = SplitTunnelingViewModel(
+ mockedApplicationsProvider,
+ mockedSplitTunneling,
+ testCoroutineRule.testDispatcher
+ )
+ }
+
private fun createApplicationItem(
appData: AppData,
checked: Boolean