13cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak/*
23cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak * Copyright 2017, The Android Open Source Project
33cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak *
43cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak * Licensed under the Apache License, Version 2.0 (the "License");
53cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak * you may not use this file except in compliance with the License.
63cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak * You may obtain a copy of the License at
73cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak *
83cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak *     http://www.apache.org/licenses/LICENSE-2.0
93cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak *
103cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak * Unless required by applicable law or agreed to in writing, software
113cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak * distributed under the License is distributed on an "AS IS" BASIS,
123cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak * See the License for the specific language governing permissions and
143cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak * limitations under the License.
153cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak */
163cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakpackage com.android.managedprovisioning.model;
173cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
183cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE;
193cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE;
203cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
2176c9d6f39b203080117409b1548eea0aeb60ef47Tony Makimport static com.android.managedprovisioning.model.CustomizationParams.DEFAULT_STATUS_BAR_COLOR_ID;
223cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
233cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport static org.hamcrest.MatcherAssert.assertThat;
243cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport static org.hamcrest.Matchers.equalTo;
253cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport static org.hamcrest.Matchers.nullValue;
2676c9d6f39b203080117409b1548eea0aeb60ef47Tony Makimport static org.mockito.ArgumentMatchers.any;
2776c9d6f39b203080117409b1548eea0aeb60ef47Tony Makimport static org.mockito.Mockito.when;
283cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
293cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport android.content.ComponentName;
303cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport android.content.Context;
313cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport android.graphics.Color;
323cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport android.support.test.InstrumentationRegistry;
333cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport android.support.test.filters.SmallTest;
343cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
353cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport com.android.managedprovisioning.common.Utils;
363cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
3776c9d6f39b203080117409b1548eea0aeb60ef47Tony Makimport org.junit.Before;
383cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakimport org.junit.Test;
3976c9d6f39b203080117409b1548eea0aeb60ef47Tony Makimport org.junit.runner.RunWith;
4076c9d6f39b203080117409b1548eea0aeb60ef47Tony Makimport org.mockito.Mock;
4176c9d6f39b203080117409b1548eea0aeb60ef47Tony Makimport org.mockito.junit.MockitoJUnitRunner;
423cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
433cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak@SmallTest
4476c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak@RunWith(MockitoJUnitRunner.class)
453cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzakpublic class CustomizationParamsTest {
463cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    private static final Context mContext = InstrumentationRegistry.getTargetContext();
473cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    private static final ComponentName COMPONENT_NAME = new ComponentName("org.test", "ATestDPC");
483cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    private static final int SAMPLE_COLOR = Color.rgb(11, 22, 33);
493cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    private static final String SAMPLE_URL = "http://d.android.com";
503cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    private static final String SAMPLE_ORG_NAME = "Organization Inc.";
5176c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak    private static final int DEFAULT_MAIN_COLOR = Color.rgb(99, 99, 99);
5276c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak
5376c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak    @Mock
5476c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak    private Utils mUtils;
5576c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak
5676c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak    @Before
5776c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak    public void setup() {
5876c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak        when(mUtils.getAccentColor(any())).thenReturn(DEFAULT_MAIN_COLOR);
5976c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak    }
603cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
613cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    @Test
623cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    public void defaultColorManagedProfile() {
633cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // given
643cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        ProvisioningParams params = createParams(ACTION_PROVISION_MANAGED_PROFILE, null, null,
653cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak                null);
663cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
673cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // when
683cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        CustomizationParams instance = createInstance(params);
693cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
703cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // then
7176c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak        assertThat(instance.statusBarColor, equalTo(getColor(DEFAULT_STATUS_BAR_COLOR_ID)));
7276c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak        assertThat(instance.mainColor, equalTo(DEFAULT_MAIN_COLOR));
733cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
743cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
753cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    @Test
763cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    public void defaultColorDeviceOwner() {
773cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // given
783cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        ProvisioningParams params = createParams(ACTION_PROVISION_MANAGED_DEVICE, null, null, null);
793cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
803cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // when
813cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        CustomizationParams instance = createInstance(params);
823cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
833cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // then
8476c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak        assertThat(instance.statusBarColor, equalTo(getColor(DEFAULT_STATUS_BAR_COLOR_ID)));
8576c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak        assertThat(instance.mainColor, equalTo(DEFAULT_MAIN_COLOR));
863cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
873cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
883cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    @Test
893cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    public void respectsMainColor() {
903cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // given
913cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        ProvisioningParams params = createParams(null, SAMPLE_COLOR, null, null);
923cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
933cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // when
943cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        CustomizationParams instance = createInstance(params);
953cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
963cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // then
97b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak        assertThat(instance.statusBarColor, equalTo(SAMPLE_COLOR));
9876c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak        assertThat(instance.mainColor, equalTo(SAMPLE_COLOR));
993cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
1003cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1013cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    @Test
1023cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    public void orgNameDefaultsToNull() {
1033cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // given
1043cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        ProvisioningParams params = createParams(null, null, null, null);
1053cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1063cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // when
1073cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        CustomizationParams instance = createInstance(params);
1083cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1093cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // then
1103cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        assertThat(instance.orgName, nullValue());
1113cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
1123cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1133cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    @Test
1143cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    public void respectsOrgName() {
1153cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // given
1163cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        ProvisioningParams params = createParams(null, null, null, SAMPLE_ORG_NAME);
1173cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1183cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // when
1193cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        CustomizationParams instance = createInstance(params);
1203cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1213cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // then
1223cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        assertThat(instance.orgName, equalTo(SAMPLE_ORG_NAME));
1233cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
1243cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1253cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    @Test
1263cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    public void respectsUrl() {
1273cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // given
1283cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        ProvisioningParams params = createParams(null, null, SAMPLE_URL, null);
1293cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1303cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // when
1313cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        CustomizationParams instance = createInstance(params);
1323cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1333cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // then
1343cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        assertThat(instance.supportUrl, equalTo(SAMPLE_URL));
1353cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
1363cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1373cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    @Test
1383cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    public void urlDefaultsToNull() {
1393cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // given
1403cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        ProvisioningParams params = createParams(null, null, null, null);
1413cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1423cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // when
1433cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        CustomizationParams instance = createInstance(params);
1443cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1453cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // then
1463cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        assertThat(instance.supportUrl, nullValue());
1473cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
1483cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1493cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    @Test
1503cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    public void ignoresInvalidUrl() {
1513cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // given
1523cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        ProvisioningParams params = createParams(null, null, "not a valid web url", null);
1533cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1543cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // when
1553cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        CustomizationParams instance = createInstance(params);
1563cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1573cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        // then
1583cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        assertThat(instance.supportUrl, nullValue());
1593cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
1603cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1613cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    private CustomizationParams createInstance(ProvisioningParams params) {
16276c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak        return CustomizationParams.createInstance(params, mContext, mUtils);
1633cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
1643cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1653cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    private ProvisioningParams createParams(String provisioningAction, Integer mainColor,
1663cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak            String supportUrl, String orgName) {
1673cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        ProvisioningParams.Builder builder =
1683cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak                new ProvisioningParams.Builder().setDeviceAdminComponentName(COMPONENT_NAME);
1693cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1703cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        builder.setProvisioningAction(provisioningAction == null ? ACTION_PROVISION_MANAGED_DEVICE
1713cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak                : provisioningAction);
1723cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1733cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        if (mainColor != null) {
1743cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak            builder.setMainColor(mainColor);
1753cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        }
1763cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1773cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        if (supportUrl != null) {
1783cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak            builder.setSupportUrl(supportUrl);
1793cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        }
1803cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1813cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        if (orgName != null) {
1823cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak            builder.setOrganizationName(orgName);
1833cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        }
1843cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
1853cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak        return builder.build();
1863cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
1873cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak
18876c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak    private int getColor(int colorId) {
18976c9d6f39b203080117409b1548eea0aeb60ef47Tony Mak        return mContext.getColor(colorId);
1903cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak    }
1913cc3880a7d61101d439cf6c5fdd351e22fdc8f4fJakub Gielzak}