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.managedprovisioning.provisioning; 18 19 import static android.app.admin.DevicePolicyManager.FLAG_SUPPORTED_MODES_DEVICE_OWNER; 20 import static android.app.admin.DevicePolicyManager.FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED; 21 import static android.app.admin.DevicePolicyManager.FLAG_SUPPORTED_MODES_PERSONALLY_OWNED; 22 23 import static androidx.test.espresso.Espresso.onView; 24 import static androidx.test.espresso.action.ViewActions.click; 25 import static androidx.test.espresso.assertion.ViewAssertions.matches; 26 import static androidx.test.espresso.intent.Intents.intended; 27 import static androidx.test.espresso.intent.Intents.times; 28 import static androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent; 29 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; 30 import static androidx.test.espresso.matcher.ViewMatchers.withId; 31 import static androidx.test.espresso.matcher.ViewMatchers.withText; 32 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; 33 34 import static com.android.managedprovisioning.model.ProvisioningParams.EXTRA_PROVISIONING_PARAMS; 35 36 import android.content.ComponentName; 37 import android.content.Intent; 38 import android.os.RemoteException; 39 import android.support.test.uiautomator.UiDevice; 40 41 import androidx.test.espresso.intent.rule.IntentsTestRule; 42 import androidx.test.filters.SmallTest; 43 44 import com.android.managedprovisioning.R; 45 import com.android.managedprovisioning.TestUtils; 46 import com.android.managedprovisioning.model.ProvisioningParams; 47 import com.android.managedprovisioning.model.WifiInfo; 48 49 import org.junit.Before; 50 import org.junit.Ignore; 51 import org.junit.Rule; 52 import org.junit.Test; 53 import org.junit.runner.RunWith; 54 import org.junit.runners.JUnit4; 55 56 /** 57 * Unit tests for {@link LandingActivity}. 58 */ 59 @SmallTest 60 @RunWith(JUnit4.class) 61 public class LandingActivityTest { 62 63 private static final ComponentName TEST_COMPONENT_NAME = 64 new ComponentName("test", "test"); 65 66 @Rule 67 public IntentsTestRule<LandingActivity> mActivityRule = 68 new IntentsTestRule(LandingActivity.class, true, false); 69 70 @Before setup()71 public void setup() throws RemoteException { 72 TestUtils.wakeupDeviceAndPressHome(UiDevice.getInstance(getInstrumentation())); 73 } 74 75 @Ignore("b/181323689") 76 @Test onNextButtonClicked_shouldRunPrepareActivity_runsPrepareActivity()77 public void onNextButtonClicked_shouldRunPrepareActivity_runsPrepareActivity() { 78 ProvisioningParams params = generateProvisioningParamsThatShouldRunPrepareActivity(); 79 launchLandingActivityWithParams(params); 80 81 onView(withText(R.string.next)).perform(click()); 82 83 // Has launched the Prepare Activity 84 intended(hasComponent(AdminIntegratedFlowPrepareActivity.class.getName())); 85 } 86 87 @Ignore("b/181323689") 88 @Test onNextButtonClicked_shouldNotRunPrepareActivity_doesNotRunPrepareActivity()89 public void onNextButtonClicked_shouldNotRunPrepareActivity_doesNotRunPrepareActivity() { 90 ProvisioningParams params = generateProvisioningParamsThatShouldNotRunPrepareActivity(); 91 launchLandingActivityWithParams(params); 92 93 onView(withText(R.string.next)).perform(click()); 94 95 // Has not launched the Prepare Activity 96 intended(hasComponent(AdminIntegratedFlowPrepareActivity.class.getName()), times(0)); 97 } 98 99 @Ignore("b/181323689") 100 @Test onCreate_personallyOwned_showsAccountManagementDisclaimer()101 public void onCreate_personallyOwned_showsAccountManagementDisclaimer() { 102 ProvisioningParams params = generateProvisioningParamsWithRequestedProvisioningModes( 103 FLAG_SUPPORTED_MODES_PERSONALLY_OWNED); 104 launchLandingActivityWithParams(params); 105 106 assertAccountManagementDisclaimerShown(); 107 } 108 109 @Ignore("b/181323689") 110 @Test onCreate_organizationAndPersonallyOwned_showsAccountManagementDisclaimer()111 public void onCreate_organizationAndPersonallyOwned_showsAccountManagementDisclaimer() { 112 ProvisioningParams params = generateProvisioningParamsWithRequestedProvisioningModes( 113 FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED | FLAG_SUPPORTED_MODES_PERSONALLY_OWNED); 114 launchLandingActivityWithParams(params); 115 116 assertAccountManagementDisclaimerShown(); 117 } 118 119 @Ignore("b/181323689") 120 @Test onCreate_organizationOwned_showsOwnershipDisclaimer()121 public void onCreate_organizationOwned_showsOwnershipDisclaimer() { 122 ProvisioningParams params = generateProvisioningParamsWithRequestedProvisioningModes( 123 FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED); 124 launchLandingActivityWithParams(params); 125 126 assertOwnershipDisclaimerShown(); 127 } 128 129 @Ignore("b/181323689") 130 @Test onCreate_deviceOwner_showsOwnershipDisclaimer()131 public void onCreate_deviceOwner_showsOwnershipDisclaimer() { 132 ProvisioningParams params = generateProvisioningParamsWithRequestedProvisioningModes( 133 FLAG_SUPPORTED_MODES_DEVICE_OWNER); 134 launchLandingActivityWithParams(params); 135 136 assertOwnershipDisclaimerShown(); 137 } 138 assertAccountManagementDisclaimerShown()139 private void assertAccountManagementDisclaimerShown() { 140 onView(withText(R.string.account_management_disclaimer_header)) 141 .check(matches(isDisplayed())); 142 onView(withText(R.string.account_management_disclaimer_subheader)) 143 .check(matches(isDisplayed())); 144 } 145 assertOwnershipDisclaimerShown()146 private void assertOwnershipDisclaimerShown() { 147 onView(withText(R.string.brand_screen_header)) 148 .check(matches(isDisplayed())); 149 } 150 launchLandingActivityWithParams(ProvisioningParams params)151 private void launchLandingActivityWithParams(ProvisioningParams params) { 152 Intent intent = new Intent(); 153 intent.putExtra(EXTRA_PROVISIONING_PARAMS, params); 154 mActivityRule.launchActivity(intent); 155 onView(withId(R.id.setup_wizard_layout)); 156 } 157 generateProvisioningParamsWithRequestedProvisioningModes( int requestedProvisioningModes)158 private ProvisioningParams generateProvisioningParamsWithRequestedProvisioningModes( 159 int requestedProvisioningModes) { 160 return createDefaultProvisioningParamsBuilder() 161 .setInitiatorRequestedProvisioningModes(requestedProvisioningModes) 162 .build(); 163 } 164 generateProvisioningParamsThatShouldRunPrepareActivity()165 private ProvisioningParams generateProvisioningParamsThatShouldRunPrepareActivity() { 166 // If we need to connect to wifi then prepare activity should run. 167 // For further testing of shouldRunPrepareActivity 168 // see {@link AdminIntegratedFlowPrepareActivityTest} 169 return createDefaultProvisioningParamsBuilder() 170 .setWifiInfo(new WifiInfo.Builder() 171 .setSsid("ssid") 172 .build()) 173 .build(); 174 } 175 generateProvisioningParamsThatShouldNotRunPrepareActivity()176 private ProvisioningParams generateProvisioningParamsThatShouldNotRunPrepareActivity() { 177 return createDefaultProvisioningParamsBuilder().build(); 178 } 179 createDefaultProvisioningParamsBuilder()180 private static ProvisioningParams.Builder createDefaultProvisioningParamsBuilder() { 181 return new ProvisioningParams.Builder() 182 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 183 .setProvisioningAction(""); 184 } 185 } 186