blob: eee1935ad239019c09177912c7f968b85787255b [file] [log] [blame]
davidln1445fc12019-01-07 14:08:22 -08001/*
2 * Copyright 2019 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
17package com.android.car.settings.system;
18
19import static android.app.Activity.RESULT_CANCELED;
20import static android.app.Activity.RESULT_OK;
21
22import static com.android.car.settings.system.MasterClearFragment.CHECK_LOCK_REQUEST_CODE;
23
24import static com.google.common.truth.Truth.assertThat;
25
26import static org.mockito.Mockito.when;
27
28import android.app.Activity;
29import android.car.userlib.CarUserManagerHelper;
Heemin Seog3cf33e02019-06-20 14:00:18 -070030import android.content.Context;
davidln1445fc12019-01-07 14:08:22 -080031import android.content.Intent;
Heemin Seog3cf33e02019-06-20 14:00:18 -070032import android.content.pm.PackageManager;
davidln5a2ca272019-07-11 15:51:15 -070033import android.os.UserHandle;
34import android.os.UserManager;
davidln1445fc12019-01-07 14:08:22 -080035import android.widget.Button;
36
37import androidx.fragment.app.Fragment;
38
davidln1445fc12019-01-07 14:08:22 -080039import com.android.car.settings.R;
40import com.android.car.settings.security.CheckLockActivity;
41import com.android.car.settings.testutils.FragmentController;
davidln5a2ca272019-07-11 15:51:15 -070042import com.android.car.settings.testutils.ShadowAccountManager;
davidln1445fc12019-01-07 14:08:22 -080043import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
davidln1445fc12019-01-07 14:08:22 -080044
45import org.junit.After;
46import org.junit.Before;
47import org.junit.Test;
48import org.junit.runner.RunWith;
49import org.mockito.Mock;
50import org.mockito.MockitoAnnotations;
davidln15c93512019-06-07 16:58:00 -070051import org.robolectric.RobolectricTestRunner;
Heemin Seog3cf33e02019-06-20 14:00:18 -070052import org.robolectric.RuntimeEnvironment;
53import org.robolectric.Shadows;
davidln1445fc12019-01-07 14:08:22 -080054import org.robolectric.annotation.Config;
55import org.robolectric.shadows.ShadowApplication;
56
57import java.util.Collections;
58
59/** Unit test for {@link MasterClearFragment}. */
davidln15c93512019-06-07 16:58:00 -070060@RunWith(RobolectricTestRunner.class)
davidln5a2ca272019-07-11 15:51:15 -070061@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowAccountManager.class})
davidln1445fc12019-01-07 14:08:22 -080062public class MasterClearFragmentTest {
63
64 @Mock
65 private CarUserManagerHelper mCarUserManagerHelper;
66
67 private MasterClearFragment mFragment;
68
69 @Before
70 public void setUp() {
71 // Setup needed by instantiated PreferenceControllers.
72 MockitoAnnotations.initMocks(this);
Heemin Seog3cf33e02019-06-20 14:00:18 -070073 Context context = RuntimeEnvironment.application;
davidln1445fc12019-01-07 14:08:22 -080074 ShadowCarUserManagerHelper.setMockInstance(mCarUserManagerHelper);
davidln5a2ca272019-07-11 15:51:15 -070075 int userId = UserHandle.myUserId();
76 Shadows.shadowOf(UserManager.get(context)).addUser(userId, "User Name", /* flags= */ 0);
77 Shadows.shadowOf(UserManager.get(context)).addProfile(userId, userId,
78 "Profile Name", /* profileFlags= */ 0);
Heemin Seog3cf33e02019-06-20 14:00:18 -070079 Shadows.shadowOf(context.getPackageManager())
80 .setSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, true);
davidln1445fc12019-01-07 14:08:22 -080081 when(mCarUserManagerHelper.getAllSwitchableUsers()).thenReturn(Collections.emptyList());
davidln5a2ca272019-07-11 15:51:15 -070082 when(mCarUserManagerHelper.getCurrentProcessUserId()).thenReturn(userId);
davidln1445fc12019-01-07 14:08:22 -080083
84 mFragment = FragmentController.of(new MasterClearFragment()).setup();
85 }
86
87 @After
88 public void tearDown() {
89 ShadowCarUserManagerHelper.reset();
davidln1445fc12019-01-07 14:08:22 -080090 }
91
92 @Test
93 public void masterClearButtonClicked_launchesCheckLockActivity() {
94 findMasterClearButton(mFragment.requireActivity()).performClick();
95
96 Intent startedIntent = ShadowApplication.getInstance().getNextStartedActivity();
97 assertThat(startedIntent.getComponent().getClassName()).isEqualTo(
98 CheckLockActivity.class.getName());
99 }
100
101 @Test
102 public void processActivityResult_resultOk_launchesMasterClearConfirmFragment() {
103 mFragment.processActivityResult(CHECK_LOCK_REQUEST_CODE, RESULT_OK, /* data= */ null);
104
105 Fragment launchedFragment = mFragment.getFragmentManager().findFragmentById(
106 R.id.fragment_container);
107
108 assertThat(launchedFragment).isInstanceOf(MasterClearConfirmFragment.class);
109 }
110
111 @Test
112 public void processActivityResult_otherResultCode_doesNothing() {
113 mFragment.processActivityResult(CHECK_LOCK_REQUEST_CODE, RESULT_CANCELED, /* data= */ null);
114
115 Fragment launchedFragment = mFragment.getFragmentManager().findFragmentById(
116 R.id.fragment_container);
117
118 assertThat(launchedFragment).isInstanceOf(MasterClearFragment.class);
119 }
120
121 private Button findMasterClearButton(Activity activity) {
122 return activity.findViewById(R.id.action_button1);
123 }
124}