From 7a02db22c33f9b5ad8ba6355e5a7d72801094149 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 6 Aug 2021 12:29:06 +0300 Subject: [PATCH] Start on home UI tests --- .../org/mozilla/fenix/helpers/TestHelper.kt | 2 +- .../mozilla/fenix/ui/SettingsPrivacyTest.kt | 4 +- .../java/org/mozilla/fenix/ui/SmokeTest.kt | 98 +++++++++++++++++++ .../ui/robots/SettingsSubMenuTabsRobot.kt | 26 +++++ .../ui/robots/SettingsSubMenuThemeRobot.kt | 8 ++ 5 files changed, 135 insertions(+), 3 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt index 1f7771e4b..7df7d88cb 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt @@ -73,7 +73,7 @@ object TestHelper { editor.apply() } - fun restartApp(activity: HomeActivityTestRule) { + fun restartApp(activity: HomeActivityIntentTestRule) { with(activity) { finishActivity() mDevice.waitForIdle() diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsPrivacyTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsPrivacyTest.kt index ae0fa644f..ebe3333d2 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsPrivacyTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsPrivacyTest.kt @@ -13,7 +13,7 @@ import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.mozilla.fenix.helpers.AndroidAssetDispatcher -import org.mozilla.fenix.helpers.HomeActivityTestRule +import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestHelper import org.mozilla.fenix.helpers.TestHelper.openAppFromExternalLink @@ -36,7 +36,7 @@ class SettingsPrivacyTest { private val pageShortcutName = "TestShortcut" @get:Rule - val activityTestRule = HomeActivityTestRule() + val activityTestRule = HomeActivityIntentTestRule() @Before fun setUp() { diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt index a5088c62b..090a7b0d0 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -32,6 +32,7 @@ import org.mozilla.fenix.helpers.TestHelper import org.mozilla.fenix.helpers.TestHelper.appName import org.mozilla.fenix.helpers.TestHelper.createCustomTabIntent import org.mozilla.fenix.helpers.TestHelper.deleteDownloadFromStorage +import org.mozilla.fenix.helpers.TestHelper.restartApp import org.mozilla.fenix.helpers.TestHelper.scrollToElementByText import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource import org.mozilla.fenix.ui.robots.browserScreen @@ -1412,4 +1413,101 @@ class SmokeTest { IdlingRegistry.getInstance().unregister(localeListIdlingResource) } } + + @Test + fun goToHomeScreenBottomToolbarTest() { + val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) + + navigationToolbar { + }.enterURLAndEnterToBrowser(genericURL.url) { + mDevice.waitForIdle() + }.goToHomescreen { + verifyHomeScreen() + } + } + + @Test + fun goToHomeScreenTopToolbarTest() { + val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) + + homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openCustomizeSubMenu { + clickTopToolbarToggle() + }.goBack { + }.goBack { + }.openNavigationToolbar { + }.enterURLAndEnterToBrowser(genericURL.url) { + mDevice.waitForIdle() + }.goToHomescreen { + verifyHomeScreen() + } + } + + @Test + fun goToHomeScreenBottomToolbarPrivateModeTest() { + val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) + + homeScreen { + togglePrivateBrowsingModeOnOff() + } + + navigationToolbar { + }.enterURLAndEnterToBrowser(genericURL.url) { + mDevice.waitForIdle() + }.goToHomescreen { + verifyHomeScreen() + } + } + + @Test + fun goToHomeScreenTopToolbarPrivateModeTest() { + val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) + + homeScreen { + togglePrivateBrowsingModeOnOff() + }.openThreeDotMenu { + }.openSettings { + }.openCustomizeSubMenu { + clickTopToolbarToggle() + }.goBack { + }.goBack { + }.openNavigationToolbar { + }.enterURLAndEnterToBrowser(genericURL.url) { + mDevice.waitForIdle() + }.goToHomescreen { + verifyHomeScreen() + } + } + + @Test + fun startOnHomeSettingsMenuItemsTest() { + homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openTabsSubMenu { + verifyStartOnHomeOptions() + } + } + + @Test + fun alwaysStartOnHomeTest() { + val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) + + navigationToolbar { + }.enterURLAndEnterToBrowser(genericURL.url) { + mDevice.waitForIdle() + }.openThreeDotMenu { + }.openSettings { + }.openTabsSubMenu { + clickAlwaysStartOnHomeToggle() + } + + restartApp(activityTestRule) + + homeScreen { + verifyHomeScreen() + } + } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuTabsRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuTabsRobot.kt index d1fbaf01b..3cf81bf25 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuTabsRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuTabsRobot.kt @@ -9,11 +9,14 @@ package org.mozilla.fenix.ui.robots import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions import androidx.test.espresso.assertion.ViewAssertions +import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice import org.hamcrest.CoreMatchers.allOf +import org.mozilla.fenix.helpers.click /** * Implementation of Robot Pattern for the settings Tabs sub menu. @@ -22,6 +25,10 @@ class SettingsSubMenuTabsRobot { fun verifyOptions() = assertOptions() + fun verifyStartOnHomeOptions() = assertStartOnHomeOptions() + + fun clickAlwaysStartOnHomeToggle() = alwaysStartOnHomeToggle().click() + class Transition { val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) @@ -46,6 +53,17 @@ private fun assertOptions() { .check(ViewAssertions.matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) } +private fun assertStartOnHomeOptions() { + startOnHomeHeading() + .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) + afterFourHoursToggle() + .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) + alwaysStartOnHomeToggle() + .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) + neverStartOnHomeToggle() + .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) +} + private fun manualToggle() = onView(withText("Manually")) private fun afterOneDayToggle() = onView(withText("After one day")) @@ -54,5 +72,13 @@ private fun afterOneWeekToggle() = onView(withText("After one week")) private fun afterOneMonthToggle() = onView(withText("After one month")) +private fun startOnHomeHeading() = onView(withText("Start on home")) + +private fun afterFourHoursToggle() = onView(withText("After four hours")) + +private fun alwaysStartOnHomeToggle() = onView(withText("Always")) + +private fun neverStartOnHomeToggle() = onView(withText("Never")) + private fun goBackButton() = onView(allOf(ViewMatchers.withContentDescription("Navigate up"))) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuThemeRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuThemeRobot.kt index a3b425a10..0acfe1f1d 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuThemeRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuThemeRobot.kt @@ -36,6 +36,10 @@ class SettingsSubMenuThemeRobot { fun selectLightMode() = lightModeToggle().click() + fun clickTopToolbarToggle() = topToolbarToggle().click() + + fun clickBottomToolbarToggle() = bottomToolbarToggle().click() + class Transition { val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) @@ -62,6 +66,10 @@ private fun darkModeToggle() = onView(withText("Dark")) private fun lightModeToggle() = onView(withText("Light")) +private fun topToolbarToggle() = onView(withText("Top")) + +private fun bottomToolbarToggle() = onView(withText("Bottom")) + private fun deviceModeToggle(): ViewInteraction { val followDeviceThemeText = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) "Follow device theme" else "Set by Battery Saver"