• 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 
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