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