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

Commit 154d5562 authored by Lucas Silva's avatar Lucas Silva
Browse files

Fix test when home controls hsum flag enabled

The HomeControlsDreamStartableTest currently fails when the home
controls hsum flag is enabled. This change parameterizes the test to
ensure we have coverage with both the flag on and off. It also makes
some other cleanup updates to the test.

Flag: EXEMPT test fix
Bug: 370691405
Test: atest HomeControlsDreamStartableTest
Change-Id: Ied928df0451f2fac0131e050b5fff668c93fee87
parent 067c153f
Loading
Loading
Loading
Loading
+77 −57
Original line number Diff line number Diff line
@@ -23,89 +23,87 @@ import android.content.pm.ServiceInfo
import android.content.pm.UserInfo
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.FlagsParameterization
import android.service.controls.flags.Flags.FLAG_HOME_PANEL_DREAM
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_HOME_CONTROLS_DREAM_HSUM
import com.android.systemui.Flags.homeControlsDreamHsum
import com.android.systemui.SysuiTestCase
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.dagger.ControlsComponent
import com.android.systemui.controls.management.ControlsListingController
import com.android.systemui.controls.panels.AuthorizedPanelsRepository
import com.android.systemui.controls.panels.SelectedComponentRepository
import com.android.systemui.controls.panels.authorizedPanelsRepository
import com.android.systemui.controls.panels.selectedComponentRepository
import com.android.systemui.dreams.homecontrols.system.HomeControlsDreamStartable
import com.android.systemui.dreams.homecontrols.system.domain.interactor.HomeControlsComponentInteractor
import com.android.systemui.dreams.homecontrols.system.domain.interactor.controlsComponent
import com.android.systemui.dreams.homecontrols.system.domain.interactor.controlsListingController
import com.android.systemui.dreams.homecontrols.system.domain.interactor.homeControlsComponentInteractor
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.settings.fakeUserTracker
import com.android.systemui.settings.userTracker
import com.android.systemui.testKosmos
import com.android.systemui.user.data.repository.FakeUserRepository
import com.android.systemui.user.data.repository.fakeUserRepository
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.whenever
import java.util.Optional
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations

import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.stub
import org.mockito.kotlin.whenever
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
class HomeControlsDreamStartableTest : SysuiTestCase() {
@RunWith(ParameterizedAndroidJunit4::class)
class HomeControlsDreamStartableTest(flags: FlagsParameterization) : SysuiTestCase() {
    init {
        mSetFlagsRule.setFlagsParameterization(flags)
    }

    private val kosmos = testKosmos()

    @Mock private lateinit var packageManager: PackageManager

    private lateinit var homeControlsComponentInteractor: HomeControlsComponentInteractor
    private lateinit var selectedComponentRepository: SelectedComponentRepository
    private lateinit var authorizedPanelsRepository: AuthorizedPanelsRepository
    private lateinit var userRepository: FakeUserRepository
    private lateinit var controlsComponent: ControlsComponent
    private lateinit var controlsListingController: ControlsListingController

    private lateinit var startable: HomeControlsDreamStartable
    private val componentName = ComponentName(context, HomeControlsDreamService::class.java)
    private val testScope = kosmos.testScope

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
    private val systemUserPackageManager = mock<PackageManager>()
    private val userPackageManager = mock<PackageManager>()

        selectedComponentRepository = kosmos.selectedComponentRepository
        authorizedPanelsRepository = kosmos.authorizedPanelsRepository
        userRepository = kosmos.fakeUserRepository
        controlsComponent = kosmos.controlsComponent
        controlsListingController = kosmos.controlsListingController

        userRepository.setUserInfos(listOf(PRIMARY_USER))

        authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE_PANEL))

        whenever(controlsComponent.getControlsListingController())
            .thenReturn(Optional.of(controlsListingController))
        whenever(controlsListingController.getCurrentServices())
            .thenReturn(listOf(ControlsServiceInfo(TEST_COMPONENT_PANEL, "panel", hasPanel = true)))

        homeControlsComponentInteractor = kosmos.homeControlsComponentInteractor
    private val selectedComponentRepository = kosmos.selectedComponentRepository
    private val userRepository =
        kosmos.fakeUserRepository.apply { setUserInfos(listOf(PRIMARY_USER)) }
    private val controlsListingController =
        kosmos.controlsListingController.stub {
            on { getCurrentServices() } doReturn
                listOf(buildControlsServiceInfo(TEST_COMPONENT_PANEL, "panel", hasPanel = true))
        }
    private val controlsComponent =
        kosmos.controlsComponent.stub {
            on { getControlsListingController() } doReturn Optional.of(controlsListingController)
        }

        startable =
    private val underTest by lazy {
        HomeControlsDreamStartable(
            mContext,
                packageManager,
            systemUserPackageManager,
            kosmos.userTracker,
                homeControlsComponentInteractor,
            kosmos.homeControlsComponentInteractor,
            kosmos.applicationCoroutineScope,
        )
    }
    private val componentName = ComponentName(context, HomeControlsDreamService::class.java)

    @Before
    fun setUp() {
        kosmos.authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE_PANEL))
        whenever(controlsComponent.getControlsListingController())
            .thenReturn(Optional.of(controlsListingController))
        whenever(kosmos.fakeUserTracker.userContext.packageManager).thenReturn(userPackageManager)
    }

    @Test
    @EnableFlags(FLAG_HOME_PANEL_DREAM)
@@ -113,13 +111,19 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
        testScope.runTest {
            userRepository.setSelectedUserInfo(PRIMARY_USER)
            selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL)
            startable.start()
            underTest.start()
            runCurrent()
            val packageManager =
                if (homeControlsDreamHsum()) {
                    userPackageManager
                } else {
                    systemUserPackageManager
                }
            verify(packageManager)
                .setComponentEnabledSetting(
                    eq(componentName),
                    eq(PackageManager.COMPONENT_ENABLED_STATE_ENABLED),
                    eq(PackageManager.DONT_KILL_APP),
                    componentName,
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP,
                )
        }

@@ -128,13 +132,19 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
    fun testStartDisablesHomeControlsDreamServiceWhenPanelComponentIsNull() =
        testScope.runTest {
            selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL)
            startable.start()
            underTest.start()
            runCurrent()
            val packageManager =
                if (homeControlsDreamHsum()) {
                    userPackageManager
                } else {
                    systemUserPackageManager
                }
            verify(packageManager)
                .setComponentEnabledSetting(
                    eq(componentName),
                    eq(PackageManager.COMPONENT_ENABLED_STATE_DISABLED),
                    eq(PackageManager.DONT_KILL_APP),
                    componentName,
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP,
                )
        }

@@ -143,8 +153,14 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
    fun testStartDisablesDreamServiceWhenFlagIsDisabled() =
        testScope.runTest {
            selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL)
            startable.start()
            underTest.start()
            runCurrent()
            val packageManager =
                if (homeControlsDreamHsum()) {
                    userPackageManager
                } else {
                    systemUserPackageManager
                }
            verify(packageManager)
                .setComponentEnabledSetting(
                    eq(componentName),
@@ -153,7 +169,7 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
                )
        }

    private fun ControlsServiceInfo(
    private fun buildControlsServiceInfo(
        componentName: ComponentName,
        label: CharSequence,
        hasPanel: Boolean,
@@ -186,6 +202,10 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
    }

    companion object {
        @get:Parameters(name = "{0}")
        @JvmStatic
        val params = FlagsParameterization.allCombinationsOf(FLAG_HOME_CONTROLS_DREAM_HSUM)

        private const val PRIMARY_USER_ID = 0
        private val PRIMARY_USER =
            UserInfo(