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