Bug 1807268 - Re-enable verifyShowClipboardSuggestionsToggleTest UI test r=jajohnson
[gecko.git] / mobile / android / fenix / app / src / androidTest / java / org / mozilla / fenix / ui / ComposeHistoryTest.kt
blobd3b17f57d929fc69809048285afc83794bba1ba2
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 androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu
9 import androidx.test.espresso.Espresso.pressBack
10 import org.junit.Ignore
11 import org.junit.Rule
12 import org.junit.Test
13 import org.mozilla.fenix.R
14 import org.mozilla.fenix.customannotations.SmokeTest
15 import org.mozilla.fenix.helpers.AppAndSystemHelper.registerAndCleanupIdlingResources
16 import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
17 import org.mozilla.fenix.helpers.RecyclerViewIdlingResource
18 import org.mozilla.fenix.helpers.TestAssetHelper
19 import org.mozilla.fenix.helpers.TestHelper.exitMenu
20 import org.mozilla.fenix.helpers.TestHelper.longTapSelectItem
21 import org.mozilla.fenix.helpers.TestHelper.mDevice
22 import org.mozilla.fenix.helpers.TestHelper.verifySnackBarText
23 import org.mozilla.fenix.helpers.TestSetup
24 import org.mozilla.fenix.ui.robots.browserScreen
25 import org.mozilla.fenix.ui.robots.historyMenu
26 import org.mozilla.fenix.ui.robots.homeScreen
27 import org.mozilla.fenix.ui.robots.multipleSelectionToolbar
28 import org.mozilla.fenix.ui.robots.navigationToolbar
30 /**
31  *  Tests for verifying basic functionality of history
32  *
33  */
34 class ComposeHistoryTest : TestSetup() {
35     @get:Rule
36     val activityTestRule =
37         AndroidComposeTestRule(
38             HomeActivityIntentTestRule(
39                 tabsTrayRewriteEnabled = true,
40                 isJumpBackInCFREnabled = false,
41             ),
42         ) { it.activity }
44     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243285
45     @Test
46     fun verifyEmptyHistoryMenuTest() {
47         homeScreen {
48         }.openThreeDotMenu {
49             verifyHistoryButton()
50         }.openHistory {
51             verifyHistoryMenuView()
52             verifyEmptyHistoryView()
53         }
54     }
56     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2302742
57     // Test running on beta/release builds in CI:
58     // caution when making changes to it, so they don't block the builds
59     @SmokeTest
60     @Test
61     fun verifyHistoryMenuWithHistoryItemsTest() {
62         val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
64         navigationToolbar {
65         }.enterURLAndEnterToBrowser(firstWebPage.url) {
66             mDevice.waitForIdle()
67         }.openThreeDotMenu {
68         }.openHistory {
69             verifyHistoryListExists()
70             registerAndCleanupIdlingResources(
71                 RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list), 1),
72             ) {
73                 verifyHistoryMenuView()
74                 verifyVisitedTimeTitle()
75                 verifyFirstTestPageTitle("Test_Page_1")
76                 verifyTestPageUrl(firstWebPage.url)
77                 verifyDeleteHistoryItemButton("Test_Page_1")
78             }
79         }
80     }
82     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243288
83     @Test
84     fun deleteHistoryItemTest() {
85         val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
87         navigationToolbar {
88         }.enterURLAndEnterToBrowser(firstWebPage.url) {
89             mDevice.waitForIdle()
90         }.openThreeDotMenu {
91         }.openHistory {
92             verifyHistoryListExists()
93             registerAndCleanupIdlingResources(
94                 RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list), 1),
95             ) {
96                 clickDeleteHistoryButton(firstWebPage.url.toString())
97             }
98             verifySnackBarText(expectedText = "Deleted")
99             verifyEmptyHistoryView()
100         }
101     }
103     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1848881
104     @SmokeTest
105     @Test
106     fun deleteAllHistoryTest() {
107         val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
109         navigationToolbar {
110         }.enterURLAndEnterToBrowser(firstWebPage.url) {
111             mDevice.waitForIdle()
112         }.openThreeDotMenu {
113         }.openHistory {
114             verifyHistoryListExists()
115             registerAndCleanupIdlingResources(
116                 RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list), 1),
117             ) {
118                 clickDeleteAllHistoryButton()
119             }
120             verifyDeleteConfirmationMessage()
121             selectEverythingOption()
122             confirmDeleteAllHistory()
123             verifySnackBarText(expectedText = "Browsing data deleted")
124             verifyEmptyHistoryView()
125         }
126     }
128     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/339690
129     @SmokeTest
130     @Test
131     fun historyMultiSelectionToolbarItemsTest() {
132         val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
134         navigationToolbar {
135         }.enterURLAndEnterToBrowser(firstWebPage.url) {
136             mDevice.waitForIdle()
137         }.openThreeDotMenu {
138         }.openHistory {
139             verifyHistoryListExists()
140             registerAndCleanupIdlingResources(
141                 RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list), 1),
142             ) {
143                 longTapSelectItem(firstWebPage.url)
144             }
145         }
147         multipleSelectionToolbar {
148             verifyMultiSelectionCheckmark()
149             verifyMultiSelectionCounter()
150             verifyShareHistoryButton()
151             verifyCloseToolbarButton()
152         }.closeToolbarReturnToHistory {
153             verifyHistoryMenuView()
154         }
155     }
157     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/339696
158     @Ignore("Failing, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1807268")
159     @Test
160     fun openMultipleSelectedHistoryItemsInANewTabTest() {
161         val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
163         navigationToolbar {
164         }.enterURLAndEnterToBrowser(firstWebPage.url) {
165             mDevice.waitForIdle()
166         }.openComposeTabDrawer(activityTestRule) {
167             closeTab()
168         }
170         homeScreen { }.openThreeDotMenu {
171         }.openHistory {
172             verifyHistoryListExists()
173             registerAndCleanupIdlingResources(
174                 RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list), 1),
175             ) {
176                 longTapSelectItem(firstWebPage.url)
177                 openActionBarOverflowOrOptionsMenu(activityTestRule.activity)
178             }
179         }
181         multipleSelectionToolbar {
182         }.clickOpenNewTab(activityTestRule) {
183             verifyNormalTabsList()
184             verifyNormalBrowsingButtonIsSelected()
185         }
186     }
188     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/346098
189     @Test
190     fun openMultipleSelectedHistoryItemsInPrivateTabTest() {
191         val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
193         navigationToolbar {
194         }.enterURLAndEnterToBrowser(firstWebPage.url) {
195             mDevice.waitForIdle()
196         }.openThreeDotMenu {
197         }.openHistory {
198             verifyHistoryListExists()
199             registerAndCleanupIdlingResources(
200                 RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list), 1),
201             ) {
202                 longTapSelectItem(firstWebPage.url)
203                 openActionBarOverflowOrOptionsMenu(activityTestRule.activity)
204             }
205         }
207         multipleSelectionToolbar {
208         }.clickOpenPrivateTab(activityTestRule) {
209             verifyPrivateTabsList()
210             verifyPrivateBrowsingButtonIsSelected()
211         }
212     }
214     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/346099
215     @Test
216     fun deleteMultipleSelectedHistoryItemsTest() {
217         val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
218         val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2)
220         navigationToolbar {
221         }.enterURLAndEnterToBrowser(firstWebPage.url) {
222         }.openNavigationToolbar {
223         }.enterURLAndEnterToBrowser(secondWebPage.url) {
224             mDevice.waitForIdle()
225             verifyUrl(secondWebPage.url.toString())
226         }.openThreeDotMenu {
227         }.openHistory {
228             verifyHistoryListExists()
229             registerAndCleanupIdlingResources(
230                 RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list), 2),
231             ) {
232                 verifyHistoryItemExists(true, firstWebPage.url.toString())
233                 verifyHistoryItemExists(true, secondWebPage.url.toString())
234                 longTapSelectItem(firstWebPage.url)
235                 longTapSelectItem(secondWebPage.url)
236                 openActionBarOverflowOrOptionsMenu(activityTestRule.activity)
237             }
238         }
240         multipleSelectionToolbar {
241             clickMultiSelectionDelete()
242         }
244         historyMenu {
245             verifyEmptyHistoryView()
246         }
247     }
249     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/339701
250     @Test
251     fun shareMultipleSelectedHistoryItemsTest() {
252         val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
254         navigationToolbar {
255         }.enterURLAndEnterToBrowser(firstWebPage.url) {
256             mDevice.waitForIdle()
257         }.openThreeDotMenu {
258         }.openHistory {
259             verifyHistoryListExists()
260             registerAndCleanupIdlingResources(
261                 RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list), 1),
262             ) {
263                 longTapSelectItem(firstWebPage.url)
264             }
265         }
267         multipleSelectionToolbar {
268             clickShareHistoryButton()
269             verifyShareOverlay()
270             verifyShareTabFavicon()
271             verifyShareTabTitle()
272             verifyShareTabUrl()
273         }
274     }
276     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1715627
277     @Test
278     fun verifySearchHistoryViewTest() {
279         val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
281         navigationToolbar {
282         }.enterURLAndEnterToBrowser(defaultWebPage.url) {
283         }.openThreeDotMenu {
284         }.openHistory {
285         }.clickSearchButton {
286             verifySearchView()
287             verifySearchToolbar(true)
288             verifySearchSelectorButton()
289             verifySearchEngineIcon("history")
290             verifySearchBarPlaceholder("Search history")
291             verifySearchBarPosition(true)
292             tapOutsideToDismissSearchBar()
293             verifySearchToolbar(false)
294             exitMenu()
295         }
296         homeScreen {
297         }.openThreeDotMenu {
298         }.openSettings {
299         }.openCustomizeSubMenu {
300             clickTopToolbarToggle()
301         }
303         exitMenu()
305         browserScreen {
306         }.openThreeDotMenu {
307         }.openHistory {
308         }.clickSearchButton {
309             verifySearchView()
310             verifySearchToolbar(true)
311             verifySearchBarPosition(false)
312             pressBack()
313         }
314         historyMenu {
315             verifyHistoryMenuView()
316         }
317     }
319     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1715631
320     @Test
321     fun verifyVoiceSearchInHistoryTest() {
322         homeScreen {
323         }.openThreeDotMenu {
324         }.openHistory {
325         }.clickSearchButton {
326             verifySearchToolbar(true)
327             verifySearchEngineIcon("history")
328             startVoiceSearch()
329         }
330     }
332     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1715632
333     @Test
334     fun verifySearchForHistoryItemsTest() {
335         val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
336         val secondWebPage = TestAssetHelper.getHTMLControlsFormAsset(mockWebServer)
338         navigationToolbar {
339         }.enterURLAndEnterToBrowser(firstWebPage.url) {
340         }
341         navigationToolbar {
342         }.enterURLAndEnterToBrowser(secondWebPage.url) {
343         }.openThreeDotMenu {
344         }.openHistory {
345         }.clickSearchButton {
346             // Search for a valid term
347             typeSearch(firstWebPage.title)
348             verifySearchEngineSuggestionResults(activityTestRule, firstWebPage.url.toString(), searchTerm = firstWebPage.title)
349             verifySuggestionsAreNotDisplayed(activityTestRule, secondWebPage.url.toString())
350             clickClearButton()
351             // Search for invalid term
352             typeSearch("Android")
353             verifySuggestionsAreNotDisplayed(activityTestRule, firstWebPage.url.toString())
354             verifySuggestionsAreNotDisplayed(activityTestRule, secondWebPage.url.toString())
355         }
356     }
358     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1715634
359     @Test
360     fun verifyDeletedHistoryItemsCanNotBeSearchedTest() {
361         val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
362         val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2)
363         val thirdWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 3)
365         navigationToolbar {
366         }.enterURLAndEnterToBrowser(firstWebPage.url) {
367             verifyPageContent(firstWebPage.content)
368         }
369         navigationToolbar {
370         }.enterURLAndEnterToBrowser(secondWebPage.url) {
371             verifyPageContent(secondWebPage.content)
372         }
373         navigationToolbar {
374         }.enterURLAndEnterToBrowser(thirdWebPage.url) {
375             verifyPageContent(thirdWebPage.content)
376         }.openThreeDotMenu {
377         }.openHistory {
378             verifyHistoryListExists()
379             clickDeleteHistoryButton(firstWebPage.title)
380             verifyHistoryItemExists(false, firstWebPage.title)
381             clickDeleteHistoryButton(secondWebPage.title)
382             verifyHistoryItemExists(false, secondWebPage.title)
383         }.clickSearchButton {
384             // Search for a valid term
385             typeSearch("generic")
386             verifySuggestionsAreNotDisplayed(activityTestRule, firstWebPage.url.toString())
387             verifySuggestionsAreNotDisplayed(activityTestRule, secondWebPage.url.toString())
388             verifySearchEngineSuggestionResults(activityTestRule, thirdWebPage.url.toString(), searchTerm = "generic")
389             pressBack()
390         }
391         historyMenu {
392             clickDeleteHistoryButton(thirdWebPage.title)
393             verifyHistoryItemExists(false, firstWebPage.title)
394         }.clickSearchButton {
395             // Search for a valid term
396             typeSearch("generic")
397             verifySuggestionsAreNotDisplayed(activityTestRule, thirdWebPage.url.toString())
398         }
399     }
401     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/903590
402     // Test running on beta/release builds in CI:
403     // caution when making changes to it, so they don't block the builds
404     @SmokeTest
405     @Test
406     fun noHistoryInPrivateBrowsingTest() {
407         val website = TestAssetHelper.getGenericAsset(mockWebServer, 1)
409         homeScreen {
410         }.togglePrivateBrowsingMode()
412         homeScreen {
413         }.openNavigationToolbar {
414         }.enterURLAndEnterToBrowser(website.url) {
415             mDevice.waitForIdle()
416         }.openThreeDotMenu {
417         }.openHistory {
418             verifyEmptyHistoryView()
419         }
420     }