• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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 package com.android.settings.system;
17 
18 import static android.os.SystemUpdateManager.KEY_STATUS;
19 import static android.os.SystemUpdateManager.KEY_TITLE;
20 import static android.os.SystemUpdateManager.STATUS_IDLE;
21 import static android.os.SystemUpdateManager.STATUS_UNKNOWN;
22 import static android.os.SystemUpdateManager.STATUS_WAITING_DOWNLOAD;
23 
24 import static com.google.common.truth.Truth.assertThat;
25 
26 import static org.mockito.Mockito.when;
27 
28 import android.content.Context;
29 import android.os.Build;
30 import android.os.Bundle;
31 import android.os.SystemUpdateManager;
32 
33 import androidx.preference.Preference;
34 import androidx.preference.PreferenceScreen;
35 
36 import com.android.settings.R;
37 import com.android.settings.testutils.shadow.ShadowUserManager;
38 
39 import org.junit.After;
40 import org.junit.Before;
41 import org.junit.Test;
42 import org.junit.runner.RunWith;
43 import org.mockito.Mock;
44 import org.mockito.MockitoAnnotations;
45 import org.robolectric.RobolectricTestRunner;
46 import org.robolectric.RuntimeEnvironment;
47 import org.robolectric.annotation.Config;
48 import org.robolectric.shadows.ShadowApplication;
49 
50 import java.util.ArrayList;
51 import java.util.List;
52 
53 @RunWith(RobolectricTestRunner.class)
54 @Config(shadows = ShadowUserManager.class)
55 public class SystemUpdatePreferenceControllerTest {
56 
57     @Mock
58     private PreferenceScreen mScreen;
59     @Mock
60     private SystemUpdateManager mSystemUpdateManager;
61 
62     private Context mContext;
63     private ShadowUserManager mShadowUserManager;
64     private SystemUpdatePreferenceController mController;
65     private Preference mPreference;
66 
67     @Before
setUp()68     public void setUp() {
69         MockitoAnnotations.initMocks(this);
70         mContext = RuntimeEnvironment.application;
71         mShadowUserManager = ShadowUserManager.getShadow();
72 
73         ShadowApplication.getInstance().setSystemService(Context.SYSTEM_UPDATE_SERVICE,
74                 mSystemUpdateManager);
75         mController = new SystemUpdatePreferenceController(mContext);
76         mPreference = new Preference(RuntimeEnvironment.application);
77         mPreference.setKey(mController.getPreferenceKey());
78         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
79     }
80 
81     @After
cleanUp()82     public void cleanUp() {
83         mShadowUserManager.setIsAdminUser(false);
84     }
85 
86     @Test
updateNonIndexable_ifAvailable_shouldNotUpdate()87     public void updateNonIndexable_ifAvailable_shouldNotUpdate() {
88         final List<String> keys = new ArrayList<>();
89         mShadowUserManager.setIsAdminUser(true);
90 
91         mController.updateNonIndexableKeys(keys);
92 
93         assertThat(keys).isEmpty();
94     }
95 
96     @Test
updateNonIndexable_ifNotAvailable_shouldUpdate()97     public void updateNonIndexable_ifNotAvailable_shouldUpdate() {
98         mShadowUserManager.setIsAdminUser(false);
99         final List<String> keys = new ArrayList<>();
100 
101         mController.updateNonIndexableKeys(keys);
102 
103         assertThat(keys).hasSize(1);
104     }
105 
106     @Test
displayPrefs_ifVisible_butNotAdminUser_shouldNotDisplay()107     public void displayPrefs_ifVisible_butNotAdminUser_shouldNotDisplay() {
108         mShadowUserManager.setIsAdminUser(false);
109         mController.displayPreference(mScreen);
110 
111         assertThat(mPreference.isVisible()).isFalse();
112     }
113 
114     @Test
115     @Config(qualifiers = "mcc999")
displayPrefs_ifAdminUser_butNotVisible_shouldNotDisplay()116     public void displayPrefs_ifAdminUser_butNotVisible_shouldNotDisplay() {
117         mShadowUserManager.setIsAdminUser(true);
118         mController.displayPreference(mScreen);
119 
120         assertThat(mPreference.isVisible()).isFalse();
121     }
122 
123     @Test
displayPrefs_ifAvailable_shouldDisplay()124     public void displayPrefs_ifAvailable_shouldDisplay() {
125         mShadowUserManager.setIsAdminUser(true);
126 
127         mController.displayPreference(mScreen);
128 
129         assertThat(mPreference.isVisible()).isTrue();
130     }
131 
132     @Test
updateState_systemUpdateStatusUnknown_shouldSetToAndroidVersion()133     public void updateState_systemUpdateStatusUnknown_shouldSetToAndroidVersion() {
134         final Bundle bundle = new Bundle();
135         bundle.putInt(KEY_STATUS, STATUS_UNKNOWN);
136         when(mSystemUpdateManager.retrieveSystemUpdateInfo()).thenReturn(bundle);
137 
138         mController.updateState(mPreference);
139 
140         assertThat(mPreference.getSummary())
141                 .isEqualTo(mContext.getString(R.string.android_version_summary,
142                         Build.VERSION.RELEASE));
143     }
144 
145     @Test
updateState_systemUpdateStatusIdle_shouldSetToAndroidVersion()146     public void updateState_systemUpdateStatusIdle_shouldSetToAndroidVersion() {
147         final String testReleaseName = "ANDROID TEST VERSION";
148 
149         final Bundle bundle = new Bundle();
150         bundle.putInt(KEY_STATUS, STATUS_IDLE);
151         bundle.putString(KEY_TITLE, testReleaseName);
152         when(mSystemUpdateManager.retrieveSystemUpdateInfo()).thenReturn(bundle);
153 
154         mController.updateState(mPreference);
155 
156         assertThat(mPreference.getSummary())
157                 .isEqualTo(mContext.getString(R.string.android_version_summary, testReleaseName));
158     }
159 
160     @Test
updateState_systemUpdateInProgress_shouldSetToUpdatePending()161     public void updateState_systemUpdateInProgress_shouldSetToUpdatePending() {
162         final Bundle bundle = new Bundle();
163         bundle.putInt(KEY_STATUS, STATUS_WAITING_DOWNLOAD);
164         when(mSystemUpdateManager.retrieveSystemUpdateInfo()).thenReturn(bundle);
165 
166         mController.updateState(mPreference);
167 
168         assertThat(mPreference.getSummary())
169                 .isEqualTo(mContext.getString(R.string.android_version_pending_update_summary));
170     }
171 }