1 /*
2  * Copyright (C) 2021 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.managedprovisioning.provisioning;
18 
19 import static com.android.managedprovisioning.provisioning.ProvisioningActivity.PROVISIONING_MODE_FULLY_MANAGED_DEVICE;
20 import static com.android.managedprovisioning.provisioning.ProvisioningActivity.PROVISIONING_MODE_WORK_PROFILE;
21 import static com.android.managedprovisioning.provisioning.ProvisioningActivity.PROVISIONING_MODE_WORK_PROFILE_ON_ORG_OWNED_DEVICE;
22 import static com.android.managedprovisioning.provisioning.ProvisioningModeWrapperProvider.WORK_PROFILE_ON_ORG_OWNED_DEVICE_WRAPPER;
23 import static com.android.managedprovisioning.provisioning.ProvisioningModeWrapperProvider.WORK_PROFILE_WRAPPER;
24 
25 import static com.google.common.truth.Truth.assertThat;
26 
27 import static org.junit.Assert.assertThrows;
28 
29 import android.content.ComponentName;
30 import android.content.Context;
31 
32 import androidx.test.InstrumentationRegistry;
33 import androidx.test.filters.SmallTest;
34 
35 import com.android.managedprovisioning.R;
36 import com.android.managedprovisioning.model.ProvisioningParams;
37 import com.android.managedprovisioning.provisioning.ProvisioningModeWrapperProvider.ProvisioningModeWrapper;
38 
39 import org.junit.Test;
40 
41 /**
42  * Unit tests for {@link ProvisioningModeWrapperProvider}.
43  */
44 @SmallTest
45 public class ProvisioningModeWrapperProviderTest {
46     private static final ComponentName ADMIN = new ComponentName("com.foo", "com.bar");
47     private static final String TEST_PROVIONING_ACTION = "android.app.action.TEST";
48     private static final ProvisioningParams SIMPLE_PARAMS = new ProvisioningParams.Builder()
49             .setProvisioningAction(TEST_PROVIONING_ACTION)
50             .setDeviceAdminComponentName(ADMIN)
51             .build();
52 
53     private final Context mContext = InstrumentationRegistry.getTargetContext();
54     private final ProvisioningModeWrapperProvider mTestProvider =
55             new ProvisioningModeWrapperProvider(SIMPLE_PARAMS);
56 
57     @Test
testGetProvisioningModeWrapper_invalidMode()58     public void testGetProvisioningModeWrapper_invalidMode() {
59         assertThrows(IllegalStateException.class,
60                 () -> mTestProvider.getProvisioningModeWrapper(-1));
61     }
62 
63     @Test
testGetProvisioningModeWrapper_workProfile()64     public void testGetProvisioningModeWrapper_workProfile() {
65         String expected = mContext.getString(R.string.work_profile_provisioning_summary);
66 
67         ProvisioningModeWrapper wrapper = mTestProvider.getProvisioningModeWrapper(
68                 PROVISIONING_MODE_WORK_PROFILE);
69 
70         assertWrapperAsExpected(wrapper, expected);
71     }
72 
73     @Test
testGetProvisioningModeWrapper_workProfileOnOrgOwnedDevice()74     public void testGetProvisioningModeWrapper_workProfileOnOrgOwnedDevice() {
75         String expected = mContext.getString(R.string.cope_provisioning_summary);
76 
77         ProvisioningModeWrapper wrapper = mTestProvider.getProvisioningModeWrapper(
78                 PROVISIONING_MODE_WORK_PROFILE_ON_ORG_OWNED_DEVICE);
79 
80         assertWrapperAsExpected(wrapper, expected);
81     }
82 
83     @Test
testGetProvisioningModeWrapper_fullyManagedDevice_withoutSensorPermission()84     public void testGetProvisioningModeWrapper_fullyManagedDevice_withoutSensorPermission() {
85         ProvisioningParams params = new ProvisioningParams.Builder()
86                 .setProvisioningAction(TEST_PROVIONING_ACTION)
87                 .setDeviceAdminComponentName(ADMIN)
88                 .setDeviceOwnerPermissionGrantOptOut(true)
89                 .build();
90         ProvisioningModeWrapperProvider provider = new ProvisioningModeWrapperProvider(params);
91         String expected = mContext.getString(R.string.fully_managed_device_provisioning_summary);
92 
93         ProvisioningModeWrapper wrapper =
94                 provider.getProvisioningModeWrapper(PROVISIONING_MODE_FULLY_MANAGED_DEVICE);
95 
96         assertWrapperAsExpected(wrapper, expected);
97     }
98 
99     @Test
testGetProvisioningModeWrapper_fullyManagedDevice_withSensorPermission()100     public void testGetProvisioningModeWrapper_fullyManagedDevice_withSensorPermission() {
101         ProvisioningParams params = new ProvisioningParams.Builder()
102                 .setProvisioningAction(TEST_PROVIONING_ACTION)
103                 .setDeviceAdminComponentName(ADMIN)
104                 .setDeviceOwnerPermissionGrantOptOut(false)
105                 .build();
106         ProvisioningModeWrapperProvider provider = new ProvisioningModeWrapperProvider(params);
107         String expected = mContext.getString(
108                 R.string.fully_managed_device_with_permission_control_provisioning_summary);
109 
110         ProvisioningModeWrapper wrapper =
111                 provider.getProvisioningModeWrapper(PROVISIONING_MODE_FULLY_MANAGED_DEVICE);
112 
113         assertWrapperAsExpected(wrapper, expected);
114     }
115 
assertWrapperAsExpected(ProvisioningModeWrapper wrapper, String expected)116     private void assertWrapperAsExpected(ProvisioningModeWrapper wrapper, String expected) {
117         assertThat(mContext.getString(wrapper.summary)).isEqualTo(expected);
118     }
119 }
120