1 /*
2  * Copyright 2016, 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.task;
18 
19 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE;
20 
21 import static com.android.managedprovisioning.task.ManagedProfileSettingsTask.DEFAULT_CONTACT_REMOTE_SEARCH;
22 
23 import static org.mockito.Matchers.anyInt;
24 import static org.mockito.Matchers.eq;
25 import static org.mockito.Mockito.mock;
26 import static org.mockito.Mockito.never;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.verifyNoMoreInteractions;
29 import static org.mockito.Mockito.when;
30 
31 import android.app.admin.DevicePolicyManager;
32 import android.content.ComponentName;
33 import android.content.Context;
34 import android.content.pm.PackageManager;
35 import android.graphics.Color;
36 import android.os.UserManager;
37 
38 import androidx.test.filters.SmallTest;
39 
40 import com.android.managedprovisioning.analytics.ProvisioningAnalyticsTracker;
41 import com.android.managedprovisioning.common.SettingsFacade;
42 import com.android.managedprovisioning.model.ProvisioningParams;
43 
44 import org.junit.Before;
45 import org.junit.Test;
46 import org.mockito.Mock;
47 import org.mockito.MockitoAnnotations;
48 
49 /**
50  * Unit-tests for {@link ManagedProfileSettingsTask}.
51  */
52 @SmallTest
53 public class ManagedProfileSettingsTaskTest {
54 
55     private static final int TEST_USER_ID = 123;
56     private static final ComponentName ADMIN = new ComponentName("com.test.admin", ".Receiver");
57     private static final ProvisioningParams NO_COLOR_PARAMS = new ProvisioningParams.Builder()
58             .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE)
59             .setDeviceAdminComponentName(ADMIN)
60             .build();
61     private static final ProvisioningParams COLOR_PARAMS = new ProvisioningParams.Builder()
62             .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE)
63             .setDeviceAdminComponentName(ADMIN)
64             .setMainColor(Color.GREEN)
65             .build();
66 
67 
68     @Mock private Context mContext;
69     @Mock private UserManager mUserManager;
70     @Mock private DevicePolicyManager mDevicePolicyManager;
71     @Mock private PackageManager mPackageManager;
72     @Mock private AbstractProvisioningTask.Callback mCallback;
73     @Mock private SettingsFacade mSettingsFacade;
74     @Mock private CrossProfileIntentFiltersSetter mCrossProfileIntentFiltersSetter;
75     private ManagedProfileSettingsTask mTask;
76 
77     @Before
setUp()78     public void setUp() {
79         MockitoAnnotations.initMocks(this);
80 
81         when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
82         when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE))
83                 .thenReturn(mDevicePolicyManager);
84         when(mContext.getPackageManager()).thenReturn(mPackageManager);
85 
86     }
87 
88     @Test
testNoMainColor()89     public void testNoMainColor() {
90         // GIVEN that no main color was passed in the parameter
91         mTask = new ManagedProfileSettingsTask(mSettingsFacade, mCrossProfileIntentFiltersSetter,
92                 mContext, NO_COLOR_PARAMS, mCallback, mock(ProvisioningAnalyticsTracker.class));
93 
94         // WHEN running the task
95         mTask.run(TEST_USER_ID);
96 
97         // THEN success should be called
98         verify(mCallback).onSuccess(mTask);
99         verifyNoMoreInteractions(mCallback);
100 
101         // THEN no color should be stored in dpm
102         verify(mDevicePolicyManager, never())
103                 .setOrganizationColorForUser(anyInt(), eq(TEST_USER_ID));
104 
105         // THEN user setup complete and contacts remote search should be set
106         verify(mSettingsFacade).setUserSetupCompleted(mContext, TEST_USER_ID);
107         verify(mSettingsFacade).setProfileContactRemoteSearch(mContext,
108                 DEFAULT_CONTACT_REMOTE_SEARCH, TEST_USER_ID);
109 
110         // THEN cross profile intent filters are set
111         verify(mCrossProfileIntentFiltersSetter).setFilters(anyInt(), eq(TEST_USER_ID));
112     }
113 
114     @Test
testMainColor()115     public void testMainColor() {
116         // GIVEN that a main color was passed in the parameter
117         mTask = new ManagedProfileSettingsTask(mSettingsFacade, mCrossProfileIntentFiltersSetter,
118                 mContext, COLOR_PARAMS, mCallback, mock(ProvisioningAnalyticsTracker.class));
119 
120         // WHEN running the task
121         mTask.run(TEST_USER_ID);
122 
123         // THEN success should be called
124         verify(mCallback).onSuccess(mTask);
125         verifyNoMoreInteractions(mCallback);
126 
127         // THEN the main color should be stored in dpm
128         verify(mDevicePolicyManager).setOrganizationColorForUser(Color.GREEN, TEST_USER_ID);
129 
130         // THEN user setup complete and contacts remote search should be set
131         verify(mSettingsFacade).setUserSetupCompleted(mContext, TEST_USER_ID);
132         verify(mSettingsFacade).setProfileContactRemoteSearch(mContext,
133                 DEFAULT_CONTACT_REMOTE_SEARCH, TEST_USER_ID);
134 
135         // THEN cross profile intent filters are set
136         verify(mCrossProfileIntentFiltersSetter).setFilters(anyInt(), eq(TEST_USER_ID));
137     }
138 }
139