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