1 /*
2  * Copyright (C) 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 
17 package com.android.settings.sim;
18 
19 import static com.android.settings.sim.SimDialogActivity.PREFERRED_PICK;
20 import static com.android.settings.sim.SimDialogActivity.PREFERRED_SIM;
21 
22 import static com.google.common.truth.Truth.assertThat;
23 
24 import static org.mockito.ArgumentMatchers.anyInt;
25 import static org.mockito.Mockito.doNothing;
26 import static org.mockito.Mockito.doReturn;
27 import static org.mockito.Mockito.never;
28 import static org.mockito.Mockito.spy;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.when;
31 
32 import android.content.DialogInterface;
33 
34 import androidx.appcompat.app.AlertDialog;
35 
36 import com.android.settings.network.SubscriptionUtil;
37 import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
38 
39 import org.junit.Test;
40 import org.junit.runner.RunWith;
41 import org.robolectric.RobolectricTestRunner;
42 import org.robolectric.annotation.Config;
43 
44 import java.util.Arrays;
45 
46 @RunWith(RobolectricTestRunner.class)
47 @Config(shadows = ShadowAlertDialogCompat.class)
48 public class PreferredSimDialogFragmentTest extends
49         SimDialogFragmentTestBase<PreferredSimDialogFragment> {
50 
51     @Override
setUp()52     public void setUp() {
53         super.setUp();
54         setDialogType(PREFERRED_PICK);
55         mFragment = spy(PreferredSimDialogFragment.newInstance());
56         doReturn(mSubscriptionManager).when(mFragment).getSubscriptionManager();
57     }
58 
59     @Test
onCreateDialog_noSims_dismissed()60     public void onCreateDialog_noSims_dismissed() {
61         when(mSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(anyInt()))
62                 .thenReturn(null);
63         mIntent.putExtra(PREFERRED_SIM, 0);
64         startDialog();
65         verify(mFragment).dismiss();
66     }
67 
68     @Test
onCreateDialog_oneSimWrongSlotArgument_dismissed()69     public void onCreateDialog_oneSimWrongSlotArgument_dismissed() {
70         when(mSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(1)).thenReturn(null);
71         mIntent.putExtra(PREFERRED_SIM, 1);
72         startDialog();
73         verify(mFragment).dismiss();
74     }
75 
76     @Test
onCreateDialog_twoSimsSelectFirst_correctMessage()77     public void onCreateDialog_twoSimsSelectFirst_correctMessage() {
78         SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSim1, mSim2));
79         SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(mSim1, mSim2));
80         mIntent.putExtra(PREFERRED_SIM, 0);
81 
82         final AlertDialog alertDialog = startDialog();
83         final ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
84         final String message = (String) shadowDialog.getMessage();
85         assertThat(message).contains(SIM1_NAME);
86         assertThat(message).doesNotContain(SIM2_NAME);
87     }
88 
89     @Test
onCreateDialog_twoSimsSelectSecond_correctMessage()90     public void onCreateDialog_twoSimsSelectSecond_correctMessage() {
91         SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSim1, mSim2));
92         SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(mSim1, mSim2));
93         mIntent.putExtra(PREFERRED_SIM, 1);
94 
95         final AlertDialog alertDialog = startDialog();
96         final ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
97         final String message = (String) shadowDialog.getMessage();
98         assertThat(message).contains(SIM2_NAME);
99         assertThat(message).doesNotContain(SIM1_NAME);
100     }
101 
102     @Test
onClick_yesClicked_callsOnSubscriptionSelected()103     public void onClick_yesClicked_callsOnSubscriptionSelected() {
104         SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSim1, mSim2));
105         mIntent.putExtra(PREFERRED_SIM, 0);
106 
107         final AlertDialog alertDialog = startDialog();
108 
109         final SimDialogActivity activity = (SimDialogActivity) spy(mFragment.getActivity());
110         doReturn(activity).when(mFragment).getActivity();
111         doNothing().when(activity).onSubscriptionSelected(anyInt(), anyInt());
112 
113         mFragment.onClick(alertDialog, DialogInterface.BUTTON_POSITIVE);
114         verify(activity).onSubscriptionSelected(PREFERRED_PICK, SIM1_ID);
115     }
116 
117     @Test
onClick_noClicked_doesNotCallOnSubscriptionSelected()118     public void onClick_noClicked_doesNotCallOnSubscriptionSelected() {
119         SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSim1, mSim2));
120         mIntent.putExtra(PREFERRED_SIM, 0);
121 
122         final AlertDialog alertDialog = startDialog();
123 
124         final SimDialogActivity activity = (SimDialogActivity) spy(mFragment.getActivity());
125         doReturn(activity).when(mFragment).getActivity();
126         doNothing().when(activity).onSubscriptionSelected(anyInt(), anyInt());
127 
128         mFragment.onClick(alertDialog, DialogInterface.BUTTON_NEGATIVE);
129         verify(activity, never()).onSubscriptionSelected(anyInt(), anyInt());
130     }
131 }
132