Files
app_Settings/tests/robotests/src/com/android/settings/wifi/WifiNoInternetDialogTest.java
Eric Rahm 802b922593 Revert "Test Fix SettingRobolectricTest Fail"
This reverts commit 818f77cd1f.

Reason for revert: Underlying issue fixed in ag/23454315.

Bug: b/275023433
Test: atest SettingsGlobalRoboTests

Change-Id: I1af272efd00b3c5bd35310512f5712d5d1c7d834
2023-09-11 13:38:36 +00:00

278 lines
9.8 KiB
Java

/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.settings.wifi;
import static android.net.ConnectivityManager.ACTION_PROMPT_LOST_VALIDATION;
import static android.net.ConnectivityManager.ACTION_PROMPT_PARTIAL_CONNECTIVITY;
import static android.net.ConnectivityManager.ACTION_PROMPT_UNVALIDATED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import android.os.Bundle;
import com.android.settings.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class WifiNoInternetDialogTest {
private static final String FAKE_SSID = "fake_ssid";
@Mock
private Network mNetwork;
@Captor
private ArgumentCaptor<ConnectivityManager.NetworkCallback> mCallbackCaptor;
@Mock
private ConnectivityManager mConnectivityManager;
@Mock
private NetworkInfo mNetworkInfo;
@Mock
private NetworkCapabilities mNetworkCapabilities;
private WifiNoInternetDialog mActivity;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void launchActivity_noIntentAction_shouldNotFatalException() {
WifiNoInternetDialog wifiNoInternetDialog =
Robolectric.setupActivity(WifiNoInternetDialog.class);
}
@Test
public void setupPromptUnvalidated_shouldShowNoInternetAccessRemember() {
setupActivityWithAction(ACTION_PROMPT_UNVALIDATED, mNetwork);
setupNetworkComponents();
mActivity.onCreate(new Bundle());
assertThat(mActivity.mAlwaysAllow.getText()).isEqualTo(
mActivity.getString(R.string.no_internet_access_remember));
}
@Test
public void setupPromptPartialConnectivity_shouldShowNoInternetAccessRemember() {
setupActivityWithAction(ACTION_PROMPT_PARTIAL_CONNECTIVITY, mNetwork);
setupNetworkComponents();
mActivity.onCreate(new Bundle());
assertThat(mActivity.mAlwaysAllow.getText()).isEqualTo(
mActivity.getString(R.string.no_internet_access_remember));
}
@Test
public void setupPromptLostValidationAction_shouldShowLostInternetAccessPersist() {
setupActivityWithAction(ACTION_PROMPT_LOST_VALIDATION, mNetwork);
setupNetworkComponents();
mActivity.onCreate(new Bundle());
assertThat(mActivity.mAlwaysAllow.getText()).isEqualTo(
mActivity.getString(R.string.lost_internet_access_persist));
}
@Test
public void clickPositiveButton_whenPromptUnvalidated_shouldCallSetAcceptUnvalidated() {
setupActivityWithAction(ACTION_PROMPT_UNVALIDATED, mNetwork);
setupNetworkComponents();
mActivity.onCreate(new Bundle());
mActivity.onClick(null, DialogInterface.BUTTON_POSITIVE);
verify(mConnectivityManager).setAcceptUnvalidated(any(Network.class), eq(true), eq(false));
}
@Test
public void positiveButton_withPartialConnectivity_shouldCallSetAcceptPartialConnectivity() {
setupActivityWithAction(ACTION_PROMPT_PARTIAL_CONNECTIVITY, mNetwork);
setupNetworkComponents();
mActivity.onCreate(new Bundle());
mActivity.onClick(null, DialogInterface.BUTTON_POSITIVE);
verify(mConnectivityManager).setAcceptPartialConnectivity(any(Network.class), eq(true),
eq(false));
}
@Test
public void positiveButton_withLostValidation_shouldCallSetAvoidUnvalidated() {
setupActivityWithAction(ACTION_PROMPT_LOST_VALIDATION, mNetwork);
setupNetworkComponents();
mActivity.onCreate(new Bundle());
mActivity.onClick(null, DialogInterface.BUTTON_POSITIVE);
verify(mConnectivityManager).setAvoidUnvalidated(any(Network.class));
}
@Test
public void destroyWithNoClick_inPartialConnectivity_shouldCallSetAcceptPartialConnectivity() {
setupActivityWithAction(ACTION_PROMPT_PARTIAL_CONNECTIVITY, mNetwork);
setupNetworkComponents();
when(mActivity.isFinishing()).thenReturn(true);
mActivity.onCreate(new Bundle());
mActivity.onDestroy();
verify(mConnectivityManager).setAcceptPartialConnectivity(any(Network.class), eq(false),
eq(false));
}
@Test
public void destroyWithNoClick_whenUnvalidated_shouldCallSetAcceptUnvalidated() {
setupActivityWithAction(ACTION_PROMPT_UNVALIDATED, mNetwork);
setupNetworkComponents();
when(mActivity.isFinishing()).thenReturn(true);
mActivity.onCreate(new Bundle());
mActivity.onDestroy();
verify(mConnectivityManager).setAcceptUnvalidated(any(Network.class), eq(false), eq(false));
}
@Test
public void networkCallbackOnLost_shouldFinish() {
setupActivityWithAction(ACTION_PROMPT_UNVALIDATED, mNetwork);
setupNetworkComponents();
mActivity.onCreate(new Bundle());
verify(mConnectivityManager, times(1)).registerNetworkCallback(
any(NetworkRequest.class), mCallbackCaptor.capture());
mCallbackCaptor.getValue().onLost(mNetwork);
verify(mActivity).finish();
}
@Test
public void networkCallbackOnLost_shouldNotFinishIfNetworkIsNotTheSame() {
setupActivityWithAction(ACTION_PROMPT_UNVALIDATED, mNetwork);
setupNetworkComponents();
mActivity.onCreate(new Bundle());
verify(mConnectivityManager, times(1)).registerNetworkCallback(
any(NetworkRequest.class), mCallbackCaptor.capture());
Network unexpectedNetwork = mock(Network.class);
mCallbackCaptor.getValue().onLost(unexpectedNetwork);
verify(mActivity, never()).finish();
}
@Test
public void networkCallbackOnCapabilitiesChanged_shouldFinish() {
setupActivityWithAction(ACTION_PROMPT_UNVALIDATED, mNetwork);
setupNetworkComponents();
when(mNetworkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)).thenReturn(true);
mActivity.onCreate(new Bundle());
verify(mConnectivityManager, times(1)).registerNetworkCallback(
any(NetworkRequest.class), mCallbackCaptor.capture());
mCallbackCaptor.getValue().onCapabilitiesChanged(mNetwork, mNetworkCapabilities);
verify(mActivity).finish();
}
@Test
public void networkCallbackOnCapabilitiesChanged_shouldNotFinishIfNetworkIsNotTheSame() {
setupActivityWithAction(ACTION_PROMPT_UNVALIDATED, mNetwork);
setupNetworkComponents();
when(mNetworkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)).thenReturn(true);
mActivity.onCreate(new Bundle());
verify(mConnectivityManager, times(1)).registerNetworkCallback(
any(NetworkRequest.class), mCallbackCaptor.capture());
Network unexpectedNetwork = mock(Network.class);
mCallbackCaptor.getValue().onCapabilitiesChanged(unexpectedNetwork, mNetworkCapabilities);
verify(mActivity, never()).finish();
}
@Test
public void networkNotConnectedOrConnecting_shouldFinish() {
setupActivityWithAction(ACTION_PROMPT_UNVALIDATED, mNetwork);
setupNetworkComponents();
when(mNetworkInfo.isConnectedOrConnecting()).thenReturn(false);
mActivity.onCreate(new Bundle());
verify(mActivity).finish();
}
@Test
public void withNullNetwork_shouldFinish() {
setupActivityWithAction(ACTION_PROMPT_UNVALIDATED, null);
setupNetworkComponents();
mActivity.onCreate(new Bundle());
verify(mActivity).finish();
}
private void setupNetworkComponents() {
when(mActivity.getSystemService(Context.CONNECTIVITY_SERVICE))
.thenReturn(mConnectivityManager);
when(mNetworkInfo.isConnectedOrConnecting()).thenReturn(true);
when(mNetworkCapabilities.getSsid()).thenReturn(FAKE_SSID);
when(mConnectivityManager.getNetworkInfo(any()))
.thenReturn(mNetworkInfo);
when(mConnectivityManager.getNetworkCapabilities(any()))
.thenReturn(mNetworkCapabilities);
}
private void setupActivityWithAction(String action, Network network) {
final Intent intent = new Intent(action).setClassName(
RuntimeEnvironment.application.getPackageName(),
WifiNoInternetDialog.class.getName());
intent.putExtra(ConnectivityManager.EXTRA_NETWORK, network);
mActivity = spy(Robolectric.buildActivity(WifiNoInternetDialog.class, intent).get());
}
}