EnterpriseInstalledPackagesPreferenceControllerTest.java revision 5dc168af1add029df23674f60eb4130b82012e70
1/*
2 * Copyright (C) 2017 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
17package com.android.settings.enterprise;
18
19import android.content.Context;
20import android.content.pm.PackageManager;
21import android.content.res.Resources;
22import android.support.v7.preference.Preference;
23
24import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
25import com.android.settings.R;
26import com.android.settings.SettingsRobolectricTestRunner;
27import com.android.settings.TestConfig;
28import com.android.settings.applications.ApplicationFeatureProvider;
29import com.android.settings.testutils.FakeFeatureFactory;
30
31import org.junit.Before;
32import org.junit.Test;
33import org.junit.runner.RunWith;
34import org.mockito.Answers;
35import org.mockito.Mock;
36import org.mockito.MockitoAnnotations;
37import org.mockito.invocation.InvocationOnMock;
38import org.mockito.stubbing.Answer;
39import org.robolectric.annotation.Config;
40
41import static com.google.common.truth.Truth.assertThat;
42import static org.mockito.Mockito.anyObject;
43import static org.mockito.Mockito.doAnswer;
44import static org.mockito.Mockito.eq;
45import static org.mockito.Mockito.when;
46
47/**
48 * Tests for {@link EnterpriseInstalledPackagesPreferenceController}.
49 */
50@RunWith(SettingsRobolectricTestRunner.class)
51@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
52public final class EnterpriseInstalledPackagesPreferenceControllerTest {
53
54    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
55    private Context mContext;
56    private FakeFeatureFactory mFeatureFactory;
57
58    private EnterpriseInstalledPackagesPreferenceController mController;
59
60    @Before
61    public void setUp() {
62        MockitoAnnotations.initMocks(this);
63        FakeFeatureFactory.setupForTest(mContext);
64        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
65        mController = new EnterpriseInstalledPackagesPreferenceController(mContext,
66                null /* lifecycle */, true /* async */);
67    }
68
69    private void setNumberOfEnterpriseInstalledPackages(int number, boolean async) {
70        doAnswer(new Answer() {
71            public Object answer(InvocationOnMock invocation) {
72                ((ApplicationFeatureProvider.NumberOfAppsCallback)
73                        invocation.getArguments()[2]).onNumberOfAppsResult(number);
74                return null;
75            }}).when(mFeatureFactory.applicationFeatureProvider)
76                    .calculateNumberOfInstalledApps(eq(PackageManager.INSTALL_REASON_POLICY),
77                            eq(async), anyObject());
78    }
79
80    @Test
81    public void testUpdateState() {
82        final Preference preference = new Preference(mContext, null, 0, 0);
83        preference.setVisible(true);
84
85        setNumberOfEnterpriseInstalledPackages(0, true /* async */);
86        mController.updateState(preference);
87        assertThat(preference.isVisible()).isFalse();
88
89        setNumberOfEnterpriseInstalledPackages(20, true /* async */);
90        when(mContext.getResources().getQuantityString(R.plurals.enterprise_privacy_number_packages,
91                20, 20)).thenReturn("20 packages");
92        mController.updateState(preference);
93        assertThat(preference.getSummary()).isEqualTo("20 packages");
94        assertThat(preference.isVisible()).isTrue();
95    }
96
97    @Test
98    public void testIsAvailableSync() {
99        EnterpriseInstalledPackagesPreferenceController controller
100                = new EnterpriseInstalledPackagesPreferenceController(mContext,
101                        null /* lifecycle */, false /* async */);
102
103        setNumberOfEnterpriseInstalledPackages(0, false /* async */);
104        assertThat(controller.isAvailable()).isFalse();
105
106        setNumberOfEnterpriseInstalledPackages(20, false /* async */);
107        assertThat(controller.isAvailable()).isTrue();
108    }
109
110    @Test
111    public void testIsAvailableAsync() {
112        setNumberOfEnterpriseInstalledPackages(0, true /* async */);
113        assertThat(mController.isAvailable()).isTrue();
114
115        setNumberOfEnterpriseInstalledPackages(20, true /* async */);
116        assertThat(mController.isAvailable()).isTrue();
117    }
118
119    @Test
120    public void testHandlePreferenceTreeClick() {
121        assertThat(mController.handlePreferenceTreeClick(new Preference(mContext, null, 0, 0)))
122                .isFalse();
123    }
124
125    @Test
126    public void testGetPreferenceKey() {
127        assertThat(mController.getPreferenceKey())
128                .isEqualTo("number_enterprise_installed_packages");
129    }
130}
131