1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.smartspace 18 19 import android.testing.AndroidTestingRunner 20 import android.testing.TestableLooper 21 import androidx.test.filters.SmallTest 22 import com.android.systemui.SysuiTestCase 23 import com.android.systemui.smartspace.preconditions.LockscreenPrecondition 24 import com.android.systemui.statusbar.policy.DeviceProvisionedController 25 import com.android.systemui.util.concurrency.Execution 26 import com.google.common.truth.Truth.assertThat 27 import org.junit.Before 28 import org.junit.Test 29 import org.junit.runner.RunWith 30 import org.mockito.ArgumentCaptor 31 import org.mockito.Mock 32 import org.mockito.Mockito 33 import org.mockito.Mockito.`when` 34 import org.mockito.Mockito.verify 35 import org.mockito.MockitoAnnotations 36 37 @SmallTest 38 @RunWith(AndroidTestingRunner::class) 39 @TestableLooper.RunWithLooper 40 class LockscreenPreconditionTest : SysuiTestCase() { 41 @Mock 42 private lateinit var deviceProvisionedController: DeviceProvisionedController 43 44 @Mock 45 private lateinit var execution: Execution 46 47 @Mock 48 private lateinit var listener: SmartspacePrecondition.Listener 49 50 @Before 51 fun setup() { 52 MockitoAnnotations.initMocks(this) 53 } 54 55 /** 56 * Ensures fully enabled state is published. 57 */ 58 @Test 59 fun testFullyEnabled() { 60 `when`(deviceProvisionedController.isCurrentUserSetup).thenReturn(true) 61 `when`(deviceProvisionedController.isDeviceProvisioned).thenReturn(true) 62 val precondition = LockscreenPrecondition(deviceProvisionedController, execution) 63 precondition.addListener(listener) 64 65 `verify`(listener).onCriteriaChanged() 66 assertThat(precondition.conditionsMet()).isTrue() 67 } 68 69 /** 70 * Ensures fully enabled state is published. 71 */ 72 @Test 73 fun testProvisioning() { 74 `when`(deviceProvisionedController.isCurrentUserSetup).thenReturn(true) 75 `when`(deviceProvisionedController.isDeviceProvisioned).thenReturn(false) 76 val precondition = 77 LockscreenPrecondition(deviceProvisionedController, execution) 78 precondition.addListener(listener) 79 80 verify(listener).onCriteriaChanged() 81 assertThat(precondition.conditionsMet()).isFalse() 82 83 var argumentCaptor = ArgumentCaptor.forClass(DeviceProvisionedController 84 .DeviceProvisionedListener::class.java) 85 verify(deviceProvisionedController).addCallback(argumentCaptor.capture()) 86 87 Mockito.clearInvocations(listener) 88 89 `when`(deviceProvisionedController.isDeviceProvisioned).thenReturn(true) 90 argumentCaptor.value.onDeviceProvisionedChanged() 91 verify(listener).onCriteriaChanged() 92 assertThat(precondition.conditionsMet()).isTrue() 93 } 94 95 /** 96 * Makes sure user setup changes are propagated. 97 */ 98 @Test 99 fun testUserSetup() { 100 `when`(deviceProvisionedController.isCurrentUserSetup).thenReturn(false) 101 `when`(deviceProvisionedController.isDeviceProvisioned).thenReturn(true) 102 val precondition = 103 LockscreenPrecondition(deviceProvisionedController, execution) 104 precondition.addListener(listener) 105 106 verify(listener).onCriteriaChanged() 107 assertThat(precondition.conditionsMet()).isFalse() 108 109 var argumentCaptor = ArgumentCaptor.forClass(DeviceProvisionedController 110 .DeviceProvisionedListener::class.java) 111 verify(deviceProvisionedController).addCallback(argumentCaptor.capture()) 112 113 Mockito.clearInvocations(listener) 114 115 `when`(deviceProvisionedController.isCurrentUserSetup).thenReturn(true) 116 argumentCaptor.value.onUserSetupChanged() 117 verify(listener).onCriteriaChanged() 118 assertThat(precondition.conditionsMet()).isTrue() 119 } 120 } 121