Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc866692 authored by Aleksander Morgado's avatar Aleksander Morgado
Browse files

Added unit test for MobileNetworkImeiPreferenceController visibility

The new test checks whether the item is available when the
SubscriptionUtil.isSimHardwareVisible() method returns true, i.e. if
the config_show_sim_info boolean flag is true on non-test runtime.

The default visibility status for all tests is defined in the test
setup() method.

Bug: 395714454
Flag: EXEMPT test only
Test: atest MobileNetworkImeiPreferenceControllerTest

Change-Id: Iaa8be041f0299ac36d532ed68fdc9c30e5690b11
parent 4f4580e5
Loading
Loading
Loading
Loading
+50 −12
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings.network.telephony
package com.android.settings.network.telephony


import android.content.Context
import android.content.Context
import android.os.UserManager
import android.telephony.SubscriptionInfo
import android.telephony.SubscriptionInfo
import android.telephony.TelephonyManager
import android.telephony.TelephonyManager
import androidx.fragment.app.Fragment
import androidx.fragment.app.Fragment
@@ -29,6 +30,7 @@ import com.android.settings.R
import com.android.settings.core.BasePreferenceController
import com.android.settings.core.BasePreferenceController
import com.android.settings.network.SubscriptionInfoListViewModel
import com.android.settings.network.SubscriptionInfoListViewModel
import com.android.settings.network.SubscriptionUtil
import com.android.settings.network.SubscriptionUtil
import com.android.settingslib.Utils
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.After
@@ -48,6 +50,8 @@ import org.mockito.quality.Strictness
class MobileNetworkImeiPreferenceControllerTest {
class MobileNetworkImeiPreferenceControllerTest {
    private lateinit var mockSession: MockitoSession
    private lateinit var mockSession: MockitoSession


    private val mockUserManager = mock<UserManager>()

    private val mockViewModels =  mock<Lazy<SubscriptionInfoListViewModel>>()
    private val mockViewModels =  mock<Lazy<SubscriptionInfoListViewModel>>()
    private val mockFragment = mock<Fragment>{
    private val mockFragment = mock<Fragment>{
        val viewmodel = mockViewModels
        val viewmodel = mockViewModels
@@ -66,6 +70,7 @@ class MobileNetworkImeiPreferenceControllerTest {


    private val context: Context = spy(ApplicationProvider.getApplicationContext()) {
    private val context: Context = spy(ApplicationProvider.getApplicationContext()) {
        on { getSystemService(TelephonyManager::class.java) } doReturn mockTelephonyManager
        on { getSystemService(TelephonyManager::class.java) } doReturn mockTelephonyManager
        on { getSystemService(UserManager::class.java) } doReturn mockUserManager
    }
    }


    private val controller = MobileNetworkImeiPreferenceController(context, TEST_KEY)
    private val controller = MobileNetworkImeiPreferenceController(context, TEST_KEY)
@@ -77,9 +82,17 @@ class MobileNetworkImeiPreferenceControllerTest {
        mockSession = ExtendedMockito.mockitoSession()
        mockSession = ExtendedMockito.mockitoSession()
            .initMocks(this)
            .initMocks(this)
            .mockStatic(SubscriptionUtil::class.java)
            .mockStatic(SubscriptionUtil::class.java)
            .mockStatic(Utils::class.java)
            .strictness(Strictness.LENIENT)
            .strictness(Strictness.LENIENT)
            .startMocking()
            .startMocking()


        // By default, available
        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true)
        whenever(Utils.isWifiOnly(context)).thenReturn(false)
        mockUserManager.stub {
            on { isAdminUser } doReturn true
        }

        preferenceScreen.addPreference(preference)
        preferenceScreen.addPreference(preference)
        controller.displayPreference(preferenceScreen)
        controller.displayPreference(preferenceScreen)
    }
    }
@@ -91,15 +104,13 @@ class MobileNetworkImeiPreferenceControllerTest {


    @Test
    @Test
    fun refreshData_getImei_preferenceSummaryIsExpected() = runBlocking {
    fun refreshData_getImei_preferenceSummaryIsExpected() = runBlocking {
        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true)
        whenever(SubscriptionUtil.getActiveSubscriptions(any())).thenReturn(
        whenever(SubscriptionUtil.getActiveSubscriptions(any())).thenReturn(
            listOf(
            listOf(
                SUB_INFO_1,
                SUB_INFO_1,
                SUB_INFO_2
                SUB_INFO_2
            )
            )
        )
        )
        var mockSubId = 2
        controller.init(mockFragment, SUB_ID_1)
        controller.init(mockFragment, mockSubId)
        mockImei = "test imei"
        mockImei = "test imei"
        mockTelephonyManager.stub {
        mockTelephonyManager.stub {
            on { imei } doReturn mockImei
            on { imei } doReturn mockImei
@@ -112,15 +123,13 @@ class MobileNetworkImeiPreferenceControllerTest {


    @Test
    @Test
    fun refreshData_getImeiTitle_showImei() = runBlocking {
    fun refreshData_getImeiTitle_showImei() = runBlocking {
        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true)
        whenever(SubscriptionUtil.getActiveSubscriptions(any())).thenReturn(
        whenever(SubscriptionUtil.getActiveSubscriptions(any())).thenReturn(
            listOf(
            listOf(
                SUB_INFO_1,
                SUB_INFO_1,
                SUB_INFO_2
                SUB_INFO_2
            )
            )
        )
        )
        var mockSubId = 2
        controller.init(mockFragment, SUB_ID_2)
        controller.init(mockFragment, mockSubId)
        mockImei = "test imei"
        mockImei = "test imei"
        mockTelephonyManager.stub {
        mockTelephonyManager.stub {
            on { imei } doReturn mockImei
            on { imei } doReturn mockImei
@@ -134,15 +143,13 @@ class MobileNetworkImeiPreferenceControllerTest {


    @Test
    @Test
    fun refreshData_getPrimaryImeiTitle_showPrimaryImei() = runBlocking {
    fun refreshData_getPrimaryImeiTitle_showPrimaryImei() = runBlocking {
        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true)
        whenever(SubscriptionUtil.getActiveSubscriptions(any())).thenReturn(
        whenever(SubscriptionUtil.getActiveSubscriptions(any())).thenReturn(
            listOf(
            listOf(
                SUB_INFO_1,
                SUB_INFO_1,
                SUB_INFO_2
                SUB_INFO_2
            )
            )
        )
        )
        var mockSubId = 2
        controller.init(mockFragment, SUB_ID_2)
        controller.init(mockFragment, mockSubId)
        mockImei = "test imei"
        mockImei = "test imei"
        mockTelephonyManager.stub {
        mockTelephonyManager.stub {
            on { imei } doReturn mockImei
            on { imei } doReturn mockImei
@@ -155,26 +162,57 @@ class MobileNetworkImeiPreferenceControllerTest {
    }
    }


    @Test
    @Test
    fun getAvailabilityStatus_notSimHardwareVisible() {
    fun getAvailabilityStatus_simHardwareVisible_userAdmin_notWifiOnly_displayed() {
        controller.init(mockFragment, SUB_ID_1)

        // Use defaults from setup()
        val availabilityStatus = controller.availabilityStatus
        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE)
    }

    @Test
    fun getAvailabilityStatus_notSimHardwareVisible_userAdmin_notWifiOnly_notDisplayed() {
        controller.init(mockFragment, SUB_ID_1)
        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false)
        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false)


        val availabilityStatus = controller.availabilityStatus
        val availabilityStatus = controller.availabilityStatus
        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE)
    }

    @Test
    fun getAvailabilityStatus_simHardwareVisible_notUserAdmin_notWifiOnly_notDisplayed() {
        controller.init(mockFragment, SUB_ID_1)
        mockUserManager.stub {
            on { isAdminUser } doReturn false
        }

        val availabilityStatus = controller.availabilityStatus
        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE)
    }


    @Test
    fun getAvailabilityStatus_simHardwareVisible_userAdmin_wifiOnly_notDisplayed() {
        controller.init(mockFragment, SUB_ID_1)
        whenever(Utils.isWifiOnly(context)).thenReturn(true)

        val availabilityStatus = controller.availabilityStatus
        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE)
        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE)
    }
    }


    private companion object {
    private companion object {
        const val TEST_KEY = "test_key"
        const val TEST_KEY = "test_key"
        const val SUB_ID_1 = 1
        const val SUB_ID_2 = 2
        const val DISPLAY_NAME_1 = "Sub 1"
        const val DISPLAY_NAME_1 = "Sub 1"
        const val DISPLAY_NAME_2 = "Sub 2"
        const val DISPLAY_NAME_2 = "Sub 2"


        val SUB_INFO_1: SubscriptionInfo = SubscriptionInfo.Builder().apply {
        val SUB_INFO_1: SubscriptionInfo = SubscriptionInfo.Builder().apply {
            setId(1)
            setId(SUB_ID_1)
            setDisplayName(DISPLAY_NAME_1)
            setDisplayName(DISPLAY_NAME_1)
        }.build()
        }.build()


        val SUB_INFO_2: SubscriptionInfo = SubscriptionInfo.Builder().apply {
        val SUB_INFO_2: SubscriptionInfo = SubscriptionInfo.Builder().apply {
            setId(2)
            setId(SUB_ID_2)
            setDisplayName(DISPLAY_NAME_2)
            setDisplayName(DISPLAY_NAME_2)
        }.build()
        }.build()