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.settings.network.telephony.wificalling 18 19 import android.content.Context 20 import android.telephony.AccessNetworkConstants 21 import android.telephony.CarrierConfigManager 22 import android.telephony.CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL 23 import android.telephony.TelephonyManager 24 import android.telephony.ims.ImsMmTelManager 25 import android.telephony.ims.feature.MmTelFeature 26 import androidx.core.os.persistableBundleOf 27 import androidx.test.core.app.ApplicationProvider 28 import androidx.test.ext.junit.runners.AndroidJUnit4 29 import com.android.settings.network.telephony.ims.ImsMmTelRepository 30 import com.google.common.truth.Truth.assertThat 31 import kotlinx.coroutines.runBlocking 32 import org.junit.Test 33 import org.junit.runner.RunWith 34 import org.mockito.kotlin.any 35 import org.mockito.kotlin.doReturn 36 import org.mockito.kotlin.mock 37 import org.mockito.kotlin.spy 38 import org.mockito.kotlin.stub 39 40 @RunWith(AndroidJUnit4::class) 41 class WifiCallingRepositoryTest { 42 <lambda>null43 private val mockTelephonyManager = mock<TelephonyManager> { 44 on { createForSubscriptionId(SUB_ID) } doReturn mock 45 } 46 47 private val mockCarrierConfigManager = mock<CarrierConfigManager>() 48 <lambda>null49 private val context: Context = spy(ApplicationProvider.getApplicationContext()) { 50 on { getSystemService(TelephonyManager::class.java) } doReturn mockTelephonyManager 51 on { getSystemService(CarrierConfigManager::class.java) } doReturn mockCarrierConfigManager 52 } 53 <lambda>null54 private val mockImsMmTelRepository = mock<ImsMmTelRepository> { 55 on { getWiFiCallingMode(any()) } doReturn ImsMmTelManager.WIFI_MODE_UNKNOWN 56 } 57 58 private val repository = 59 WifiCallingRepository(context, SUB_ID, imsMmTelRepository = mockImsMmTelRepository) 60 61 @Test getWiFiCallingMode_roamingAndNotUseWfcHomeModeForRoaming_returnRoamingSettingnull62 fun getWiFiCallingMode_roamingAndNotUseWfcHomeModeForRoaming_returnRoamingSetting() { 63 mockTelephonyManager.stub { 64 on { isNetworkRoaming } doReturn true 65 } 66 mockUseWfcHomeModeForRoaming(false) 67 mockImsMmTelRepository.stub { 68 on { getWiFiCallingMode(true) } doReturn ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED 69 } 70 71 val wiFiCallingMode = repository.getWiFiCallingMode() 72 73 assertThat(wiFiCallingMode).isEqualTo(ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED) 74 } 75 76 @Test getWiFiCallingMode_roamingAndUseWfcHomeModeForRoaming_returnHomeSettingnull77 fun getWiFiCallingMode_roamingAndUseWfcHomeModeForRoaming_returnHomeSetting() { 78 mockTelephonyManager.stub { 79 on { isNetworkRoaming } doReturn true 80 } 81 mockUseWfcHomeModeForRoaming(true) 82 mockImsMmTelRepository.stub { 83 on { getWiFiCallingMode(false) } doReturn ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED 84 } 85 86 val wiFiCallingMode = repository.getWiFiCallingMode() 87 88 assertThat(wiFiCallingMode).isEqualTo(ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED) 89 } 90 91 @Test getWiFiCallingMode_notRoaming_returnHomeSettingnull92 fun getWiFiCallingMode_notRoaming_returnHomeSetting() { 93 mockTelephonyManager.stub { 94 on { isNetworkRoaming } doReturn false 95 } 96 mockImsMmTelRepository.stub { 97 on { getWiFiCallingMode(false) } doReturn ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED 98 } 99 100 val wiFiCallingMode = repository.getWiFiCallingMode() 101 102 assertThat(wiFiCallingMode).isEqualTo(ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED) 103 } 104 mockUseWfcHomeModeForRoamingnull105 private fun mockUseWfcHomeModeForRoaming(config: Boolean) { 106 mockCarrierConfigManager.stub { 107 on { 108 getConfigForSubId(SUB_ID, KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL) 109 } doReturn persistableBundleOf( 110 KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL to config, 111 ) 112 } 113 } 114 115 private companion object { 116 const val SUB_ID = 1 117 } 118 } 119