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 }