From 12cb4a9096c901255081c9d7c3e43bb7d296355f Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Tue, 17 Oct 2023 13:25:57 +0300 Subject: [PATCH] Bug 1859528 - Reader mode TestRail matching --- .../org/mozilla/fenix/ui/ComposeSmokeTest.kt | 116 -------------- .../org/mozilla/fenix/ui/ReaderViewTest.kt | 146 +++-------------- .../java/org/mozilla/fenix/ui/SmokeTest.kt | 148 ------------------ .../fenix/ui/robots/ReaderViewRobot.kt | 9 ++ 4 files changed, 30 insertions(+), 389 deletions(-) delete mode 100644 app/src/androidTest/java/org/mozilla/fenix/ui/ComposeSmokeTest.kt delete mode 100644 app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/ComposeSmokeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/ComposeSmokeTest.kt deleted file mode 100644 index 532696b2c..000000000 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/ComposeSmokeTest.kt +++ /dev/null @@ -1,116 +0,0 @@ -/* 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/. */ - -@file:Suppress("DEPRECATION") - -package org.mozilla.fenix.ui - -import android.view.View -import androidx.compose.ui.test.junit4.AndroidComposeTestRule -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.rule.ActivityTestRule -import androidx.test.uiautomator.UiDevice -import okhttp3.mockwebserver.MockWebServer -import org.junit.After -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import org.mozilla.fenix.IntentReceiverActivity -import org.mozilla.fenix.R -import org.mozilla.fenix.customannotations.SmokeTest -import org.mozilla.fenix.helpers.AndroidAssetDispatcher -import org.mozilla.fenix.helpers.HomeActivityIntentTestRule -import org.mozilla.fenix.helpers.RetryTestRule -import org.mozilla.fenix.helpers.TestAssetHelper -import org.mozilla.fenix.helpers.TestHelper.registerAndCleanupIdlingResources -import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource -import org.mozilla.fenix.ui.robots.browserScreen -import org.mozilla.fenix.ui.robots.navigationToolbar - -/** - * Test Suite that contains a part of the Smoke and Sanity tests defined in TestRail: - * https://testrail.stage.mozaws.net/index.php?/suites/view/3192 - * Other smoke tests have been marked with the @SmokeTest annotation throughout the ui package in order to limit this class expansion. - * These tests will verify different functionalities of the app as a way to quickly detect regressions in main areas - */ -@Suppress("ForbiddenComment") -@SmokeTest -class ComposeSmokeTest { - private lateinit var mDevice: UiDevice - private lateinit var mockWebServer: MockWebServer - - @get:Rule(order = 0) - val activityTestRule = AndroidComposeTestRule( - HomeActivityIntentTestRule.withDefaultSettingsOverrides( - tabsTrayRewriteEnabled = true, - ), - ) { it.activity } - - @get: Rule(order = 1) - val intentReceiverActivityTestRule = ActivityTestRule( - IntentReceiverActivity::class.java, - true, - false, - ) - - @Rule(order = 2) - @JvmField - val retryTestRule = RetryTestRule(3) - - @Before - fun setUp() { - mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) - mockWebServer = MockWebServer().apply { - dispatcher = AndroidAssetDispatcher() - start() - } - } - - @After - fun tearDown() { - mockWebServer.shutdown() - } - - // Verifies that reader mode is detected and the custom appearance controls are displayed - @Test - fun verifyReaderViewAppearanceUI() { - val readerViewPage = - TestAssetHelper.getLoremIpsumAsset(mockWebServer) - val estimatedReadingTime = "1 - 2 minutes" - - navigationToolbar { - }.enterURLAndEnterToBrowser(readerViewPage.url) { - mDevice.waitForIdle() - } - - registerAndCleanupIdlingResources( - ViewVisibilityIdlingResource( - activityTestRule.activity.findViewById(R.id.mozac_browser_toolbar_page_actions), - View.VISIBLE, - ), - ) {} - - navigationToolbar { - verifyReaderViewDetected(true) - toggleReaderView() - } - - browserScreen { - waitForPageToLoad() - verifyPageContent(estimatedReadingTime) - }.openThreeDotMenu { - verifyReaderViewAppearance(true) - }.openReaderViewAppearance { - verifyAppearanceFontGroup(true) - verifyAppearanceFontSansSerif(true) - verifyAppearanceFontSerif(true) - verifyAppearanceFontIncrease(true) - verifyAppearanceFontDecrease(true) - verifyAppearanceColorGroup(true) - verifyAppearanceColorDark(true) - verifyAppearanceColorLight(true) - verifyAppearanceColorSepia(true) - } - } -} diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt index 268d28206..77feeae19 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt @@ -13,6 +13,7 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.mozilla.fenix.R +import org.mozilla.fenix.customannotations.SmokeTest import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.helpers.RetryTestRule @@ -63,10 +64,13 @@ class ReaderViewTest { * - Show the toggle button in the navigation bar * */ + // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/250592 @Test - fun verifyReaderViewPageMenuDetection() { + fun verifyReaderModePageDetectionTest() { val readerViewPage = TestAssetHelper.getLoremIpsumAsset(mockWebServer) + val genericPage = + TestAssetHelper.getGenericAsset(mockWebServer, 1) navigationToolbar { }.enterURLAndEnterToBrowser(readerViewPage.url) { @@ -82,70 +86,17 @@ class ReaderViewTest { navigationToolbar { verifyReaderViewDetected(true) - } - } - - /** - * Verify that non Reader View capable pages - * - * - Reader View toggle should not be visible in the navigation toolbar - * - */ - @Test - fun verifyNonReaderViewPageMenuNoDetection() { - var genericPage = - TestAssetHelper.getGenericAsset(mockWebServer, 1) - - navigationToolbar { }.enterURLAndEnterToBrowser(genericPage.url) { - mDevice.waitForIdle() } - navigationToolbar { verifyReaderViewDetected(false) } } + // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/250585 + @SmokeTest @Test - fun verifyReaderViewToggle() { - val readerViewPage = - TestAssetHelper.getLoremIpsumAsset(mockWebServer) - - navigationToolbar { - }.enterURLAndEnterToBrowser(readerViewPage.url) { - mDevice.waitForIdle() - } - - registerAndCleanupIdlingResources( - ViewVisibilityIdlingResource( - activityIntentTestRule.activity.findViewById(R.id.mozac_browser_toolbar_page_actions), - View.VISIBLE, - ), - ) {} - - navigationToolbar { - verifyReaderViewDetected(true) - toggleReaderView() - mDevice.waitForIdle() - } - browserScreen { - verifyPageContent(estimatedReadingTime) - }.openThreeDotMenu { - verifyReaderViewAppearance(true) - }.closeBrowserMenuToBrowser { } - - navigationToolbar { - verifyCloseReaderViewDetected(true) - toggleReaderView() - mDevice.waitForIdle() - verifyReaderViewDetected(true) - }.openThreeDotMenu { - verifyReaderViewAppearance(false) - }.closeBrowserMenuToBrowser { } - } - - @Test - fun verifyReaderViewAppearanceFontToggle() { + fun verifyReaderModeControlsTest() { val readerViewPage = TestAssetHelper.getLoremIpsumAsset(mockWebServer) @@ -177,44 +128,15 @@ class ReaderViewTest { verifyAppearanceFontSerif(true) verifyAppearanceFontIncrease(true) verifyAppearanceFontDecrease(true) + verifyAppearanceFontSize(3) + verifyAppearanceColorGroup(true) + verifyAppearanceColorDark(true) + verifyAppearanceColorLight(true) + verifyAppearanceColorSepia(true) }.toggleSansSerif { verifyAppearanceFontIsActive("SANSSERIF") }.toggleSerif { verifyAppearanceFontIsActive("SERIF") - } - } - - @Test - fun verifyReaderViewAppearanceFontSizeToggle() { - val readerViewPage = - TestAssetHelper.getLoremIpsumAsset(mockWebServer) - - navigationToolbar { - }.enterURLAndEnterToBrowser(readerViewPage.url) { - mDevice.waitForIdle() - } - - registerAndCleanupIdlingResources( - ViewVisibilityIdlingResource( - activityIntentTestRule.activity.findViewById(R.id.mozac_browser_toolbar_page_actions), - View.VISIBLE, - ), - ) {} - - navigationToolbar { - verifyReaderViewDetected(true) - toggleReaderView() - mDevice.waitForIdle() - } - - browserScreen { - verifyPageContent(estimatedReadingTime) - }.openThreeDotMenu { - verifyReaderViewAppearance(true) - }.openReaderViewAppearance { - verifyAppearanceFontIncrease(true) - verifyAppearanceFontDecrease(true) - verifyAppearanceFontSize(3) }.toggleFontSizeIncrease { verifyAppearanceFontSize(4) }.toggleFontSizeIncrease { @@ -227,46 +149,20 @@ class ReaderViewTest { verifyAppearanceFontSize(4) }.toggleFontSizeDecrease { verifyAppearanceFontSize(3) - } - } - - @Test - fun verifyReaderViewAppearanceColorSchemeChange() { - val readerViewPage = - TestAssetHelper.getLoremIpsumAsset(mockWebServer) - - navigationToolbar { - }.enterURLAndEnterToBrowser(readerViewPage.url) { - mDevice.waitForIdle() - } - - registerAndCleanupIdlingResources( - ViewVisibilityIdlingResource( - activityIntentTestRule.activity.findViewById(R.id.mozac_browser_toolbar_page_actions), - View.VISIBLE, - ), - ) {} - - navigationToolbar { - verifyReaderViewDetected(true) - toggleReaderView() - mDevice.waitForIdle() - } - - browserScreen { - verifyPageContent(estimatedReadingTime) - }.openThreeDotMenu { - verifyReaderViewAppearance(true) - }.openReaderViewAppearance { - verifyAppearanceColorDark(true) - verifyAppearanceColorLight(true) - verifyAppearanceColorSepia(true) }.toggleColorSchemeChangeDark { verifyAppearanceColorSchemeChange("DARK") }.toggleColorSchemeChangeSepia { verifyAppearanceColorSchemeChange("SEPIA") }.toggleColorSchemeChangeLight { verifyAppearanceColorSchemeChange("LIGHT") + }.closeAppearanceMenu { + } + navigationToolbar { + toggleReaderView() + mDevice.waitForIdle() + verifyReaderViewDetected(true) + }.openThreeDotMenu { + verifyReaderViewAppearance(false) } } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt deleted file mode 100644 index 241089cd6..000000000 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ /dev/null @@ -1,148 +0,0 @@ -/* 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/. */ - -@file:Suppress("DEPRECATION") - -package org.mozilla.fenix.ui - -import android.view.View -import androidx.compose.ui.test.junit4.AndroidComposeTestRule -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.rule.ActivityTestRule -import androidx.test.uiautomator.UiDevice -import okhttp3.mockwebserver.MockWebServer -import org.junit.After -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import org.mozilla.fenix.IntentReceiverActivity -import org.mozilla.fenix.R -import org.mozilla.fenix.customannotations.SmokeTest -import org.mozilla.fenix.helpers.AndroidAssetDispatcher -import org.mozilla.fenix.helpers.HomeActivityIntentTestRule -import org.mozilla.fenix.helpers.RetryTestRule -import org.mozilla.fenix.helpers.TestAssetHelper -import org.mozilla.fenix.helpers.TestHelper.registerAndCleanupIdlingResources -import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource -import org.mozilla.fenix.ui.robots.browserScreen -import org.mozilla.fenix.ui.robots.homeScreen -import org.mozilla.fenix.ui.robots.navigationToolbar - -/** - * Test Suite that contains a part of the Smoke and Sanity tests defined in TestRail: - * https://testrail.stage.mozaws.net/index.php?/suites/view/3192 - * Other smoke tests have been marked with the @SmokeTest annotation throughout the ui package in order to limit this class expansion. - * These tests will verify different functionalities of the app as a way to quickly detect regressions in main areas - */ -@Suppress("ForbiddenComment") -@SmokeTest -class SmokeTest { - private lateinit var mDevice: UiDevice - private lateinit var mockWebServer: MockWebServer - - @get:Rule(order = 0) - val activityTestRule = AndroidComposeTestRule( - HomeActivityIntentTestRule.withDefaultSettingsOverrides(), - { it.activity }, - ) - - @get: Rule(order = 1) - val intentReceiverActivityTestRule = ActivityTestRule( - IntentReceiverActivity::class.java, - true, - false, - ) - - @Rule(order = 2) - @JvmField - val retryTestRule = RetryTestRule(3) - - @Before - fun setUp() { - mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) - mockWebServer = MockWebServer().apply { - dispatcher = AndroidAssetDispatcher() - start() - } - } - - @After - fun tearDown() { - mockWebServer.shutdown() - } - - @Test - fun shareTabsFromTabsTrayTest() { - val firstWebsite = TestAssetHelper.getGenericAsset(mockWebServer, 1) - val secondWebsite = TestAssetHelper.getGenericAsset(mockWebServer, 2) - val firstWebsiteTitle = firstWebsite.title - val secondWebsiteTitle = secondWebsite.title - val sharingApp = "Gmail" - val sharedUrlsString = "${firstWebsite.url}\n\n${secondWebsite.url}" - - homeScreen { - }.openNavigationToolbar { - }.enterURLAndEnterToBrowser(firstWebsite.url) { - verifyPageContent(firstWebsite.content) - }.openTabDrawer { - }.openNewTab { - }.submitQuery(secondWebsite.url.toString()) { - verifyPageContent(secondWebsite.content) - }.openTabDrawer { - verifyExistingOpenTabs("Test_Page_1") - verifyExistingOpenTabs("Test_Page_2") - }.openTabsListThreeDotMenu { - verifyShareAllTabsButton() - }.clickShareAllTabsButton { - verifyShareTabsOverlay(firstWebsiteTitle, secondWebsiteTitle) - verifySharingWithSelectedApp( - sharingApp, - sharedUrlsString, - "$firstWebsiteTitle, $secondWebsiteTitle", - ) - } - } - - // Verifies that reader mode is detected and the custom appearance controls are displayed - @Test - fun verifyReaderViewAppearanceUI() { - val readerViewPage = - TestAssetHelper.getLoremIpsumAsset(mockWebServer) - val estimatedReadingTime = "1 - 2 minutes" - - navigationToolbar { - }.enterURLAndEnterToBrowser(readerViewPage.url) { - mDevice.waitForIdle() - } - - registerAndCleanupIdlingResources( - ViewVisibilityIdlingResource( - activityTestRule.activity.findViewById(R.id.mozac_browser_toolbar_page_actions), - View.VISIBLE, - ), - ) {} - - navigationToolbar { - verifyReaderViewDetected(true) - toggleReaderView() - } - - browserScreen { - waitForPageToLoad() - verifyPageContent(estimatedReadingTime) - }.openThreeDotMenu { - verifyReaderViewAppearance(true) - }.openReaderViewAppearance { - verifyAppearanceFontGroup(true) - verifyAppearanceFontSansSerif(true) - verifyAppearanceFontSerif(true) - verifyAppearanceFontIncrease(true) - verifyAppearanceFontDecrease(true) - verifyAppearanceColorGroup(true) - verifyAppearanceColorDark(true) - verifyAppearanceColorLight(true) - verifyAppearanceColorSepia(true) - } - } -} diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt index 217d2d9db..89bd934fb 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt @@ -16,6 +16,7 @@ import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.platform.app.InstrumentationRegistry import org.junit.Assert.assertEquals import org.mozilla.fenix.R +import org.mozilla.fenix.helpers.TestHelper.mDevice import org.mozilla.fenix.helpers.click /** @@ -89,6 +90,14 @@ class ReaderViewRobot { } class Transition { + + fun closeAppearanceMenu(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + mDevice.pressBack() + + BrowserRobot().interact() + return BrowserRobot.Transition() + } + fun toggleSansSerif(interact: ReaderViewRobot.() -> Unit): Transition { fun sansSerifButton() = onView(