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