• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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.imsserviceentitlement;
18 
19 import static org.mockito.Mockito.never;
20 import static org.mockito.Mockito.verify;
21 import static org.mockito.Mockito.when;
22 
23 import android.content.Context;
24 import android.content.Intent;
25 import android.telephony.SubscriptionManager;
26 import android.testing.AndroidTestingRunner;
27 import android.util.Log;
28 
29 import androidx.test.core.app.ActivityScenario;
30 import androidx.test.core.app.ApplicationProvider;
31 
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Rule;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.mockito.Mock;
38 import org.mockito.Spy;
39 import org.mockito.junit.MockitoJUnit;
40 import org.mockito.junit.MockitoRule;
41 
42 import java.lang.reflect.Field;
43 
44 @RunWith(AndroidTestingRunner.class)
45 public final class WfcActivationActivityTest {
46     @Rule public final MockitoRule mockito = MockitoJUnit.rule();
47 
48     private static final String TAG = "IMSSE-WfcActivationActivityTest";
49     private static final int SUB_ID = 1;
50     private static final String EXTRA_LAUNCH_CARRIER_APP = "EXTRA_LAUNCH_CARRIER_APP";
51     private static final int LAUNCH_APP_ACTIVATE = 0;
52     private static final int LAUNCH_APP_UPDATE = 1;
53 
54     @Mock private WfcActivationController mMockWfcActivationController;
55 
56     private final Context mAppContext = ApplicationProvider.getApplicationContext();
57     private ActivityScenario<WfcActivationActivity> mActivityScenario;
58 
59     @Before
setUp()60     public void setUp() {
61         when(mMockWfcActivationController.isSkipWfcActivation()).thenReturn(false);
62     }
63 
64     @After
tearDown()65     public void tearDown() {
66         if (mActivityScenario != null) {
67             mActivityScenario.close();
68         }
69     }
70 
71     @Test
launchAppForActivate_isSkipWfcActivationTrue_notDoStartFlow()72     public void launchAppForActivate_isSkipWfcActivationTrue_notDoStartFlow() {
73         when(mMockWfcActivationController.isSkipWfcActivation()).thenReturn(true);
74         Intent launchIntent =
75                 new Intent(mAppContext, WfcActivationActivity.class)
76                         .putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUNCH_APP_ACTIVATE)
77                         .putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, SUB_ID);
78         mockWfcActivationController(mMockWfcActivationController);
79 
80         mActivityScenario = ActivityScenario.launch(launchIntent);
81 
82         verify(mMockWfcActivationController, never()).startFlow();
83     }
84 
85     @Test
launchAppForActivate_isSkipWfcActivationFalse_doStartFlow()86     public void launchAppForActivate_isSkipWfcActivationFalse_doStartFlow() {
87         Intent launchIntent =
88                 new Intent(mAppContext, WfcActivationActivity.class)
89                         .putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUNCH_APP_ACTIVATE)
90                         .putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, SUB_ID);
91         mockWfcActivationController(mMockWfcActivationController);
92 
93         mActivityScenario = ActivityScenario.launch(launchIntent);
94 
95         verify(mMockWfcActivationController).startFlow();
96     }
97 
98     @Test
launchAppForUpdate_isSkipWfcActivationTrue_doStartFlow()99     public void launchAppForUpdate_isSkipWfcActivationTrue_doStartFlow() {
100         when(mMockWfcActivationController.isSkipWfcActivation()).thenReturn(true);
101         Intent launchIntent =
102                 new Intent(mAppContext, WfcActivationActivity.class)
103                         .putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUNCH_APP_UPDATE)
104                         .putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, SUB_ID);
105         mockWfcActivationController(mMockWfcActivationController);
106 
107         mActivityScenario = ActivityScenario.launch(launchIntent);
108 
109         verify(mMockWfcActivationController).startFlow();
110     }
111 
112     @Test
launchAppForUpdate_isSkipWfcActivationFalse_doStartFlow()113     public void launchAppForUpdate_isSkipWfcActivationFalse_doStartFlow() {
114         Intent launchIntent =
115                 new Intent(mAppContext, WfcActivationActivity.class)
116                         .putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUNCH_APP_UPDATE)
117                         .putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, SUB_ID);
118         mockWfcActivationController(mMockWfcActivationController);
119 
120         mActivityScenario = ActivityScenario.launch(launchIntent);
121 
122         verify(mMockWfcActivationController).startFlow();
123     }
124 
mockWfcActivationController(WfcActivationController mockWfcActivationController)125     private void mockWfcActivationController(WfcActivationController mockWfcActivationController) {
126         try {
127             Field field = WfcActivationActivity.class.getDeclaredField("sWfcActivationController");
128             field.setAccessible(true);
129             field.set(null, mockWfcActivationController);
130         } catch (Exception e) {
131             Log.d(TAG, "Mocking WfcActivationController failed.");
132         }
133     }
134 }