Bug 1807268 - Re-enable verifyShowClipboardSuggestionsToggleTest UI test r=jajohnson
[gecko.git] / mobile / android / fenix / app / src / androidTest / java / org / mozilla / fenix / ui / ComposeTopSitesTest.kt
blob16ea4b1275082c98da149c95bc2e3535c0b4cae9
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
8 import org.junit.Rule
9 import org.junit.Test
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
26 /**
27  * Tests Top Sites functionality
28  *
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
33  */
35 class ComposeTopSitesTest : TestSetup() {
36     @get:Rule
37     val composeTestRule =
38         AndroidComposeTestRule(
39             HomeActivityTestRule.withDefaultSettingsOverrides(
40                 composeTopSitesEnabled = true,
41             ),
42         ) { it.activity }
44     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/532598
45     @SmokeTest
46     @Test
47     fun addAWebsiteAsATopSiteTest() {
48         val defaultWebPage = getGenericAsset(mockWebServer, 1)
50         homeScreenWithComposeTopSites(composeTestRule) {
51             verifyExistingTopSitesList()
52         }
53         navigationToolbar {
54         }.enterURLAndEnterToBrowser(defaultWebPage.url) {
55             verifyPageContent(defaultWebPage.content)
56         }.openThreeDotMenu {
57             expandMenu()
58             verifyAddToShortcutsButton(true)
59         }.addToFirefoxHome {
60             verifySnackBarText(getStringResource(R.string.snackbar_added_to_shortcuts))
61         }.goToHomescreenWithComposeTopSites(composeTestRule) {
62             verifyExistingTopSitesList()
63             verifyExistingTopSiteItem(defaultWebPage.title)
64         }
65     }
67     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/532599
68     @Test
69     fun openTopSiteInANewTabTest() {
70         val defaultWebPage = getGenericAsset(mockWebServer, 1)
72         homeScreenWithComposeTopSites(composeTestRule) {
73             verifyExistingTopSitesList()
74         }
75         navigationToolbar {
76         }.enterURLAndEnterToBrowser(defaultWebPage.url) {
77             verifyPageContent(defaultWebPage.content)
78         }.openThreeDotMenu {
79             expandMenu()
80             verifyAddToShortcutsButton(true)
81         }.addToFirefoxHome {
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()
93         }
95         // Dismiss context menu popup
96         mDevice.pressBack()
97     }
99     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/532600
100     @Test
101     fun openTopSiteInANewPrivateTabTest() {
102         val defaultWebPage = getGenericAsset(mockWebServer, 1)
104         homeScreenWithComposeTopSites(composeTestRule) {
105             verifyExistingTopSitesList()
106         }
107         navigationToolbar {
108         }.enterURLAndEnterToBrowser(defaultWebPage.url) {
109             verifyPageContent(defaultWebPage.content)
110         }.openThreeDotMenu {
111             expandMenu()
112             verifyAddToShortcutsButton(true)
113         }.addToFirefoxHome {
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)
122         }
123     }
125     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1110321
126     @Test
127     fun renameATopSiteTest() {
128         val defaultWebPage = getGenericAsset(mockWebServer, 1)
129         val newPageTitle = generateRandomString(5)
131         homeScreenWithComposeTopSites(composeTestRule) {
132             verifyExistingTopSitesList()
133         }
134         navigationToolbar {
135         }.enterURLAndEnterToBrowser(defaultWebPage.url) {
136             waitForPageToLoad()
137         }.openThreeDotMenu {
138             expandMenu()
139             verifyAddToShortcutsButton(true)
140         }.addToFirefoxHome {
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)
150         }
151     }
153     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/532601
154     @Test
155     fun removeTopSiteUsingMenuButtonTest() {
156         val defaultWebPage = getGenericAsset(mockWebServer, 1)
158         homeScreenWithComposeTopSites(composeTestRule) {
159             verifyExistingTopSitesList()
160         }
161         navigationToolbar {
162         }.enterURLAndEnterToBrowser(defaultWebPage.url) {
163             verifyPageContent(defaultWebPage.content)
164         }.openThreeDotMenu {
165             expandMenu()
166             verifyAddToShortcutsButton(true)
167         }.addToFirefoxHome {
168             verifySnackBarText(getStringResource(R.string.snackbar_added_to_shortcuts))
169         }.goToHomescreenWithComposeTopSites(composeTestRule) {
170             verifyExistingTopSitesList()
171             verifyExistingTopSiteItem(defaultWebPage.title)
172         }.openContextMenuOnTopSitesWithTitle(defaultWebPage.title) {
173             verifyTopSiteContextMenuItems()
174         }.removeTopSite {
175             clickSnackbarButton("UNDO")
176             verifyExistingTopSiteItem(defaultWebPage.title)
177         }.openContextMenuOnTopSitesWithTitle(defaultWebPage.title) {
178             verifyTopSiteContextMenuItems()
179         }.removeTopSite {
180             verifyNotExistingTopSiteItem(defaultWebPage.title)
181         }
182     }
184     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2323641
185     @Test
186     fun removeTopSiteFromMainMenuTest() {
187         val defaultWebPage = getGenericAsset(mockWebServer, 1)
189         homeScreenWithComposeTopSites(composeTestRule) {
190             verifyExistingTopSitesList()
191         }
192         navigationToolbar {
193         }.enterURLAndEnterToBrowser(defaultWebPage.url) {
194             verifyPageContent(defaultWebPage.content)
195         }.openThreeDotMenu {
196             expandMenu()
197             verifyAddToShortcutsButton(true)
198         }.addToFirefoxHome {
199             verifySnackBarText(getStringResource(R.string.snackbar_added_to_shortcuts))
200         }.goToHomescreenWithComposeTopSites(composeTestRule) {
201             verifyExistingTopSitesList()
202             verifyExistingTopSiteItem(defaultWebPage.title)
203         }.openTopSiteTabWithTitle(defaultWebPage.title) {
204         }.openThreeDotMenu {
205             verifyRemoveFromShortcutsButton()
206         }.clickRemoveFromShortcuts {
207         }.goToHomescreenWithComposeTopSites(composeTestRule) {
208             verifyNotExistingTopSiteItem(defaultWebPage.title)
209         }
210     }
212     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/561582
213     // Expected for en-us defaults
214     @Test
215     fun verifyENLocalesDefaultTopSitesListTest() {
216         homeScreenWithComposeTopSites(composeTestRule) {
217             verifyExistingTopSitesList()
218             val topSitesTitles = arrayListOf("Google", "Top Articles", "Wikipedia")
219             topSitesTitles.forEach { value ->
220                 verifyExistingTopSiteItem(value)
221             }
222         }
223     }
225     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1050642
226     @SmokeTest
227     @Test
228     fun addAndRemoveMostViewedTopSiteTest() {
229         val defaultWebPage = getGenericAsset(mockWebServer, 1)
231         for (i in 0..1) {
232             navigationToolbar {
233             }.enterURLAndEnterToBrowser(defaultWebPage.url) {
234                 waitForPageToLoad()
235             }
236         }
238         browserScreen {
239         }.goToHomescreenWithComposeTopSites(composeTestRule) {
240             verifyExistingTopSitesList()
241             verifyExistingTopSiteItem(defaultWebPage.title)
242         }.openContextMenuOnTopSitesWithTitle(defaultWebPage.title) {
243         }.removeTopSite {
244             verifySnackBarText(getStringResource(R.string.snackbar_top_site_removed))
245             waitUntilSnackbarGone()
246         }
247         homeScreen {
248         }.openThreeDotMenu {
249         }.openHistory {
250             verifyEmptyHistoryView()
251         }
252     }