1 package com.android.settings.wifi;
2 
3 import static com.android.settings.wifi.ConfigureWifiSettings.KEY_INSTALL_CREDENTIALS;
4 
5 import static com.google.common.truth.Truth.assertThat;
6 
7 import static org.mockito.Mockito.any;
8 import static org.mockito.Mockito.doReturn;
9 import static org.mockito.Mockito.mock;
10 import static org.mockito.Mockito.never;
11 import static org.mockito.Mockito.spy;
12 import static org.mockito.Mockito.verify;
13 import static org.mockito.Mockito.when;
14 
15 import android.content.Context;
16 import android.net.wifi.WifiManager;
17 import android.os.Bundle;
18 import android.os.UserManager;
19 import android.view.View;
20 import android.widget.TextView;
21 
22 import androidx.annotation.Nullable;
23 import androidx.fragment.app.FragmentActivity;
24 import androidx.preference.Preference;
25 import androidx.preference.PreferenceScreen;
26 import androidx.test.core.app.ApplicationProvider;
27 
28 import com.android.settings.dashboard.DashboardFragment;
29 import com.android.settings.testutils.XmlTestUtils;
30 import com.android.settingslib.core.AbstractPreferenceController;
31 
32 import org.junit.Before;
33 import org.junit.Rule;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 import org.mockito.Mock;
37 import org.mockito.Spy;
38 import org.mockito.junit.MockitoJUnit;
39 import org.mockito.junit.MockitoRule;
40 import org.robolectric.RobolectricTestRunner;
41 import org.robolectric.annotation.Config;
42 import org.robolectric.annotation.Implementation;
43 import org.robolectric.annotation.Implements;
44 
45 import java.util.List;
46 
47 @RunWith(RobolectricTestRunner.class)
48 @Config(shadows = {
49         com.android.settings.testutils.shadow.ShadowFragment.class,
50 })
51 public class ConfigureWifiSettingsTest {
52 
53     @Rule
54     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
55     @Spy
56     Context mContext = ApplicationProvider.getApplicationContext();
57     @Mock
58     UserManager mUserManager;
59     @Mock
60     WifiManager mWifiManager;
61     @Mock
62     FragmentActivity mActivity;
63     @Mock
64     WifiWakeupPreferenceController mWifiWakeupPreferenceController;
65     @Mock
66     Preference mInstallCredentialsPref;
67     @Mock
68     PreferenceScreen mPreferenceScreen;
69     @Mock
70     TextView mEmptyView;
71 
72     TestConfigureWifiSettings mSettings;
73 
74     @Before
setUp()75     public void setUp() {
76         when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
77         when(mUserManager.isGuestUser()).thenReturn(false);
78         when(mActivity.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
79 
80         mSettings = spy(new TestConfigureWifiSettings());
81         when(mSettings.getContext()).thenReturn(mContext);
82         when(mSettings.getActivity()).thenReturn(mActivity);
83         when(mSettings.use(WifiWakeupPreferenceController.class))
84                 .thenReturn(mWifiWakeupPreferenceController);
85         when(mSettings.findPreference(KEY_INSTALL_CREDENTIALS)).thenReturn(mInstallCredentialsPref);
86     }
87 
88     @Test
onAttach_isNotGuestUser_setupController()89     public void onAttach_isNotGuestUser_setupController() {
90         when(mUserManager.isGuestUser()).thenReturn(false);
91 
92         mSettings.onAttach(mContext);
93 
94         verify(mWifiWakeupPreferenceController).setFragment(any());
95     }
96 
97     @Test
onAttach_isGuestUser_doNotSetupController()98     public void onAttach_isGuestUser_doNotSetupController() {
99         when(mUserManager.isGuestUser()).thenReturn(true);
100 
101         mSettings.onAttach(mContext);
102 
103         verify(mWifiWakeupPreferenceController, never()).setFragment(any());
104     }
105 
106     @Test
107     @Config(shadows = ShadowDashboardFragment.class)
onCreate_isNotGuestUser_setupPreference()108     public void onCreate_isNotGuestUser_setupPreference() {
109         when(mUserManager.isGuestUser()).thenReturn(false);
110 
111         mSettings.onCreate(null);
112 
113         verify(mInstallCredentialsPref).setOnPreferenceClickListener(any());
114     }
115 
116     @Test
117     @Config(shadows = ShadowDashboardFragment.class)
onCreate_isGuestUser_doNotSetupPreference()118     public void onCreate_isGuestUser_doNotSetupPreference() {
119         when(mUserManager.isGuestUser()).thenReturn(true);
120 
121         mSettings.onCreate(null);
122 
123         verify(mInstallCredentialsPref, never()).setOnPreferenceClickListener(any());
124     }
125 
126     @Test
127     @Config(shadows = ShadowDashboardFragment.class)
onViewCreated_isNotGuestUser_doNotRestrictUi()128     public void onViewCreated_isNotGuestUser_doNotRestrictUi() {
129         when(mUserManager.isGuestUser()).thenReturn(false);
130         when(mActivity.findViewById(android.R.id.empty)).thenReturn(mEmptyView);
131         doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen();
132 
133         mSettings.onViewCreated(mock(View.class), null);
134 
135         verify(mEmptyView, never()).setVisibility(View.VISIBLE);
136         verify(mPreferenceScreen, never()).removeAll();
137     }
138 
139     @Test
140     @Config(shadows = ShadowDashboardFragment.class)
onViewCreated_isGuestUser_restrictUi()141     public void onViewCreated_isGuestUser_restrictUi() {
142         when(mUserManager.isGuestUser()).thenReturn(true);
143         when(mActivity.findViewById(android.R.id.empty)).thenReturn(mEmptyView);
144         doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen();
145 
146         mSettings.onViewCreated(mock(View.class), null);
147 
148         verify(mEmptyView).setVisibility(View.VISIBLE);
149         verify(mPreferenceScreen).removeAll();
150     }
151 
152     @Test
153     @Config(qualifiers = "mcc999")
getNonIndexableKeys_ifPageDisabled_shouldNotIndexResource()154     public void getNonIndexableKeys_ifPageDisabled_shouldNotIndexResource() {
155         final List<String> niks =
156             ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
157 
158         final int xmlId = mSettings.getPreferenceScreenResId();
159         final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext, xmlId);
160         assertThat(keys).isNotNull();
161         assertThat(niks).containsAtLeastElementsIn(keys);
162     }
163 
164     public static class TestConfigureWifiSettings extends ConfigureWifiSettings {
165         @Override
use(Class<T> clazz)166         public <T extends AbstractPreferenceController> T use(Class<T> clazz) {
167             return super.use(clazz);
168         }
169     }
170 
171     @Implements(DashboardFragment.class)
172     public static class ShadowDashboardFragment {
173         @Implementation
onCreate(Bundle icicle)174         public void onCreate(Bundle icicle) {
175             // do nothing
176         }
177 
178         @Implementation
onViewCreated(View view, @Nullable Bundle savedInstanceState)179         public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
180             // do nothing
181         }
182     }
183 }
184