diff options
Diffstat (limited to 'app/src/androidTest/java/utils/ProviderSetupUtils.java')
| -rw-r--r-- | app/src/androidTest/java/utils/ProviderSetupUtils.java | 137 |
1 files changed, 80 insertions, 57 deletions
diff --git a/app/src/androidTest/java/utils/ProviderSetupUtils.java b/app/src/androidTest/java/utils/ProviderSetupUtils.java index 9b76ffbd..f72d8a50 100644 --- a/app/src/androidTest/java/utils/ProviderSetupUtils.java +++ b/app/src/androidTest/java/utils/ProviderSetupUtils.java @@ -12,10 +12,11 @@ import static utils.CustomInteractions.tryResolve; import android.content.Context; import android.net.VpnService; +import android.os.Bundle; import androidx.test.espresso.NoMatchingViewException; import androidx.test.espresso.ViewInteraction; -import androidx.test.espresso.matcher.ViewMatchers; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.uiautomator.UiDevice; import androidx.test.uiautomator.UiObject; import androidx.test.uiautomator.UiObjectNotFoundException; @@ -31,62 +32,11 @@ public class ProviderSetupUtils { public static void runProviderSetup(UiDevice device, boolean takeConfigurationScreenshots, boolean useCircumvention, Context targetContext) { try { - // ------- PROVIDER SELECTION -------------- - if ("normal".equals(BuildConfig.FLAVOR_branding)) { - System.out.println("next: provider selection"); - ViewInteraction radioButtonSelection = tryResolve(onView(withText("Riseup")), matches(isDisplayed())); - if (takeConfigurationScreenshots) Screengrab.screenshot("provider_selection"); - radioButtonSelection.perform(click()); - // next button click - onView(withText(R.string.next)).perform(click()); - } - - // ------- CIRCUMVENTION SELECTION -------------- - System.out.println("next: standard/circumvention selection"); - if (useCircumvention) { - onView(withText(targetContext.getString(R.string.use_circumvention_tech))).perform(click()); - } else { - onView(withText(targetContext.getString(R.string.use_standard_vpn, targetContext.getString(R.string.app_name)))).perform(click()); - } - if (takeConfigurationScreenshots) Screengrab.screenshot("circumvention_selection"); - - // ------- CONFIGURATION PROGRESS -------------- - System.out.println("next: configuring"); - onView(withText(R.string.next)).perform(click()); - tryResolve( - onView( - Matchers.allOf( - withText(R.string.configuring_provider), - withId(R.id.tv_title) - ) - ), - matches(isDisplayed()) - ); - if (takeConfigurationScreenshots) Screengrab.screenshot("configuring_provider"); - - // ------- VPN PERMISSON DIALOG -------------- - boolean showPermissionDialog = false; - if (VpnService.prepare(getApplicationContext()) != null) { - showPermissionDialog = true; - tryResolve(onView(withText(R.string.upcoming_connection_request_description)), matches(isDisplayed()), useCircumvention ? 180 : 20); - System.out.println("next: next permission request"); - if (takeConfigurationScreenshots) Screengrab.screenshot("vpn_permission_rationale"); - onView(withText(R.string.next)).perform(click()); - UiObject okButton = device.findObject(new UiSelector().packageName("com.android.vpndialogs").resourceId("android:id/button1")); - okButton.waitForExists(30000); - okButton.click(); - device.waitForWindowUpdate("com.android.vpndialogs", 1000); - } - - // ------- START VPN -------------- - System.out.println("next: perform click on VPN button"); - ViewInteraction interaction = tryResolve(onView(withTagValue(Matchers.is("button_setup_circle_custom"))), matches(isDisplayed()), useCircumvention && !showPermissionDialog ? 180 : 20); - if (takeConfigurationScreenshots) { - Screengrab.screenshot("all_set_start_vpn"); - } else { - // we only want to start the VPN in case we're not running the ProviderSetupTest - interaction.perform(click()); - } + runProviderSelection(takeConfigurationScreenshots); + runCircumventionSelection(takeConfigurationScreenshots, useCircumvention, true, targetContext); + boolean showPermissionDialog = runVPNPermissionApproval(device, takeConfigurationScreenshots, useCircumvention); + runConfiguration(takeConfigurationScreenshots); + runStartVPN(takeConfigurationScreenshots, useCircumvention, showPermissionDialog); } catch (NoMatchingViewException e) { // it might be that the provider was already configured, so we print the stack // trace here and try to continue @@ -95,4 +45,77 @@ public class ProviderSetupUtils { e.printStackTrace(); } } + + public static void runStartVPN(boolean takeConfigurationScreenshots, boolean useCircumvention, boolean showPermissionDialog) { + // ------- START VPN -------------- + System.out.println("next: perform click on VPN button"); + ViewInteraction interaction = tryResolve(onView(withTagValue(Matchers.is("button_setup_circle_custom"))), matches(isDisplayed()), useCircumvention && !showPermissionDialog ? 180 : 20); + if (takeConfigurationScreenshots) { + Screengrab.screenshot("all_set_start_vpn"); + } else { + // we only want to start the VPN in case we're not running the ProviderSetupTest + interaction.perform(click()); + } + } + + public static boolean runVPNPermissionApproval(UiDevice device, boolean takeConfigurationScreenshots, boolean useCircumvention) throws UiObjectNotFoundException { + // ------- VPN PERMISSON DIALOG -------------- + if (VpnService.prepare(getApplicationContext()) != null) { + tryResolve(onView(withId(R.id.tv_title)), matches(withText(R.string.title_upcoming_connection_request))); + Screengrab.screenshot("permissions_screen"); + onView(withId(R.id.setup_next_button)).perform(click()); + + UiObject okButton = device.findObject(new UiSelector().packageName("com.android.vpndialogs").resourceId("android:id/button1")); + okButton.waitForExists(30000); + okButton.click(); + device.waitForWindowUpdate("com.android.vpndialogs", 1000); + return true; + } + return false; + } + + public static void runConfiguration(boolean takeConfigurationScreenshots) { + // ------- CONFIGURATION PROGRESS -------------- + System.out.println("next: configuring"); + tryResolve( + onView( + Matchers.allOf( + withText(R.string.configuring_provider), + withId(R.id.tv_title) + ) + ), + matches(isDisplayed()) + ); + if (takeConfigurationScreenshots) Screengrab.screenshot("configuring_provider"); + } + + public static void runCircumventionSelection(boolean takeConfigurationScreenshots, boolean useCircumvention, boolean clickNext, Context targetContext) { + // ------- CIRCUMVENTION SELECTION -------------- + if (useCircumvention) { + onView(withText(targetContext.getString(R.string.use_circumvention_tech))).perform(click()); + } else { + onView(withText(targetContext.getString(R.string.use_standard_vpn, targetContext.getString(R.string.app_name)))).perform(click()); + } + if (takeConfigurationScreenshots) Screengrab.screenshot("041_circumvention_selection"); + if (clickNext) onView(withText(R.string.next)).perform(click()); + } + + + public static void runProviderSelection(boolean takeConfigurationScreenshots) { + // ------- PROVIDER SELECTION -------------- + if ("normal".equals(BuildConfig.FLAVOR_branding)) { + System.out.println("next: provider selection"); + ViewInteraction radioButtonSelection = tryResolve(onView(withText("CoopVPN Beta")), matches(isDisplayed())); + radioButtonSelection.perform(click()); + if (takeConfigurationScreenshots) Screengrab.screenshot("040_provider_selection"); + // next button click + onView(withText(R.string.next)).perform(click()); + } + } + + public static boolean isVerboseScreenshots() { + Bundle arguments = InstrumentationRegistry.getArguments(); + String verbose = arguments.getString("verbose_screenshots", "false"); + return "true".equalsIgnoreCase(verbose); + } } |
