blob: 48fe298d799f9421268934aed10cb9fc099c2f32 [file] [log] [blame]
jovanak310c8cb2018-07-10 03:11:21 -07001/*
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
17package com.android.car.settings.users;
18
19import static com.google.common.truth.Truth.assertThat;
20
21import static org.mockito.ArgumentMatchers.any;
jovanak310c8cb2018-07-10 03:11:21 -070022import static org.mockito.Mockito.doReturn;
23import static org.mockito.Mockito.verify;
jovanak310c8cb2018-07-10 03:11:21 -070024
Ying Zheng9fafdac2018-09-14 10:22:41 -070025import android.car.userlib.CarUserManagerHelper;
jovanak310c8cb2018-07-10 03:11:21 -070026import android.content.Context;
27import android.content.pm.UserInfo;
davidln5a2ca272019-07-11 15:51:15 -070028import android.os.UserHandle;
jovanak310c8cb2018-07-10 03:11:21 -070029import android.os.UserManager;
30import android.widget.Button;
31
jovanak310c8cb2018-07-10 03:11:21 -070032import com.android.car.settings.R;
kwakyfc2851b2019-03-01 14:56:56 -080033import com.android.car.settings.common.ConfirmationDialogFragment;
jovanak310c8cb2018-07-10 03:11:21 -070034import com.android.car.settings.testutils.BaseTestActivity;
35import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
jovanak310c8cb2018-07-10 03:11:21 -070036import com.android.car.settings.testutils.ShadowUserIconProvider;
37
davidln69968b42018-10-26 11:21:26 -070038import org.junit.After;
jovanak310c8cb2018-07-10 03:11:21 -070039import org.junit.Before;
40import org.junit.Test;
41import org.junit.runner.RunWith;
42import org.mockito.Mock;
43import org.mockito.MockitoAnnotations;
44import org.robolectric.Robolectric;
davidln15c93512019-06-07 16:58:00 -070045import org.robolectric.RobolectricTestRunner;
Heemin Seog4da16792018-11-09 13:36:08 -080046import org.robolectric.RuntimeEnvironment;
davidln5a2ca272019-07-11 15:51:15 -070047import org.robolectric.Shadows;
jovanak310c8cb2018-07-10 03:11:21 -070048import org.robolectric.annotation.Config;
jovanak310c8cb2018-07-10 03:11:21 -070049
50import java.util.ArrayList;
51
52/**
53 * Tests for UserDetailsFragment.
54 */
davidln15c93512019-06-07 16:58:00 -070055@RunWith(RobolectricTestRunner.class)
davidln5a2ca272019-07-11 15:51:15 -070056@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserIconProvider.class})
jovanak310c8cb2018-07-10 03:11:21 -070057public class UsersListFragmentTest {
Heemin Seog4da16792018-11-09 13:36:08 -080058
59 private Context mContext;
jovanak310c8cb2018-07-10 03:11:21 -070060 private BaseTestActivity mTestActivity;
61 private UsersListFragment mFragment;
Heemin Seog4da16792018-11-09 13:36:08 -080062 private Button mActionButton;
jovanak310c8cb2018-07-10 03:11:21 -070063
64 @Mock
65 private CarUserManagerHelper mCarUserManagerHelper;
Heemin Seog4da16792018-11-09 13:36:08 -080066
jovanak310c8cb2018-07-10 03:11:21 -070067
68 @Before
Heemin Seog4da16792018-11-09 13:36:08 -080069 public void setUp() {
jovanak310c8cb2018-07-10 03:11:21 -070070 MockitoAnnotations.initMocks(this);
71 ShadowCarUserManagerHelper.setMockInstance(mCarUserManagerHelper);
Heemin Seog4da16792018-11-09 13:36:08 -080072 mContext = RuntimeEnvironment.application;
davidlne304de12018-11-28 14:18:35 -080073 mTestActivity = Robolectric.setupActivity(BaseTestActivity.class);
jovanak310c8cb2018-07-10 03:11:21 -070074 }
75
davidln69968b42018-10-26 11:21:26 -070076 @After
77 public void tearDown() {
78 ShadowCarUserManagerHelper.reset();
79 }
80
jovanak310c8cb2018-07-10 03:11:21 -070081 /* Test that onCreateNewUserConfirmed invokes a creation of a new non-admin. */
82 @Test
83 public void testOnCreateNewUserConfirmedInvokesCreateNewNonAdminUser() {
84 createUsersListFragment();
kwakyfc2851b2019-03-01 14:56:56 -080085 mFragment.mConfirmListener.onConfirm(/* arguments= */ null);
jovanak310c8cb2018-07-10 03:11:21 -070086 Robolectric.flushBackgroundThreadScheduler();
87 verify(mCarUserManagerHelper)
Heemin Seog4da16792018-11-09 13:36:08 -080088 .createNewNonAdminUser(mContext.getString(R.string.user_new_user_name));
jovanak310c8cb2018-07-10 03:11:21 -070089 }
90
91 /* Test that if we're in demo user, click on the button starts exit out of the retail mode. */
92 @Test
Heemin Seog4da16792018-11-09 13:36:08 -080093 public void testCallOnClick_demoUser_exitRetailMode() {
jovanak310c8cb2018-07-10 03:11:21 -070094 doReturn(true).when(mCarUserManagerHelper).isCurrentProcessDemoUser();
95 createUsersListFragment();
96 mActionButton.callOnClick();
97 assertThat(isDialogShown(ConfirmExitRetailModeDialog.DIALOG_TAG)).isTrue();
98 }
99
100 /* Test that if the max num of users is reached, click on the button informs user of that. */
101 @Test
Heemin Seog4da16792018-11-09 13:36:08 -0800102 public void testCallOnClick_userLimitReached_showErrorDialog() {
jovanak310c8cb2018-07-10 03:11:21 -0700103 doReturn(5).when(mCarUserManagerHelper).getMaxSupportedRealUsers();
104 doReturn(true).when(mCarUserManagerHelper).isUserLimitReached();
105 createUsersListFragment();
106
107 mActionButton.callOnClick();
108 assertThat(isDialogShown(MaxUsersLimitReachedDialog.DIALOG_TAG)).isTrue();
109 }
110
111 /* Test that if user can add other users, click on the button creates a dialog to confirm. */
112 @Test
Heemin Seog4da16792018-11-09 13:36:08 -0800113 public void testCallOnClick_showAddUserDialog() {
jovanak310c8cb2018-07-10 03:11:21 -0700114 createUsersListFragment();
115
116 mActionButton.callOnClick();
kwakyfc2851b2019-03-01 14:56:56 -0800117 assertThat(isDialogShown(ConfirmationDialogFragment.TAG)).isTrue();
jovanak310c8cb2018-07-10 03:11:21 -0700118 }
119
Heemin Seog4da16792018-11-09 13:36:08 -0800120 private void createUsersListFragment() {
davidln5a2ca272019-07-11 15:51:15 -0700121 Shadows.shadowOf(UserManager.get(mContext)).addUser(UserHandle.myUserId(),
122 "User Name", /* flags= */ 0);
123 UserInfo testUser = UserManager.get(mContext).getUserInfo(UserHandle.myUserId());
davidlncb0bfa22018-08-27 14:13:05 -0700124 mFragment = new UsersListFragment();
jovanak310c8cb2018-07-10 03:11:21 -0700125 doReturn(testUser).when(mCarUserManagerHelper).getCurrentProcessUserInfo();
jovanak310c8cb2018-07-10 03:11:21 -0700126 doReturn(new ArrayList<UserInfo>()).when(mCarUserManagerHelper).getAllSwitchableUsers();
127 doReturn(null).when(mCarUserManagerHelper).createNewNonAdminUser(any());
128 mTestActivity.launchFragment(mFragment);
jovanak310c8cb2018-07-10 03:11:21 -0700129 refreshButtons();
130 }
131
jovanak310c8cb2018-07-10 03:11:21 -0700132 private void refreshButtons() {
davidln5a2ca272019-07-11 15:51:15 -0700133 mActionButton = mTestActivity.findViewById(R.id.action_button1);
jovanak310c8cb2018-07-10 03:11:21 -0700134 }
135
136 private boolean isDialogShown(String tag) {
137 return mTestActivity.getSupportFragmentManager().findFragmentByTag(tag) != null;
138 }
jovanak310c8cb2018-07-10 03:11:21 -0700139}