Bug 1807268 - Re-enable verifyShowClipboardSuggestionsToggleTest UI test r=jajohnson
[gecko.git] / mobile / android / fenix / app / src / androidTest / java / org / mozilla / fenix / ui / CustomTabsTest.kt
blob1e2aa93e832f5393af367a76f1aa26c7b3774349
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 @file:Suppress("DEPRECATION")
7 package org.mozilla.fenix.ui
9 import androidx.core.net.toUri
10 import androidx.test.rule.ActivityTestRule
11 import org.junit.Rule
12 import org.junit.Test
13 import org.mozilla.fenix.IntentReceiverActivity
14 import org.mozilla.fenix.customannotations.SmokeTest
15 import org.mozilla.fenix.helpers.AppAndSystemHelper.openAppFromExternalLink
16 import org.mozilla.fenix.helpers.DataGenerationHelper.createCustomTabIntent
17 import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
18 import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdAndText
19 import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
20 import org.mozilla.fenix.helpers.TestAssetHelper
21 import org.mozilla.fenix.helpers.TestHelper.exitMenu
22 import org.mozilla.fenix.helpers.TestHelper.mDevice
23 import org.mozilla.fenix.helpers.TestSetup
24 import org.mozilla.fenix.ui.robots.browserScreen
25 import org.mozilla.fenix.ui.robots.clickPageObject
26 import org.mozilla.fenix.ui.robots.customTabScreen
27 import org.mozilla.fenix.ui.robots.enhancedTrackingProtection
28 import org.mozilla.fenix.ui.robots.homeScreen
29 import org.mozilla.fenix.ui.robots.navigationToolbar
30 import org.mozilla.fenix.ui.robots.notificationShade
31 import org.mozilla.fenix.ui.robots.openEditURLView
32 import org.mozilla.fenix.ui.robots.searchScreen
34 class CustomTabsTest : TestSetup() {
35     private val customMenuItem = "TestMenuItem"
36     private val customTabActionButton = "CustomActionButton"
38     /* Updated externalLinks.html to v2.0,
39        changed the hypertext reference to mozilla-mobile.github.io/testapp/downloads for "External link"
40      */
41     private val externalLinksPWAPage = "https://mozilla-mobile.github.io/testapp/v2.0/externalLinks.html"
42     private val loginPage = "https://mozilla-mobile.github.io/testapp/loginForm"
44     @get:Rule
45     val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides()
47     @get: Rule
48     val intentReceiverActivityTestRule = ActivityTestRule(
49         IntentReceiverActivity::class.java,
50         true,
51         false,
52     )
54     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/249659
55     @SmokeTest
56     @Test
57     fun verifyLoginSaveInCustomTabTest() {
58         intentReceiverActivityTestRule.launchActivity(
59             createCustomTabIntent(
60                 loginPage.toUri().toString(),
61                 customMenuItem,
62             ),
63         )
65         customTabScreen {
66             waitForPageToLoad()
67             fillAndSubmitLoginCredentials("mozilla", "firefox")
68         }
70         browserScreen {
71             verifySaveLoginPromptIsDisplayed()
72             clickPageObject(itemWithText("Save"))
73         }
75         openAppFromExternalLink(loginPage)
77         browserScreen {
78         }.openThreeDotMenu {
79         }.openSettings {
80         }.openLoginsAndPasswordSubMenu {
81         }.openSavedLogins {
82             verifySecurityPromptForLogins()
83             tapSetupLater()
84             verifySavedLoginsSectionUsername("mozilla")
85         }
86     }
88     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2334762
89     @Test
90     fun copyCustomTabToolbarUrlTest() {
91         val customTabPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
93         intentReceiverActivityTestRule.launchActivity(
94             createCustomTabIntent(
95                 customTabPage.url.toString(),
96                 customMenuItem,
97             ),
98         )
100         customTabScreen {
101             longCLickAndCopyToolbarUrl()
102         }
104         openAppFromExternalLink(customTabPage.url.toString())
106         navigationToolbar {
107             openEditURLView()
108         }
110         searchScreen {
111             clickClearButton()
112             longClickToolbar()
113             clickPasteText()
114             verifyTypedToolbarText(customTabPage.url.toString())
115         }
116     }
118     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2334761
119     @SmokeTest
120     @Test
121     fun verifyDownloadInACustomTabTest() {
122         val customTabPage = "https://storage.googleapis.com/mobile_test_assets/test_app/downloads.html"
123         val downloadFile = "web_icon.png"
125         intentReceiverActivityTestRule.launchActivity(
126             createCustomTabIntent(
127                 customTabPage.toUri().toString(),
128                 customMenuItem,
129             ),
130         )
132         customTabScreen {
133             waitForPageToLoad()
134         }
136         browserScreen {
137         }.clickDownloadLink(downloadFile) {
138             verifyDownloadPrompt(downloadFile)
139         }.clickDownload {
140             verifyDownloadCompleteNotificationPopup()
141         }
142         mDevice.openNotification()
143         notificationShade {
144             verifySystemNotificationExists("Download completed")
145         }
146     }
148     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/249644
149     // Verifies the main menu of a custom tab with a custom menu item
150     @SmokeTest
151     @Test
152     fun verifyCustomTabMenuItemsTest() {
153         val customTabPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
155         intentReceiverActivityTestRule.launchActivity(
156             createCustomTabIntent(
157                 customTabPage.url.toString(),
158                 customMenuItem,
159             ),
160         )
162         customTabScreen {
163             verifyCustomTabCloseButton()
164         }.openMainMenu {
165             verifyPoweredByTextIsDisplayed()
166             verifyCustomMenuItem(customMenuItem)
167             verifyDesktopSiteButtonExists()
168             verifyFindInPageButtonExists()
169             verifyOpenInBrowserButtonExists()
170             verifyBackButtonExists()
171             verifyForwardButtonExists()
172             verifyRefreshButtonExists()
173         }
174     }
176     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/249645
177     // The test opens a link in a custom tab then sends it to the browser
178     @SmokeTest
179     @Test
180     fun openCustomTabInFirefoxTest() {
181         val customTabPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
183         intentReceiverActivityTestRule.launchActivity(
184             createCustomTabIntent(
185                 customTabPage.url.toString(),
186             ),
187         )
189         customTabScreen {
190             verifyCustomTabCloseButton()
191         }.openMainMenu {
192         }.clickOpenInBrowserButton {
193             verifyTabCounter("1")
194         }
195     }
197     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2239548
198     @Test
199     fun shareCustomTabUsingToolbarButtonTest() {
200         val customTabPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
202         intentReceiverActivityTestRule.launchActivity(
203             createCustomTabIntent(
204                 customTabPage.url.toString(),
205             ),
206         )
208         customTabScreen {
209         }.clickShareButton {
210             verifyShareTabLayout()
211         }
212     }
214     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/249643
215     @Test
216     fun verifyCustomTabViewItemsTest() {
217         val customTabPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
219         intentReceiverActivityTestRule.launchActivity(
220             createCustomTabIntent(
221                 pageUrl = customTabPage.url.toString(),
222                 customActionButtonDescription = customTabActionButton,
223             ),
224         )
226         customTabScreen {
227             verifyCustomTabCloseButton()
228             verifyCustomTabsSiteInfoButton()
229             verifyCustomTabToolbarTitle(customTabPage.title)
230             verifyCustomTabUrl(customTabPage.url.toString())
231             verifyCustomTabActionButton(customTabActionButton)
232             verifyCustomTabsShareButton()
233             verifyMainMenuButton()
234             clickCustomTabCloseButton()
235         }
236         homeScreen {
237             verifyHomeScreenAppBarItems()
238         }
239     }
241     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2239544
242     @Test
243     fun verifyPDFViewerInACustomTabTest() {
244         val customTabPage = TestAssetHelper.getGenericAsset(mockWebServer, 3)
245         val pdfFormResource = TestAssetHelper.getPdfFormAsset(mockWebServer)
247         intentReceiverActivityTestRule.launchActivity(
248             createCustomTabIntent(
249                 customTabPage.url.toString(),
250             ),
251         )
253         customTabScreen {
254             clickPageObject(itemWithText("PDF form file"))
255             clickPageObject(itemWithResIdAndText("android:id/button2", "CANCEL"))
256             waitForPageToLoad()
257             verifyPDFReaderToolbarItems()
258             verifyCustomTabCloseButton()
259             verifyCustomTabsSiteInfoButton()
260             verifyCustomTabToolbarTitle("pdfForm.pdf")
261             verifyCustomTabUrl(pdfFormResource.url.toString())
262             verifyCustomTabsShareButton()
263             verifyMainMenuButton()
264             clickCustomTabCloseButton()
265         }
266         homeScreen {
267             verifyHomeScreenAppBarItems()
268         }
269     }
271     // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2239117
272     @Test
273     fun verifyCustomTabETPSheetAndToggleTest() {
274         val customTabPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
276         intentReceiverActivityTestRule.launchActivity(
277             createCustomTabIntent(
278                 pageUrl = customTabPage.url.toString(),
279                 customActionButtonDescription = customTabActionButton,
280             ),
281         )
283         enhancedTrackingProtection {
284         }.openEnhancedTrackingProtectionSheet {
285             verifyEnhancedTrackingProtectionSheetStatus(status = "ON", state = true)
286         }.toggleEnhancedTrackingProtectionFromSheet {
287             verifyEnhancedTrackingProtectionSheetStatus(status = "OFF", state = false)
288         }.closeEnhancedTrackingProtectionSheet {
289         }
291         openAppFromExternalLink(customTabPage.url.toString())
293         browserScreen {
294         }.openThreeDotMenu {
295         }.openSettings {
296         }.openEnhancedTrackingProtectionSubMenu {
297             switchEnhancedTrackingProtectionToggle()
298             verifyEnhancedTrackingProtectionOptionsEnabled(enabled = false)
299         }
301         exitMenu()
303         browserScreen {
304         }.goBack {
305             // Actually exiting to the previously opened custom tab
306         }
308         enhancedTrackingProtection {
309             verifyETPSectionIsDisplayedInQuickSettingsSheet(isDisplayed = false)
310         }
311     }