1ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski/*
2ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski * Copyright (C) 2017 The Android Open Source Project
3ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski *
4ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski * Licensed under the Apache License, Version 2.0 (the "License");
5ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski * you may not use this file except in compliance with the License.
6ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski * You may obtain a copy of the License at
7ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski *
8ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski *      http://www.apache.org/licenses/LICENSE-2.0
9ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski *
10ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski * Unless required by applicable law or agreed to in writing, software
11ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski * distributed under the License is distributed on an "AS IS" BASIS,
12ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski * See the License for the specific language governing permissions and
14ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski * limitations under the License.
15ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski */
16ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
17ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskipackage com.android.settings.enterprise;
18ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
19ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport android.content.Context;
20ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport android.content.res.Resources;
21ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport android.support.v7.preference.Preference;
22ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
23ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport com.android.settings.R;
24ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport com.android.settings.SettingsRobolectricTestRunner;
25ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport com.android.settings.TestConfig;
26493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowskiimport com.android.settings.core.PreferenceAvailabilityObserver;
27ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport com.android.settings.testutils.FakeFeatureFactory;
28ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
29ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport org.junit.Before;
30ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport org.junit.Test;
31ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport org.junit.runner.RunWith;
32ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport org.mockito.Answers;
33ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport org.mockito.Mock;
34ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport org.mockito.MockitoAnnotations;
35ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport org.robolectric.annotation.Config;
36ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
37ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport static com.google.common.truth.Truth.assertThat;
38493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowskiimport static org.mockito.Mockito.verify;
39ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskiimport static org.mockito.Mockito.when;
40ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
41ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski/**
42ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski * Tests for {@link EnterprisePrivacyPreferenceController}.
43ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski */
44ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski@RunWith(SettingsRobolectricTestRunner.class)
45ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
46ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowskipublic final class EnterprisePrivacyPreferenceControllerTest {
47ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
48493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski    private static final String MANAGED_GENERIC = "managed by organization";
49493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski    private static final String MANAGED_WITH_NAME = "managed by Foo, Inc.";
50493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski    private static final String MANAGING_ORGANIZATION = "Foo, Inc.";
51493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski    private static final String KEY_ENTERPRISE_PRIVACY = "enterprise_privacy";
52ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
53ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
54ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    private Context mContext;
55ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    private FakeFeatureFactory mFeatureFactory;
56493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski    @Mock private PreferenceAvailabilityObserver mObserver;
57ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
58ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    private EnterprisePrivacyPreferenceController mController;
59ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
60ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    @Before
61ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    public void setUp() {
62ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        MockitoAnnotations.initMocks(this);
63ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        FakeFeatureFactory.setupForTest(mContext);
64ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
65ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        mController = new EnterprisePrivacyPreferenceController(mContext, null /* lifecycle */);
66493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski        mController.setAvailabilityObserver(mObserver);
67493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski    }
68493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski
69493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski    @Test
70493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski    public void testGetAvailabilityObserver() {
71493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski        assertThat(mController.getAvailabilityObserver()).isEqualTo(mObserver);
72ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    }
73ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
74ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    @Test
75ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    public void testUpdateState() {
76ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        final Preference preference = new Preference(mContext, null, 0, 0);
77ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
78ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        when(mContext.getString(R.string.enterprise_privacy_settings_summary_generic))
79ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski                .thenReturn(MANAGED_GENERIC);
80ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        when(mFeatureFactory.enterprisePrivacyFeatureProvider.getDeviceOwnerOrganizationName())
81ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski                .thenReturn(null);
82ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        mController.updateState(preference);
83ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        assertThat(preference.getSummary()).isEqualTo(MANAGED_GENERIC);
84ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
85ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        when(mContext.getResources().getString(
86ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski                R.string.enterprise_privacy_settings_summary_with_name, MANAGING_ORGANIZATION))
87ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski                .thenReturn(MANAGED_WITH_NAME);
88ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        when(mFeatureFactory.enterprisePrivacyFeatureProvider.getDeviceOwnerOrganizationName())
89ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski                .thenReturn(MANAGING_ORGANIZATION);
90ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        mController.updateState(preference);
91ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        assertThat(preference.getSummary()).isEqualTo(MANAGED_WITH_NAME);
92ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski      }
93ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
94ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    @Test
95ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    public void testIsAvailable() {
96ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        when(mFeatureFactory.enterprisePrivacyFeatureProvider.hasDeviceOwner()).thenReturn(false);
97ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        assertThat(mController.isAvailable()).isFalse();
98493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski        verify(mObserver).onPreferenceAvailabilityUpdated(KEY_ENTERPRISE_PRIVACY, false);
99ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
100ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        when(mFeatureFactory.enterprisePrivacyFeatureProvider.hasDeviceOwner()).thenReturn(true);
101ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        assertThat(mController.isAvailable()).isTrue();
102493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski        verify(mObserver).onPreferenceAvailabilityUpdated(KEY_ENTERPRISE_PRIVACY, true);
103ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    }
104ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
105ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    @Test
106ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    public void testHandlePreferenceTreeClick() {
107ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski        assertThat(mController.handlePreferenceTreeClick(new Preference(mContext, null, 0, 0)))
108ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski                .isFalse();
109ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    }
110ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski
111ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    @Test
112ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    public void testGetPreferenceKey() {
113493495452a93c708c9181d5837a8351f4e0b07ebBartosz Fabianowski        assertThat(mController.getPreferenceKey()).isEqualTo(KEY_ENTERPRISE_PRIVACY);
114ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski    }
115ba66a0ef09a6bbeb6e7e2cfbef82f15b9b625bc8Bartosz Fabianowski}
116