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 17 package com.android.settings.datausage; 18 19 import static org.mockito.ArgumentMatchers.any; 20 import static org.mockito.ArgumentMatchers.anyInt; 21 import static org.mockito.ArgumentMatchers.anyString; 22 import static org.mockito.Mockito.doNothing; 23 import static org.mockito.Mockito.doReturn; 24 import static org.mockito.Mockito.never; 25 import static org.mockito.Mockito.spy; 26 import static org.mockito.Mockito.verify; 27 28 import android.content.Context; 29 import android.content.res.Resources; 30 import android.os.UserManager; 31 import android.telephony.SubscriptionManager; 32 33 import androidx.test.core.app.ApplicationProvider; 34 35 import com.android.settings.R; 36 import com.android.settings.testutils.shadow.ShadowDashboardFragment; 37 import com.android.settings.testutils.shadow.ShadowDataUsageUtils; 38 import com.android.settings.testutils.shadow.ShadowUserManager; 39 import com.android.settings.testutils.shadow.ShadowUtils; 40 41 import org.junit.Before; 42 import org.junit.Rule; 43 import org.junit.Test; 44 import org.junit.runner.RunWith; 45 import org.mockito.Mock; 46 import org.mockito.Spy; 47 import org.mockito.junit.MockitoJUnit; 48 import org.mockito.junit.MockitoRule; 49 import org.robolectric.RobolectricTestRunner; 50 import org.robolectric.annotation.Config; 51 import org.robolectric.shadows.ShadowSubscriptionManager; 52 53 @Config(shadows = { 54 ShadowUtils.class, 55 ShadowDataUsageUtils.class, 56 ShadowDashboardFragment.class, 57 ShadowUserManager.class, 58 }) 59 @RunWith(RobolectricTestRunner.class) 60 public class DataUsageSummaryTest { 61 @Rule 62 public final MockitoRule mMockitoRule = MockitoJUnit.rule(); 63 @Spy 64 Context mContext = ApplicationProvider.getApplicationContext(); 65 @Mock 66 private UserManager mUserManager; 67 68 private DataUsageSummary mDataUsageSummary; 69 70 /** 71 * This set up is contrived to get a passing test so that the build doesn't block without tests. 72 * These tests should be updated as code gets refactored to improve testability. 73 */ 74 75 @Before setUp()76 public void setUp() { 77 doReturn(mUserManager).when(mContext).getSystemService(UserManager.class); 78 doReturn(false).when(mUserManager).isGuestUser(); 79 80 ShadowUserManager.getShadow().setIsAdminUser(true); 81 82 Resources mResources = spy(mContext.getResources()); 83 doReturn(mResources).when(mContext).getResources(); 84 doReturn(true).when(mResources).getBoolean(R.bool.config_show_sim_info); 85 86 mDataUsageSummary = spy(new DataUsageSummary()); 87 doReturn(mContext).when(mDataUsageSummary).getContext(); 88 doNothing().when(mDataUsageSummary).enableProxySubscriptionManager(any()); 89 doReturn(true).when(mDataUsageSummary).removePreference(anyString()); 90 doNothing().when(mDataUsageSummary).addWifiSection(); 91 } 92 93 @Test 94 @Config(shadows = ShadowSubscriptionManager.class) configuration_withSim_shouldShowMobileAndWifi()95 public void configuration_withSim_shouldShowMobileAndWifi() { 96 ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true; 97 ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; 98 ShadowSubscriptionManager.setDefaultDataSubscriptionId(1); 99 100 final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary()); 101 doNothing().when(dataUsageSummary).enableProxySubscriptionManager(any()); 102 doReturn(true).when(dataUsageSummary).hasActiveSubscription(); 103 doReturn(mContext).when(dataUsageSummary).getContext(); 104 105 doReturn(true).when(dataUsageSummary).removePreference(anyString()); 106 doNothing().when(dataUsageSummary).addWifiSection(); 107 doNothing().when(dataUsageSummary).addMobileSection(1); 108 109 dataUsageSummary.onCreate(null); 110 111 verify(dataUsageSummary).addWifiSection(); 112 verify(dataUsageSummary).addMobileSection(anyInt()); 113 } 114 115 @Test configuration_withoutSim_shouldShowWifiSectionOnly()116 public void configuration_withoutSim_shouldShowWifiSectionOnly() { 117 ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true; 118 ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; 119 120 final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary()); 121 doNothing().when(dataUsageSummary).enableProxySubscriptionManager(any()); 122 doReturn(false).when(dataUsageSummary).hasActiveSubscription(); 123 doReturn(mContext).when(dataUsageSummary).getContext(); 124 125 doReturn(true).when(dataUsageSummary).removePreference(anyString()); 126 doNothing().when(dataUsageSummary).addWifiSection(); 127 doNothing().when(dataUsageSummary).addMobileSection(1); 128 129 dataUsageSummary.onCreate(null); 130 131 verify(dataUsageSummary).addWifiSection(); 132 verify(dataUsageSummary, never()).addMobileSection(anyInt()); 133 } 134 135 @Test configuration_withoutMobile_shouldShowWifiSectionOnly()136 public void configuration_withoutMobile_shouldShowWifiSectionOnly() { 137 ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = false; 138 ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; 139 140 final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary()); 141 doNothing().when(dataUsageSummary).enableProxySubscriptionManager(any()); 142 doReturn(false).when(dataUsageSummary).hasActiveSubscription(); 143 doReturn(mContext).when(dataUsageSummary).getContext(); 144 145 doReturn(true).when(dataUsageSummary).removePreference(anyString()); 146 doNothing().when(dataUsageSummary).addWifiSection(); 147 doNothing().when(dataUsageSummary).addMobileSection(1); 148 149 dataUsageSummary.onCreate(null); 150 151 verify(dataUsageSummary).addWifiSection(); 152 verify(dataUsageSummary, never()).addMobileSection(anyInt()); 153 } 154 155 @Test 156 @Config(shadows = ShadowSubscriptionManager.class) configuration_invalidDataSusbscription_shouldShowWifiSectionOnly()157 public void configuration_invalidDataSusbscription_shouldShowWifiSectionOnly() { 158 ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true; 159 ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; 160 ShadowSubscriptionManager.setDefaultDataSubscriptionId( 161 SubscriptionManager.INVALID_SUBSCRIPTION_ID); 162 163 final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary()); 164 doNothing().when(dataUsageSummary).enableProxySubscriptionManager(any()); 165 doReturn(false).when(dataUsageSummary).hasActiveSubscription(); 166 doReturn(mContext).when(dataUsageSummary).getContext(); 167 168 doReturn(true).when(dataUsageSummary).removePreference(anyString()); 169 doNothing().when(dataUsageSummary).addWifiSection(); 170 doNothing().when(dataUsageSummary).addMobileSection(1); 171 172 dataUsageSummary.onCreate(null); 173 174 verify(dataUsageSummary).addWifiSection(); 175 verify(dataUsageSummary, never()).addMobileSection(anyInt()); 176 } 177 178 @Test onCreate_isNotGuestUser_shouldNotFinish()179 public void onCreate_isNotGuestUser_shouldNotFinish() { 180 doReturn(false).when(mUserManager).isGuestUser(); 181 182 mDataUsageSummary.onCreate(null); 183 184 verify(mDataUsageSummary, never()).finish(); 185 } 186 187 @Test onCreate_isGuestUser_shouldFinish()188 public void onCreate_isGuestUser_shouldFinish() { 189 doReturn(true).when(mUserManager).isGuestUser(); 190 191 mDataUsageSummary.onCreate(null); 192 193 verify(mDataUsageSummary).finish(); 194 } 195 } 196