diff --git a/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/GenericExperimentIntegrationTest.kt b/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/GenericExperimentIntegrationTest.kt new file mode 100644 index 000000000..ed5fa75c9 --- /dev/null +++ b/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/GenericExperimentIntegrationTest.kt @@ -0,0 +1,74 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.experimentintegration + +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.HomeActivityTestRule +import org.mozilla.fenix.helpers.TestHelper +import org.mozilla.fenix.ui.robots.homeScreen + +class GenericExperimentIntegrationTest { + private val experimentName = "Viewpoint" + + @get:Rule + val activityTestRule = HomeActivityTestRule( + isJumpBackInCFREnabled = false, + isPWAsPromptEnabled = false, + isTCPCFREnabled = false, + ) + + @Before + fun setUp() { + TestHelper.appContext.settings().showSecretDebugMenuThisSession = true + } + + @After + fun tearDown() { + TestHelper.appContext.settings().showSecretDebugMenuThisSession = false + } + + private fun disableStudiesViaStudiesToggle() { + homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openExperimentsMenu { + verifyExperimentEnrolled(experimentName) + }.goBack { + }.openSettingsSubMenuDataCollection { + clickStudiesOption() + verifyStudiesToggle(true) + clickStudiesToggle() + clickStudiesDialogOkButton() + } + } + + @Test + fun testExperimentUnenrolled() { + homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openExperimentsMenu { + verifyExperimentExists(experimentName) + verifyExperimentNotEnrolled(experimentName) + } + } + + @Test + fun testExperimentUnenrolledViaSecretMenu() { + homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openExperimentsMenu { + verifyExperimentExists(experimentName) + verifyExperimentEnrolled(experimentName) + unenrollfromExperiment(experimentName) + verifyExperimentNotEnrolled(experimentName) + } + } +} diff --git a/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/tests/__init__.py b/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/tests/test_generic_scenarios.py b/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/tests/test_generic_scenarios.py new file mode 100644 index 000000000..51f4b4687 --- /dev/null +++ b/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/tests/test_generic_scenarios.py @@ -0,0 +1,12 @@ +import pytest + +@pytest.mark.parametrize("load_branches", [("branch")], indirect=True) +def test_experiment_unenrolls_via_studies_toggle(setup_experiment, gradlewbuild, load_branches): + setup_experiment(load_branches) + gradlewbuild.test("GenericExperimentIntegrationTest#disableStudiesViaStudiesToggle") + gradlewbuild.test("GenericExperimentIntegrationTest#testExperimentUnenrolls") + +@pytest.mark.parametrize("load_branches", [("branch")], indirect=True) +def test_experiment_unenrolls_via_secret_menu(setup_experiment, gradlewbuild, load_branches): + setup_experiment(load_branches) + gradlewbuild.test("GenericExperimentIntegrationTest#testExperimentUnenrollsViaSecretMenu") diff --git a/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/test_integration.py b/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/tests/test_survey_messages.py similarity index 100% rename from app/src/androidTest/java/org/mozilla/fenix/experimentintegration/test_integration.py rename to app/src/androidTest/java/org/mozilla/fenix/experimentintegration/tests/test_survey_messages.py diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuExperimentsRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuExperimentsRobot.kt index 4469db007..f2f3eaef1 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuExperimentsRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuExperimentsRobot.kt @@ -7,7 +7,13 @@ package org.mozilla.fenix.ui.robots import androidx.test.espresso.Espresso.onView import androidx.test.espresso.matcher.ViewMatchers.withContentDescription import androidx.test.uiautomator.UiSelector +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue import org.mozilla.fenix.R +import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText +import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId +import org.mozilla.fenix.helpers.TestAssetHelper.waitingTimeShort +import org.mozilla.fenix.helpers.TestHelper.packageName import org.mozilla.fenix.helpers.click /** @@ -41,5 +47,35 @@ class SettingsSubMenuExperimentsRobot { checkNotNull(experiment) } + + fun verifyExperimentEnrolled(title: String) { + itemContainingText(title).click() + assertTrue( + checkIcon().waitForExists(waitingTimeShort), + ) + goBackButton().click() + } + + fun verifyExperimentNotEnrolled(title: String) { + itemContainingText(title).click() + assertFalse( + checkIcon().waitForExists(waitingTimeShort), + ) + goBackButton().click() + } + + fun unenrollfromExperiment(title: String) { + val branch = itemWithResId("$packageName:id/nimbus_branch_name") + + itemContainingText(title).click() + assertTrue( + checkIcon().waitForExists(waitingTimeShort), + ) + branch.click() + assertFalse( + checkIcon().waitForExists(waitingTimeShort), + ) + } } private fun goBackButton() = onView(withContentDescription(R.string.action_bar_up_description)) +private fun checkIcon() = itemWithResId("$packageName:id/selected_icon")