Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/UserSetupRepositoryTest.kt→packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/data/repository/UserSetupRepositoryTest.kt +87 −0 Original line number Diff line number Diff line Loading @@ -14,76 +14,69 @@ * limitations under the License. */ package com.android.systemui.statusbar.pipeline.mobile.data.repository @file:OptIn(ExperimentalCoroutinesApi::class) package com.android.systemui.statusbar.policy.data.repository import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.testDispatcher import com.android.systemui.kosmos.testScope import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener import com.android.systemui.statusbar.policy.deviceProvisionedController import com.android.systemui.testKosmos import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.runBlocking import org.junit.After import org.junit.Before import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Test import org.mockito.Mock import org.junit.runner.RunWith import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations @SmallTest @RunWith(AndroidJUnit4::class) class UserSetupRepositoryTest : SysuiTestCase() { private lateinit var underTest: UserSetupRepository @Mock private lateinit var deviceProvisionedController: DeviceProvisionedController private val scope = CoroutineScope(IMMEDIATE) @Before fun setUp() { MockitoAnnotations.initMocks(this) underTest = UserSetupRepositoryImpl( private val kosmos = testKosmos() private val testScope = kosmos.testScope private val deviceProvisionedController : DeviceProvisionedController = mock() private val underTest = UserSetupRepositoryImpl( deviceProvisionedController, IMMEDIATE, scope, kosmos.testDispatcher, kosmos.applicationCoroutineScope, ) } @After fun tearDown() { scope.cancel() } @Test fun testUserSetup_defaultFalse() = runBlocking(IMMEDIATE) { var latest: Boolean? = null val job = underTest.isUserSetupFlow.onEach { latest = it }.launchIn(this) fun userSetup_defaultFalse() = testScope.runTest { val latest by collectLastValue(underTest.isUserSetUp) assertThat(latest).isFalse() job.cancel() } @Test fun testUserSetup_updatesOnChange() = runBlocking(IMMEDIATE) { var latest: Boolean? = null val job = underTest.isUserSetupFlow.onEach { latest = it }.launchIn(this) fun userSetup_updatesOnChange() = testScope.runTest { val latest by collectLastValue(underTest.isUserSetUp) runCurrent() whenever(deviceProvisionedController.isCurrentUserSetup).thenReturn(true) val callback = getDeviceProvisionedListener() callback.onUserSetupChanged() assertThat(latest).isTrue() job.cancel() } private fun getDeviceProvisionedListener(): DeviceProvisionedListener { Loading @@ -91,8 +84,4 @@ class UserSetupRepositoryTest : SysuiTestCase() { verify(deviceProvisionedController).addCallback(captor.capture()) return captor.value!! } companion object { private val IMMEDIATE = Dispatchers.Main.immediate } } packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/UserSetupInteractorTest.kt 0 → 100644 +58 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.statusbar.policy.domain.interactor import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.testScope import com.android.systemui.statusbar.policy.data.repository.fakeUserSetupRepository import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runTest import org.junit.Test import org.junit.runner.RunWith @SmallTest @RunWith(AndroidJUnit4::class) class UserSetupInteractorTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope private val fakeUserSetupRepository = kosmos.fakeUserSetupRepository private val underTest = kosmos.userSetupInteractor @Test fun isUserSetup_false() = testScope.runTest { val setup by collectLastValue(underTest.isUserSetUp) fakeUserSetupRepository.setUserSetUp(false) assertThat(setup).isFalse() } @Test fun isUserSetup_true() = testScope.runTest { val setup by collectLastValue(underTest.isUserSetUp) fakeUserSetupRepository.setUserSetUp(true) assertThat(setup).isTrue() } } packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImpl.kt +2 −2 Original line number Diff line number Diff line Loading @@ -25,8 +25,8 @@ import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.statusbar.disableflags.data.repository.DisableFlagsRepository import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository import com.android.systemui.statusbar.policy.data.repository.DeviceProvisioningRepository import com.android.systemui.statusbar.policy.data.repository.UserSetupRepository import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import javax.inject.Inject import kotlinx.coroutines.CoroutineScope Loading Loading @@ -94,7 +94,7 @@ constructor( disableFlagsRepository.disableFlags, isShadeEnabled, keyguardRepository.isDozing, userSetupRepository.isUserSetupFlow, userSetupRepository.isUserSetUp, deviceProvisioningRepository.isDeviceProvisioned, ) { disableFlags, isShadeEnabled, isDozing, isUserSetup, isDeviceProvisioned -> isDeviceProvisioned && Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +2 −2 Original line number Diff line number Diff line Loading @@ -34,8 +34,6 @@ import com.android.systemui.statusbar.pipeline.icons.shared.BindableIconsRegistr import com.android.systemui.statusbar.pipeline.mobile.data.repository.CarrierConfigCoreStartable import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileRepositorySwitcher import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepositoryImpl import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractorImpl import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter Loading @@ -62,6 +60,8 @@ import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRep import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryViaTrackerLib import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl import com.android.systemui.statusbar.policy.data.repository.UserSetupRepository import com.android.systemui.statusbar.policy.data.repository.UserSetupRepositoryImpl import dagger.Binds import dagger.Module import dagger.Provides Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt +3 −3 Original line number Diff line number Diff line Loading @@ -32,9 +32,9 @@ import com.android.systemui.statusbar.pipeline.dagger.MobileSummaryLog import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.policy.data.repository.UserSetupRepository import com.android.systemui.util.CarrierConfigTracker import java.lang.ref.WeakReference import javax.inject.Inject Loading Loading @@ -105,7 +105,7 @@ interface MobileIconsInteractor { val isDefaultConnectionFailed: StateFlow<Boolean> /** True once the user has been set up */ val isUserSetup: StateFlow<Boolean> val isUserSetUp: StateFlow<Boolean> /** True if we're configured to force-hide the mobile icons and false otherwise. */ val isForceHidden: Flow<Boolean> Loading Loading @@ -362,7 +362,7 @@ constructor( ) .stateIn(scope, SharingStarted.WhileSubscribed(), false) override val isUserSetup: StateFlow<Boolean> = userSetupRepo.isUserSetupFlow override val isUserSetUp: StateFlow<Boolean> = userSetupRepo.isUserSetUp override val isForceHidden: Flow<Boolean> = connectivityRepository.forceHiddenSlots Loading Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/UserSetupRepositoryTest.kt→packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/data/repository/UserSetupRepositoryTest.kt +87 −0 Original line number Diff line number Diff line Loading @@ -14,76 +14,69 @@ * limitations under the License. */ package com.android.systemui.statusbar.pipeline.mobile.data.repository @file:OptIn(ExperimentalCoroutinesApi::class) package com.android.systemui.statusbar.policy.data.repository import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.testDispatcher import com.android.systemui.kosmos.testScope import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener import com.android.systemui.statusbar.policy.deviceProvisionedController import com.android.systemui.testKosmos import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.runBlocking import org.junit.After import org.junit.Before import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Test import org.mockito.Mock import org.junit.runner.RunWith import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations @SmallTest @RunWith(AndroidJUnit4::class) class UserSetupRepositoryTest : SysuiTestCase() { private lateinit var underTest: UserSetupRepository @Mock private lateinit var deviceProvisionedController: DeviceProvisionedController private val scope = CoroutineScope(IMMEDIATE) @Before fun setUp() { MockitoAnnotations.initMocks(this) underTest = UserSetupRepositoryImpl( private val kosmos = testKosmos() private val testScope = kosmos.testScope private val deviceProvisionedController : DeviceProvisionedController = mock() private val underTest = UserSetupRepositoryImpl( deviceProvisionedController, IMMEDIATE, scope, kosmos.testDispatcher, kosmos.applicationCoroutineScope, ) } @After fun tearDown() { scope.cancel() } @Test fun testUserSetup_defaultFalse() = runBlocking(IMMEDIATE) { var latest: Boolean? = null val job = underTest.isUserSetupFlow.onEach { latest = it }.launchIn(this) fun userSetup_defaultFalse() = testScope.runTest { val latest by collectLastValue(underTest.isUserSetUp) assertThat(latest).isFalse() job.cancel() } @Test fun testUserSetup_updatesOnChange() = runBlocking(IMMEDIATE) { var latest: Boolean? = null val job = underTest.isUserSetupFlow.onEach { latest = it }.launchIn(this) fun userSetup_updatesOnChange() = testScope.runTest { val latest by collectLastValue(underTest.isUserSetUp) runCurrent() whenever(deviceProvisionedController.isCurrentUserSetup).thenReturn(true) val callback = getDeviceProvisionedListener() callback.onUserSetupChanged() assertThat(latest).isTrue() job.cancel() } private fun getDeviceProvisionedListener(): DeviceProvisionedListener { Loading @@ -91,8 +84,4 @@ class UserSetupRepositoryTest : SysuiTestCase() { verify(deviceProvisionedController).addCallback(captor.capture()) return captor.value!! } companion object { private val IMMEDIATE = Dispatchers.Main.immediate } }
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/UserSetupInteractorTest.kt 0 → 100644 +58 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.statusbar.policy.domain.interactor import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.testScope import com.android.systemui.statusbar.policy.data.repository.fakeUserSetupRepository import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runTest import org.junit.Test import org.junit.runner.RunWith @SmallTest @RunWith(AndroidJUnit4::class) class UserSetupInteractorTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope private val fakeUserSetupRepository = kosmos.fakeUserSetupRepository private val underTest = kosmos.userSetupInteractor @Test fun isUserSetup_false() = testScope.runTest { val setup by collectLastValue(underTest.isUserSetUp) fakeUserSetupRepository.setUserSetUp(false) assertThat(setup).isFalse() } @Test fun isUserSetup_true() = testScope.runTest { val setup by collectLastValue(underTest.isUserSetUp) fakeUserSetupRepository.setUserSetUp(true) assertThat(setup).isTrue() } }
packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImpl.kt +2 −2 Original line number Diff line number Diff line Loading @@ -25,8 +25,8 @@ import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.statusbar.disableflags.data.repository.DisableFlagsRepository import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository import com.android.systemui.statusbar.policy.data.repository.DeviceProvisioningRepository import com.android.systemui.statusbar.policy.data.repository.UserSetupRepository import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import javax.inject.Inject import kotlinx.coroutines.CoroutineScope Loading Loading @@ -94,7 +94,7 @@ constructor( disableFlagsRepository.disableFlags, isShadeEnabled, keyguardRepository.isDozing, userSetupRepository.isUserSetupFlow, userSetupRepository.isUserSetUp, deviceProvisioningRepository.isDeviceProvisioned, ) { disableFlags, isShadeEnabled, isDozing, isUserSetup, isDeviceProvisioned -> isDeviceProvisioned && Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +2 −2 Original line number Diff line number Diff line Loading @@ -34,8 +34,6 @@ import com.android.systemui.statusbar.pipeline.icons.shared.BindableIconsRegistr import com.android.systemui.statusbar.pipeline.mobile.data.repository.CarrierConfigCoreStartable import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileRepositorySwitcher import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepositoryImpl import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractorImpl import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter Loading @@ -62,6 +60,8 @@ import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRep import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryViaTrackerLib import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl import com.android.systemui.statusbar.policy.data.repository.UserSetupRepository import com.android.systemui.statusbar.policy.data.repository.UserSetupRepositoryImpl import dagger.Binds import dagger.Module import dagger.Provides Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt +3 −3 Original line number Diff line number Diff line Loading @@ -32,9 +32,9 @@ import com.android.systemui.statusbar.pipeline.dagger.MobileSummaryLog import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.policy.data.repository.UserSetupRepository import com.android.systemui.util.CarrierConfigTracker import java.lang.ref.WeakReference import javax.inject.Inject Loading Loading @@ -105,7 +105,7 @@ interface MobileIconsInteractor { val isDefaultConnectionFailed: StateFlow<Boolean> /** True once the user has been set up */ val isUserSetup: StateFlow<Boolean> val isUserSetUp: StateFlow<Boolean> /** True if we're configured to force-hide the mobile icons and false otherwise. */ val isForceHidden: Flow<Boolean> Loading Loading @@ -362,7 +362,7 @@ constructor( ) .stateIn(scope, SharingStarted.WhileSubscribed(), false) override val isUserSetup: StateFlow<Boolean> = userSetupRepo.isUserSetupFlow override val isUserSetUp: StateFlow<Boolean> = userSetupRepo.isUserSetUp override val isForceHidden: Flow<Boolean> = connectivityRepository.forceHiddenSlots Loading