147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz/* 247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * Copyright 2016, The Android Open Source Project 347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * 447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * Licensed under the Apache License, Version 2.0 (the "License"); 547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * you may not use this file except in compliance with the License. 647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * You may obtain a copy of the License at 747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * 847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * http://www.apache.org/licenses/LICENSE-2.0 947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * 1047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * Unless required by applicable law or agreed to in writing, software 1147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * distributed under the License is distributed on an "AS IS" BASIS, 1247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * See the License for the specific language governing permissions and 1447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * limitations under the License. 1547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz */ 1647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 1747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzpackage com.android.managedprovisioning.task; 1847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 1947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE; 2047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static com.android.managedprovisioning.task.ManagedProfileSettingsTask.DEFAULT_CONTACT_REMOTE_SEARCH; 2147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Matchers.anyInt; 2247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Matchers.eq; 2347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Mockito.never; 2447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Mockito.verify; 2547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Mockito.verifyNoMoreInteractions; 2647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Mockito.when; 2747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 2847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.app.admin.DevicePolicyManager; 2947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.content.ComponentName; 3047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.content.Context; 3147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.content.pm.PackageManager; 3247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.graphics.Color; 3347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.os.UserManager; 3447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.support.test.filters.SmallTest; 3547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 3647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport com.android.managedprovisioning.common.SettingsFacade; 3747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport com.android.managedprovisioning.model.ProvisioningParams; 3847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 3947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport org.junit.Before; 4047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport org.junit.Test; 4147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport org.mockito.Mock; 4247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport org.mockito.MockitoAnnotations; 4347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 4447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz/** 4547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * Unit-tests for {@link ManagedProfileSettingsTask}. 4647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz */ 4747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz@SmallTest 4847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzpublic class ManagedProfileSettingsTaskTest { 4947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 5047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz private static final int TEST_USER_ID = 123; 5147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz private static final ComponentName ADMIN = new ComponentName("com.test.admin", ".Receiver"); 5247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz private static final ProvisioningParams NO_COLOR_PARAMS = new ProvisioningParams.Builder() 5347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE) 5447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz .setDeviceAdminComponentName(ADMIN) 5547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz .build(); 5647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz private static final ProvisioningParams COLOR_PARAMS = new ProvisioningParams.Builder() 5747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE) 5847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz .setDeviceAdminComponentName(ADMIN) 5947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz .setMainColor(Color.GREEN) 6047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz .build(); 6147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 6247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 6347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz @Mock private Context mContext; 6447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz @Mock private UserManager mUserManager; 6547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz @Mock private DevicePolicyManager mDevicePolicyManager; 6647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz @Mock private PackageManager mPackageManager; 6747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz @Mock private AbstractProvisioningTask.Callback mCallback; 6847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz @Mock private SettingsFacade mSettingsFacade; 6923d523bb7808baacf886d5bbbe1ba98fc73855d3Benjamin Franz @Mock private CrossProfileIntentFiltersSetter mCrossProfileIntentFiltersSetter; 7047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz private ManagedProfileSettingsTask mTask; 7147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 7247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz @Before 7347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz public void setUp() { 7447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz MockitoAnnotations.initMocks(this); 7547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 7647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); 7747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)) 7847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz .thenReturn(mDevicePolicyManager); 7947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz when(mContext.getPackageManager()).thenReturn(mPackageManager); 8047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 8147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz } 8247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 8347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz @Test 8447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz public void testNoMainColor() { 8547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // GIVEN that no main color was passed in the parameter 8623d523bb7808baacf886d5bbbe1ba98fc73855d3Benjamin Franz mTask = new ManagedProfileSettingsTask(mSettingsFacade, mCrossProfileIntentFiltersSetter, 8723d523bb7808baacf886d5bbbe1ba98fc73855d3Benjamin Franz mContext, NO_COLOR_PARAMS, mCallback); 8847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 8947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // WHEN running the task 9047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz mTask.run(TEST_USER_ID); 9147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 9247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // THEN success should be called 9347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz verify(mCallback).onSuccess(mTask); 9447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz verifyNoMoreInteractions(mCallback); 9547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 9647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // THEN no color should be stored in dpm 9747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz verify(mDevicePolicyManager, never()) 9847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz .setOrganizationColorForUser(anyInt(), eq(TEST_USER_ID)); 9947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 10047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // THEN user setup complete and contacts remote search should be set 10147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz verify(mSettingsFacade).setUserSetupCompleted(mContext, TEST_USER_ID); 10247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz verify(mSettingsFacade).setProfileContactRemoteSearch(mContext, 10347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz DEFAULT_CONTACT_REMOTE_SEARCH, TEST_USER_ID); 10447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 10547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // THEN cross profile intent filters are set 10623d523bb7808baacf886d5bbbe1ba98fc73855d3Benjamin Franz verify(mCrossProfileIntentFiltersSetter).setFilters(anyInt(), eq(TEST_USER_ID)); 10747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz } 10847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 10947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz @Test 11047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz public void testMainColor() { 11147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // GIVEN that a main color was passed in the parameter 11223d523bb7808baacf886d5bbbe1ba98fc73855d3Benjamin Franz mTask = new ManagedProfileSettingsTask(mSettingsFacade, mCrossProfileIntentFiltersSetter, 11323d523bb7808baacf886d5bbbe1ba98fc73855d3Benjamin Franz mContext, COLOR_PARAMS, mCallback); 11447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 11547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // WHEN running the task 11647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz mTask.run(TEST_USER_ID); 11747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 11847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // THEN success should be called 11947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz verify(mCallback).onSuccess(mTask); 12047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz verifyNoMoreInteractions(mCallback); 12147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 12247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // THEN the main color should be stored in dpm 12347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz verify(mDevicePolicyManager).setOrganizationColorForUser(Color.GREEN, TEST_USER_ID); 12447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 12547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // THEN user setup complete and contacts remote search should be set 12647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz verify(mSettingsFacade).setUserSetupCompleted(mContext, TEST_USER_ID); 12747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz verify(mSettingsFacade).setProfileContactRemoteSearch(mContext, 12847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz DEFAULT_CONTACT_REMOTE_SEARCH, TEST_USER_ID); 12947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz 13047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz // THEN cross profile intent filters are set 13123d523bb7808baacf886d5bbbe1ba98fc73855d3Benjamin Franz verify(mCrossProfileIntentFiltersSetter).setFilters(anyInt(), eq(TEST_USER_ID)); 13247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz } 13347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz} 134