1 /*
2  * Copyright (C) 2018 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.car.settings.system;
18 
19 import static android.os.UserManager.DISALLOW_NETWORK_RESET;
20 
21 import static com.android.car.settings.common.PreferenceController.AVAILABLE;
22 import static com.android.car.settings.common.PreferenceController.DISABLED_FOR_USER;
23 
24 import static com.google.common.truth.Truth.assertThat;
25 
26 import android.content.Context;
27 import android.os.UserHandle;
28 import android.os.UserManager;
29 
30 import androidx.preference.Preference;
31 
32 import com.android.car.settings.common.PreferenceControllerTestHelper;
33 
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.mockito.MockitoAnnotations;
38 import org.robolectric.RobolectricTestRunner;
39 import org.robolectric.RuntimeEnvironment;
40 import org.robolectric.shadow.api.Shadow;
41 import org.robolectric.shadows.ShadowUserManager;
42 
43 /** Unit test for {@link ResetNetworkEntryPreferenceController}. */
44 @RunWith(RobolectricTestRunner.class)
45 public class ResetNetworkEntryPreferenceControllerTest {
46 
47     private ResetNetworkEntryPreferenceController mController;
48     private Context mContext;
49 
50     @Before
setUp()51     public void setUp() {
52         MockitoAnnotations.initMocks(this);
53         mContext = RuntimeEnvironment.application;
54 
55         mController = new PreferenceControllerTestHelper<>(
56                 mContext,
57                 ResetNetworkEntryPreferenceController.class,
58                 new Preference(mContext)).getController();
59     }
60 
61     @Test
getAvailabilityStatus_nonAdminUser_disabledForUser()62     public void getAvailabilityStatus_nonAdminUser_disabledForUser() {
63         getShadowUserManager().setIsAdminUser(false);
64 
65         assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_FOR_USER);
66     }
67 
68     @Test
getAvailabilityStatus_adminUser_available()69     public void getAvailabilityStatus_adminUser_available() {
70         getShadowUserManager().setIsAdminUser(true);
71 
72         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
73     }
74 
75     @Test
getAvailabilityStatus_adminUser_restricted_disabledForUser()76     public void getAvailabilityStatus_adminUser_restricted_disabledForUser() {
77         getShadowUserManager().setIsAdminUser(true);
78         getShadowUserManager().setUserRestriction(
79                 UserHandle.of(UserHandle.myUserId()), DISALLOW_NETWORK_RESET, true);
80 
81         assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_FOR_USER);
82     }
83 
getShadowUserManager()84     private ShadowUserManager getShadowUserManager() {
85         return Shadow.extract(UserManager.get(mContext));
86     }
87 }
88