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

Commit 439eee0b authored by Josh Tsuji's avatar Josh Tsuji
Browse files

Add sendTransitionStepsOnStartTransition.

Currently, calls to startTransition are recorded/spied on so that we can verify that someone asked to start a transition.

However, as our interactors become more complicated, calls to startTransition sometimes are guarded by checking previous TransitionSteps. This requires us to send the appropriate fake transition steps prior to triggering the startTransition call we're looking for.

To improve this, and also test more live code, this adds support for sending STARTED/RUNNING/FINISHED steps in response to startTransition calls from the real interactors.

Also, adds FromLockscreenTransitionInteractor tests as promised in the previous CL.

Bug: 370177430
Test: atest SystemUITests
Flag: EXEMPT tests
Change-Id: Iab04c8799978b54568a1069c8d7ce425bbe02a93
parent 40aa6d94
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -42,7 +42,8 @@ import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepositor
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepositorySpy
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.util.KeyguardTransitionRepositorySpySubject.Companion.assertThat
import com.android.systemui.kosmos.testScope
@@ -57,7 +58,6 @@ import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito
import org.mockito.Mockito.reset

@ExperimentalCoroutinesApi
@@ -66,7 +66,7 @@ import org.mockito.Mockito.reset
class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
    private val kosmos =
        testKosmos().apply {
            this.fakeKeyguardTransitionRepository = Mockito.spy(FakeKeyguardTransitionRepository())
            this.keyguardTransitionRepository = fakeKeyguardTransitionRepositorySpy
        }
    private val testScope = kosmos.testScope
    private lateinit var underTest: FromAlternateBouncerTransitionInteractor
@@ -74,7 +74,7 @@ class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {

    @Before
    fun setup() {
        transitionRepository = kosmos.fakeKeyguardTransitionRepository
        transitionRepository = kosmos.fakeKeyguardTransitionRepositorySpy
        underTest = kosmos.fromAlternateBouncerTransitionInteractor
        underTest.start()
    }
@@ -86,7 +86,7 @@ class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
            transitionRepository.sendTransitionSteps(
                from = KeyguardState.OCCLUDED,
                to = KeyguardState.ALTERNATE_BOUNCER,
                testScope
                testScope,
            )
            reset(transitionRepository)

@@ -111,7 +111,7 @@ class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
            transitionRepository.sendTransitionSteps(
                from = KeyguardState.OCCLUDED,
                to = KeyguardState.ALTERNATE_BOUNCER,
                testScope
                testScope,
            )
            reset(transitionRepository)

@@ -129,7 +129,7 @@ class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
            transitionRepository.sendTransitionSteps(
                from = KeyguardState.OCCLUDED,
                to = KeyguardState.ALTERNATE_BOUNCER,
                testScope
                testScope,
            )
            reset(transitionRepository)

@@ -158,7 +158,7 @@ class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
            transitionRepository.sendTransitionSteps(
                from = KeyguardState.OCCLUDED,
                to = KeyguardState.ALTERNATE_BOUNCER,
                testScope
                testScope,
            )
            reset(transitionRepository)

@@ -168,7 +168,7 @@ class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
            assertThat(transitionRepository)
                .startedTransition(
                    from = KeyguardState.ALTERNATE_BOUNCER,
                    to = KeyguardState.OCCLUDED
                    to = KeyguardState.OCCLUDED,
                )
        }

@@ -183,7 +183,7 @@ class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
            transitionRepository.sendTransitionSteps(
                from = KeyguardState.GLANCEABLE_HUB,
                to = KeyguardState.ALTERNATE_BOUNCER,
                testScope
                testScope,
            )
            reset(transitionRepository)

+9 −15
Original line number Diff line number Diff line
@@ -42,8 +42,9 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepositorySpy
import com.android.systemui.keyguard.data.repository.keyguardOcclusionRepository
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
@@ -69,7 +70,6 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.reset
import org.mockito.Mockito.spy

@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@@ -77,7 +77,7 @@ import org.mockito.Mockito.spy
class FromAodTransitionInteractorTest : SysuiTestCase() {
    private val kosmos =
        testKosmos().apply {
            this.fakeKeyguardTransitionRepository = spy(FakeKeyguardTransitionRepository())
            this.keyguardTransitionRepository = fakeKeyguardTransitionRepositorySpy
        }

    private val testScope = kosmos.testScope
@@ -89,7 +89,7 @@ class FromAodTransitionInteractorTest : SysuiTestCase() {
    @Before
    fun setup() {
        powerInteractor = kosmos.powerInteractor
        transitionRepository = kosmos.fakeKeyguardTransitionRepository
        transitionRepository = kosmos.fakeKeyguardTransitionRepositorySpy
        underTest = kosmos.fromAodTransitionInteractor

        underTest.start()
@@ -101,7 +101,7 @@ class FromAodTransitionInteractorTest : SysuiTestCase() {
            transitionRepository.sendTransitionSteps(
                from = KeyguardState.LOCKSCREEN,
                to = KeyguardState.AOD,
                testScope
                testScope,
            )
            kosmos.fakeKeyguardRepository.setBiometricUnlockState(BiometricUnlockMode.NONE)
            reset(transitionRepository)
@@ -117,10 +117,7 @@ class FromAodTransitionInteractorTest : SysuiTestCase() {

            // Under default conditions, we should transition to LOCKSCREEN when waking up.
            assertThat(transitionRepository)
                .startedTransition(
                    from = KeyguardState.AOD,
                    to = KeyguardState.LOCKSCREEN,
                )
                .startedTransition(from = KeyguardState.AOD, to = KeyguardState.LOCKSCREEN)
        }

    @Test
@@ -133,10 +130,7 @@ class FromAodTransitionInteractorTest : SysuiTestCase() {

            // Waking with a SHOW_WHEN_LOCKED activity on top should transition to OCCLUDED.
            assertThat(transitionRepository)
                .startedTransition(
                    from = KeyguardState.AOD,
                    to = KeyguardState.OCCLUDED,
                )
                .startedTransition(from = KeyguardState.AOD, to = KeyguardState.OCCLUDED)
        }

    @Test
@@ -363,13 +357,13 @@ class FromAodTransitionInteractorTest : SysuiTestCase() {
                        from = KeyguardState.GONE,
                        to = KeyguardState.AOD,
                        transitionState = TransitionState.STARTED,
                        value = 0f
                        value = 0f,
                    ),
                    TransitionStep(
                        from = KeyguardState.GONE,
                        to = KeyguardState.AOD,
                        transitionState = TransitionState.RUNNING,
                        value = 0.1f
                        value = 0.1f,
                    ),
                ),
                testScope = testScope,
+4 −3
Original line number Diff line number Diff line
@@ -36,8 +36,9 @@ import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepositorySpy
import com.android.systemui.keyguard.data.repository.keyguardOcclusionRepository
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
@@ -79,7 +80,7 @@ import platform.test.runner.parameterized.Parameters
class FromDozingTransitionInteractorTest(flags: FlagsParameterization?) : SysuiTestCase() {
    private val kosmos =
        testKosmos().apply {
            this.fakeKeyguardTransitionRepository = spy(FakeKeyguardTransitionRepository())
            this.keyguardTransitionRepository = fakeKeyguardTransitionRepositorySpy
            this.fakeCommunalSceneRepository =
                spy(FakeCommunalSceneRepository(applicationScope = applicationCoroutineScope))
        }
@@ -105,7 +106,7 @@ class FromDozingTransitionInteractorTest(flags: FlagsParameterization?) : SysuiT
    @Before
    fun setup() {
        powerInteractor = kosmos.powerInteractor
        transitionRepository = kosmos.fakeKeyguardTransitionRepository
        transitionRepository = kosmos.fakeKeyguardTransitionRepositorySpy
        underTest = kosmos.fromDozingTransitionInteractor

        underTest.start()
+11 −3
Original line number Diff line number Diff line
@@ -32,7 +32,9 @@ import com.android.systemui.flags.andSceneContainer
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepositorySpy
import com.android.systemui.keyguard.data.repository.keyguardOcclusionRepository
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.util.KeyguardTransitionRepositorySpySubject.Companion.assertThat
@@ -53,7 +55,6 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.anyBoolean
import org.mockito.Mockito.reset
import org.mockito.Mockito.spy
import org.mockito.kotlin.whenever
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters
@@ -77,14 +78,21 @@ class FromDreamingTransitionInteractorTest(flags: FlagsParameterization?) : Sysu

    private val kosmos =
        testKosmos().apply {
            this.fakeKeyguardTransitionRepository = spy(FakeKeyguardTransitionRepository())
            this.fakeKeyguardTransitionRepository =
                FakeKeyguardTransitionRepository(
                    // This test sends transition steps manually in the test cases.
                    sendTransitionStepsOnStartTransition = false,
                    testScope = testScope,
                )

            this.keyguardTransitionRepository = fakeKeyguardTransitionRepositorySpy
        }

    private val testScope = kosmos.testScope
    private val underTest by lazy { kosmos.fromDreamingTransitionInteractor }

    private val powerInteractor = kosmos.powerInteractor
    private val transitionRepository = kosmos.fakeKeyguardTransitionRepository
    private val transitionRepository = kosmos.fakeKeyguardTransitionRepositorySpy

    @Before
    fun setup() {
+7 −12
Original line number Diff line number Diff line
@@ -23,10 +23,10 @@ import androidx.test.filters.SmallTest
import com.android.internal.widget.LockPatternUtils
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeBiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepositorySpy
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.AuthenticationFlags
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionState
@@ -41,18 +41,17 @@ import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.reset
import org.mockito.Mockito.spy

@SmallTest
@RunWith(AndroidJUnit4::class)
class FromGoneTransitionInteractorTest : SysuiTestCase() {
    private val kosmos =
        testKosmos().apply {
            fakeKeyguardTransitionRepository = spy(FakeKeyguardTransitionRepository())
            this.keyguardTransitionRepository = fakeKeyguardTransitionRepositorySpy
        }
    private val testScope = kosmos.testScope
    private val underTest = kosmos.fromGoneTransitionInteractor
    private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
    private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepositorySpy

    @Before
    fun setUp() {
@@ -101,9 +100,7 @@ class FromGoneTransitionInteractorTest : SysuiTestCase() {

            // We're in the middle of a GONE -> LOCKSCREEN transition.
            assertThat(keyguardTransitionRepository)
                .startedTransition(
                    to = KeyguardState.LOCKSCREEN,
                )
                .startedTransition(to = KeyguardState.LOCKSCREEN)
        }

    @Test
@@ -121,15 +118,13 @@ class FromGoneTransitionInteractorTest : SysuiTestCase() {
            kosmos.fakeBiometricSettingsRepository.setAuthenticationFlags(
                AuthenticationFlags(
                    0,
                    LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN
                    LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN,
                )
            )
            runCurrent()

            // We're in the middle of a GONE -> LOCKSCREEN transition.
            assertThat(keyguardTransitionRepository)
                .startedTransition(
                    to = KeyguardState.LOCKSCREEN,
                )
                .startedTransition(to = KeyguardState.LOCKSCREEN)
        }
}
Loading