1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 package org.mozilla.fenix.ui
7 import androidx.compose.ui.test.junit4.AndroidComposeTestRule
10 import org.mozilla.fenix.R
11 import org.mozilla.fenix.customannotations.SmokeTest
12 import org.mozilla.fenix.helpers.DataGenerationHelper.generateRandomString
13 import org.mozilla.fenix.helpers.DataGenerationHelper.getStringResource
14 import org.mozilla.fenix.helpers.HomeActivityTestRule
15 import org.mozilla.fenix.helpers.TestAssetHelper.getGenericAsset
16 import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
17 import org.mozilla.fenix.helpers.TestHelper.mDevice
18 import org.mozilla.fenix.helpers.TestHelper.verifySnackBarText
19 import org.mozilla.fenix.helpers.TestHelper.waitUntilSnackbarGone
20 import org.mozilla.fenix.helpers.TestSetup
21 import org.mozilla.fenix.ui.robots.browserScreen
22 import org.mozilla.fenix.ui.robots.homeScreen
23 import org.mozilla.fenix.ui.robots.homeScreenWithComposeTopSites
24 import org.mozilla.fenix.ui.robots.navigationToolbar
27 * Tests Top Sites functionality
29 * - Verifies 'Add to Firefox Home' UI functionality
30 * - Verifies 'Top Sites' context menu UI functionality
31 * - Verifies 'Top Site' usage UI functionality
32 * - Verifies existence of default top sites available on the home-screen
35 class ComposeTopSitesTest : TestSetup() {
38 AndroidComposeTestRule(
39 HomeActivityTestRule.withDefaultSettingsOverrides(
40 composeTopSitesEnabled = true,
44 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/532598
47 fun addAWebsiteAsATopSiteTest() {
48 val defaultWebPage = getGenericAsset(mockWebServer, 1)
50 homeScreenWithComposeTopSites(composeTestRule) {
51 verifyExistingTopSitesList()
54 }.enterURLAndEnterToBrowser(defaultWebPage.url) {
55 verifyPageContent(defaultWebPage.content)
58 verifyAddToShortcutsButton(true)
60 verifySnackBarText(getStringResource(R.string.snackbar_added_to_shortcuts))
61 }.goToHomescreenWithComposeTopSites(composeTestRule) {
62 verifyExistingTopSitesList()
63 verifyExistingTopSiteItem(defaultWebPage.title)
67 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/532599
69 fun openTopSiteInANewTabTest() {
70 val defaultWebPage = getGenericAsset(mockWebServer, 1)
72 homeScreenWithComposeTopSites(composeTestRule) {
73 verifyExistingTopSitesList()
76 }.enterURLAndEnterToBrowser(defaultWebPage.url) {
77 verifyPageContent(defaultWebPage.content)
80 verifyAddToShortcutsButton(true)
82 verifySnackBarText(getStringResource(R.string.snackbar_added_to_shortcuts))
83 }.goToHomescreenWithComposeTopSites(composeTestRule) {
84 verifyExistingTopSitesList()
85 verifyExistingTopSiteItem(defaultWebPage.title)
86 }.openTopSiteTabWithTitle(title = defaultWebPage.title) {
87 verifyUrl(defaultWebPage.url.toString().replace("http://", ""))
88 }.goToHomescreenWithComposeTopSites(composeTestRule) {
89 verifyExistingTopSitesList()
90 verifyExistingTopSiteItem(defaultWebPage.title)
91 }.openContextMenuOnTopSitesWithTitle(defaultWebPage.title) {
92 verifyTopSiteContextMenuItems()
95 // Dismiss context menu popup
99 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/532600
101 fun openTopSiteInANewPrivateTabTest() {
102 val defaultWebPage = getGenericAsset(mockWebServer, 1)
104 homeScreenWithComposeTopSites(composeTestRule) {
105 verifyExistingTopSitesList()
108 }.enterURLAndEnterToBrowser(defaultWebPage.url) {
109 verifyPageContent(defaultWebPage.content)
112 verifyAddToShortcutsButton(true)
114 verifySnackBarText(getStringResource(R.string.snackbar_added_to_shortcuts))
115 }.goToHomescreenWithComposeTopSites(composeTestRule) {
116 verifyExistingTopSitesList()
117 verifyExistingTopSiteItem(defaultWebPage.title)
118 }.openContextMenuOnTopSitesWithTitle(defaultWebPage.title) {
119 verifyTopSiteContextMenuItems()
120 }.openTopSiteInPrivate() {
121 verifyCurrentPrivateSession(composeTestRule.activity.applicationContext)
125 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1110321
127 fun renameATopSiteTest() {
128 val defaultWebPage = getGenericAsset(mockWebServer, 1)
129 val newPageTitle = generateRandomString(5)
131 homeScreenWithComposeTopSites(composeTestRule) {
132 verifyExistingTopSitesList()
135 }.enterURLAndEnterToBrowser(defaultWebPage.url) {
139 verifyAddToShortcutsButton(true)
141 verifySnackBarText(getStringResource(R.string.snackbar_added_to_shortcuts))
142 }.goToHomescreenWithComposeTopSites(composeTestRule) {
143 verifyExistingTopSitesList()
144 verifyExistingTopSiteItem(defaultWebPage.title)
145 }.openContextMenuOnTopSitesWithTitle(defaultWebPage.title) {
146 verifyTopSiteContextMenuItems()
147 }.renameTopSite(newPageTitle) {
148 verifyExistingTopSitesList()
149 verifyExistingTopSiteItem(newPageTitle)
153 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/532601
155 fun removeTopSiteUsingMenuButtonTest() {
156 val defaultWebPage = getGenericAsset(mockWebServer, 1)
158 homeScreenWithComposeTopSites(composeTestRule) {
159 verifyExistingTopSitesList()
162 }.enterURLAndEnterToBrowser(defaultWebPage.url) {
163 verifyPageContent(defaultWebPage.content)
166 verifyAddToShortcutsButton(true)
168 verifySnackBarText(getStringResource(R.string.snackbar_added_to_shortcuts))
169 }.goToHomescreenWithComposeTopSites(composeTestRule) {
170 verifyExistingTopSitesList()
171 verifyExistingTopSiteItem(defaultWebPage.title)
172 }.openContextMenuOnTopSitesWithTitle(defaultWebPage.title) {
173 verifyTopSiteContextMenuItems()
175 clickSnackbarButton("UNDO")
176 verifyExistingTopSiteItem(defaultWebPage.title)
177 }.openContextMenuOnTopSitesWithTitle(defaultWebPage.title) {
178 verifyTopSiteContextMenuItems()
180 verifyNotExistingTopSiteItem(defaultWebPage.title)
184 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2323641
186 fun removeTopSiteFromMainMenuTest() {
187 val defaultWebPage = getGenericAsset(mockWebServer, 1)
189 homeScreenWithComposeTopSites(composeTestRule) {
190 verifyExistingTopSitesList()
193 }.enterURLAndEnterToBrowser(defaultWebPage.url) {
194 verifyPageContent(defaultWebPage.content)
197 verifyAddToShortcutsButton(true)
199 verifySnackBarText(getStringResource(R.string.snackbar_added_to_shortcuts))
200 }.goToHomescreenWithComposeTopSites(composeTestRule) {
201 verifyExistingTopSitesList()
202 verifyExistingTopSiteItem(defaultWebPage.title)
203 }.openTopSiteTabWithTitle(defaultWebPage.title) {
205 verifyRemoveFromShortcutsButton()
206 }.clickRemoveFromShortcuts {
207 }.goToHomescreenWithComposeTopSites(composeTestRule) {
208 verifyNotExistingTopSiteItem(defaultWebPage.title)
212 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/561582
213 // Expected for en-us defaults
215 fun verifyENLocalesDefaultTopSitesListTest() {
216 homeScreenWithComposeTopSites(composeTestRule) {
217 verifyExistingTopSitesList()
218 val topSitesTitles = arrayListOf("Google", "Top Articles", "Wikipedia")
219 topSitesTitles.forEach { value ->
220 verifyExistingTopSiteItem(value)
225 // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1050642
228 fun addAndRemoveMostViewedTopSiteTest() {
229 val defaultWebPage = getGenericAsset(mockWebServer, 1)
233 }.enterURLAndEnterToBrowser(defaultWebPage.url) {
239 }.goToHomescreenWithComposeTopSites(composeTestRule) {
240 verifyExistingTopSitesList()
241 verifyExistingTopSiteItem(defaultWebPage.title)
242 }.openContextMenuOnTopSitesWithTitle(defaultWebPage.title) {
244 verifySnackBarText(getStringResource(R.string.snackbar_top_site_removed))
245 waitUntilSnackbarGone()
250 verifyEmptyHistoryView()