ManagedProfileSettingsTaskTest.java revision 47a23e3a089354bfbc71610f6ef3c59366b20f3a
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.any;
2247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Matchers.anyInt;
2347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Matchers.eq;
2447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Mockito.atLeastOnce;
2547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Mockito.never;
2647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Mockito.verify;
2747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Mockito.verifyNoMoreInteractions;
2847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport static org.mockito.Mockito.when;
2947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
3047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.app.admin.DevicePolicyManager;
3147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.content.ComponentName;
3247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.content.Context;
3347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.content.IntentFilter;
3447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.content.pm.PackageManager;
3547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.graphics.Color;
3647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.os.UserManager;
3747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport android.support.test.filters.SmallTest;
3847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
3947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport com.android.managedprovisioning.common.SettingsFacade;
4047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport com.android.managedprovisioning.model.ProvisioningParams;
4147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
4247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport org.junit.Before;
4347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport org.junit.Test;
4447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport org.mockito.Mock;
4547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzimport org.mockito.MockitoAnnotations;
4647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
4747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz/**
4847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz * Unit-tests for {@link ManagedProfileSettingsTask}.
4947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz */
5047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz@SmallTest
5147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franzpublic class ManagedProfileSettingsTaskTest {
5247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
5347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    private static final int TEST_USER_ID = 123;
5447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    private static final ComponentName ADMIN = new ComponentName("com.test.admin", ".Receiver");
5547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    private static final ProvisioningParams NO_COLOR_PARAMS = new ProvisioningParams.Builder()
5647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz            .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE)
5747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz            .setDeviceAdminComponentName(ADMIN)
5847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz            .build();
5947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    private static final ProvisioningParams COLOR_PARAMS = new ProvisioningParams.Builder()
6047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz            .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE)
6147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz            .setDeviceAdminComponentName(ADMIN)
6247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz            .setMainColor(Color.GREEN)
6347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz            .build();
6447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
6547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
6647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    @Mock private Context mContext;
6747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    @Mock private UserManager mUserManager;
6847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    @Mock private DevicePolicyManager mDevicePolicyManager;
6947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    @Mock private PackageManager mPackageManager;
7047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    @Mock private AbstractProvisioningTask.Callback mCallback;
7147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    @Mock private SettingsFacade mSettingsFacade;
7247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    private ManagedProfileSettingsTask mTask;
7347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
7447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    @Before
7547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    public void setUp() {
7647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        MockitoAnnotations.initMocks(this);
7747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
7847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
7947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE))
8047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                .thenReturn(mDevicePolicyManager);
8147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        when(mContext.getPackageManager()).thenReturn(mPackageManager);
8247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
8347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    }
8447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
8547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    @Test
8647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    public void testNoMainColor() {
8747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // GIVEN that no main color was passed in the parameter
8847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        mTask = new ManagedProfileSettingsTask(mSettingsFacade, mContext, NO_COLOR_PARAMS,
8947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                mCallback);
9047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
9147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // WHEN running the task
9247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        mTask.run(TEST_USER_ID);
9347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
9447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // THEN success should be called
9547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verify(mCallback).onSuccess(mTask);
9647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verifyNoMoreInteractions(mCallback);
9747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
9847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // THEN no color should be stored in dpm
9947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verify(mDevicePolicyManager, never())
10047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                .setOrganizationColorForUser(anyInt(), eq(TEST_USER_ID));
10147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
10247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // THEN user setup complete and contacts remote search should be set
10347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verify(mSettingsFacade).setUserSetupCompleted(mContext, TEST_USER_ID);
10447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verify(mSettingsFacade).setProfileContactRemoteSearch(mContext,
10547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                DEFAULT_CONTACT_REMOTE_SEARCH, TEST_USER_ID);
10647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
10747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // THEN cross profile intent filters are set
10847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verify(mPackageManager, atLeastOnce()).addCrossProfileIntentFilter(
10947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                any(IntentFilter.class),
11047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                eq(TEST_USER_ID),
11147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                anyInt(),
11247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                anyInt());
11347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    }
11447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
11547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    @Test
11647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    public void testMainColor() {
11747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // GIVEN that a main color was passed in the parameter
11847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        mTask = new ManagedProfileSettingsTask(mSettingsFacade, mContext, COLOR_PARAMS,
11947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                mCallback);
12047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
12147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // WHEN running the task
12247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        mTask.run(TEST_USER_ID);
12347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
12447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // THEN success should be called
12547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verify(mCallback).onSuccess(mTask);
12647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verifyNoMoreInteractions(mCallback);
12747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
12847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // THEN the main color should be stored in dpm
12947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verify(mDevicePolicyManager).setOrganizationColorForUser(Color.GREEN, TEST_USER_ID);
13047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
13147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // THEN user setup complete and contacts remote search should be set
13247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verify(mSettingsFacade).setUserSetupCompleted(mContext, TEST_USER_ID);
13347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verify(mSettingsFacade).setProfileContactRemoteSearch(mContext,
13447a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                DEFAULT_CONTACT_REMOTE_SEARCH, TEST_USER_ID);
13547a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz
13647a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        // THEN cross profile intent filters are set
13747a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz        verify(mPackageManager, atLeastOnce()).addCrossProfileIntentFilter(
13847a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                any(IntentFilter.class),
13947a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                eq(TEST_USER_ID),
14047a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                anyInt(),
14147a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz                anyInt());
14247a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz    }
14347a23e3a089354bfbc71610f6ef3c59366b20f3aBenjamin Franz}
144