You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
547 lines
17 KiB
Kotlin
547 lines
17 KiB
Kotlin
/* 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/. */
|
|
|
|
package org.mozilla.fenix.ui
|
|
|
|
import androidx.test.platform.app.InstrumentationRegistry
|
|
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.customannotations.SmokeTest
|
|
import org.mozilla.fenix.ext.settings
|
|
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
|
|
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
|
|
import org.mozilla.fenix.helpers.TestAssetHelper
|
|
import org.mozilla.fenix.helpers.TestHelper
|
|
import org.mozilla.fenix.helpers.TestHelper.openAppFromExternalLink
|
|
import org.mozilla.fenix.helpers.TestHelper.restartApp
|
|
import org.mozilla.fenix.ui.robots.addToHomeScreen
|
|
import org.mozilla.fenix.ui.robots.browserScreen
|
|
import org.mozilla.fenix.ui.robots.homeScreen
|
|
import org.mozilla.fenix.ui.robots.navigationToolbar
|
|
import org.mozilla.fenix.ui.robots.settingsScreen
|
|
|
|
/**
|
|
* Tests for verifying the main three dot menu options
|
|
*
|
|
*/
|
|
|
|
class SettingsPrivacyTest {
|
|
/* ktlint-disable no-blank-line-before-rbrace */ // This imposes unreadable grouping.
|
|
|
|
private val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
|
|
private lateinit var mockWebServer: MockWebServer
|
|
private val pageShortcutName = "TestShortcut"
|
|
|
|
@get:Rule
|
|
val activityTestRule = HomeActivityIntentTestRule()
|
|
|
|
@Before
|
|
fun setUp() {
|
|
mockWebServer = MockWebServer().apply {
|
|
dispatcher = AndroidAssetDispatcher()
|
|
start()
|
|
}
|
|
|
|
val settings = activityTestRule.activity.applicationContext.settings()
|
|
settings.shouldShowJumpBackInCFR = false
|
|
}
|
|
|
|
@After
|
|
fun tearDown() {
|
|
mockWebServer.shutdown()
|
|
}
|
|
|
|
@Test
|
|
// Walks through settings privacy menu and sub-menus to ensure all items are present
|
|
fun settingsPrivacyItemsTest() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
// PRIVACY
|
|
verifyPrivacyHeading()
|
|
|
|
// PRIVATE BROWSING
|
|
verifyPrivateBrowsingButton()
|
|
}.openPrivateBrowsingSubMenu {
|
|
verifyNavigationToolBarHeader()
|
|
}.goBack {
|
|
|
|
// ENHANCED TRACKING PROTECTION
|
|
verifyEnhancedTrackingProtectionButton()
|
|
verifyEnhancedTrackingProtectionValue("On")
|
|
}.openEnhancedTrackingProtectionSubMenu {
|
|
verifyNavigationToolBarHeader()
|
|
verifyEnhancedTrackingProtectionProtectionSubMenuItems()
|
|
|
|
// ENHANCED TRACKING PROTECTION EXCEPTION
|
|
}.openExceptions {
|
|
verifyNavigationToolBarHeader()
|
|
verifyEnhancedTrackingProtectionProtectionExceptionsSubMenuItems()
|
|
}.goBack {
|
|
}.goBack {
|
|
|
|
// SITE PERMISSIONS
|
|
verifySitePermissionsButton()
|
|
}.openSettingsSubMenuSitePermissions {
|
|
verifyNavigationToolBarHeader()
|
|
verifySitePermissionsSubMenuItems()
|
|
|
|
// SITE PERMISSIONS AUTOPLAY
|
|
}.openAutoPlay {
|
|
verifyNavigationToolBarHeader("Autoplay")
|
|
verifySitePermissionsAutoPlaySubMenuItems()
|
|
}.goBack {
|
|
|
|
// SITE PERMISSIONS CAMERA
|
|
}.openCamera {
|
|
verifyNavigationToolBarHeader("Camera")
|
|
verifySitePermissionsCommonSubMenuItems()
|
|
verifyToggleNameToON("3. Toggle Camera to ON")
|
|
}.goBack {
|
|
|
|
// SITE PERMISSIONS LOCATION
|
|
}.openLocation {
|
|
verifyNavigationToolBarHeader("Location")
|
|
verifySitePermissionsCommonSubMenuItems()
|
|
verifyToggleNameToON("3. Toggle Location to ON")
|
|
}.goBack {
|
|
|
|
// SITE PERMISSIONS MICROPHONE
|
|
}.openMicrophone {
|
|
verifyNavigationToolBarHeader("Microphone")
|
|
verifySitePermissionsCommonSubMenuItems()
|
|
verifyToggleNameToON("3. Toggle Microphone to ON")
|
|
}.goBack {
|
|
|
|
// SITE PERMISSIONS NOTIFICATION
|
|
}.openNotification {
|
|
verifyNavigationToolBarHeader("Notification")
|
|
verifySitePermissionsNotificationSubMenuItems()
|
|
}.goBack {
|
|
|
|
// SITE PERMISSIONS PERSISTENT STORAGE
|
|
}.openPersistentStorage {
|
|
verifyNavigationToolBarHeader("Persistent Storage")
|
|
verifySitePermissionsPersistentStorageSubMenuItems()
|
|
}.goBack {
|
|
|
|
// SITE PERMISSIONS EXCEPTIONS
|
|
}.openExceptions {
|
|
verifyNavigationToolBarHeader()
|
|
verifySitePermissionsExceptionSubMenuItems()
|
|
}.goBack {
|
|
}.goBack {
|
|
|
|
// DELETE BROWSING DATA
|
|
verifyDeleteBrowsingDataButton()
|
|
}.openSettingsSubMenuDeleteBrowsingData {
|
|
verifyNavigationToolBarHeader()
|
|
verifyDeleteBrowsingDataSubMenuItems()
|
|
}.goBack {
|
|
|
|
// DELETE BROWSING DATA ON QUIT
|
|
verifyDeleteBrowsingDataOnQuitButton()
|
|
verifyDeleteBrowsingDataOnQuitValue("Off")
|
|
}.openSettingsSubMenuDeleteBrowsingDataOnQuit {
|
|
verifyNavigationToolBarHeader()
|
|
verifyDeleteBrowsingDataOnQuitSubMenuItems()
|
|
}.goBack {
|
|
|
|
// NOTIFICATIONS
|
|
verifyNotificationsButton()
|
|
}.openSettingsSubMenuNotifications {
|
|
verifySystemNotificationsView()
|
|
}.goBack {
|
|
|
|
// DATA COLLECTION
|
|
verifyDataCollectionButton()
|
|
}.openSettingsSubMenuDataCollection {
|
|
verifyNavigationToolBarHeader()
|
|
verifyDataCollectionSubMenuItems()
|
|
}.goBack {
|
|
}.goBack {
|
|
verifyHomeComponent()
|
|
}
|
|
}
|
|
|
|
// Tests only for initial state without signing in.
|
|
// For tests after singing in, see SyncIntegration test suite
|
|
|
|
@Test
|
|
fun loginsAndPasswordsTest() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
// Necessary to scroll a little bit for all screen sizes
|
|
TestHelper.scrollToElementByText("Logins and passwords")
|
|
}.openLoginsAndPasswordSubMenu {
|
|
verifyDefaultView()
|
|
verifyDefaultValueAutofillLogins(InstrumentationRegistry.getInstrumentation().targetContext)
|
|
verifyDefaultValueExceptions()
|
|
}.openSavedLogins {
|
|
verifySecurityPromptForLogins()
|
|
tapSetupLater()
|
|
// Verify that logins list is empty
|
|
// Issue #7272 nothing is shown
|
|
}.goBack {
|
|
}.openSyncLogins {
|
|
verifyReadyToScanOption()
|
|
verifyUseEmailOption()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun saveLoginFromPromptTest() {
|
|
val saveLoginTest =
|
|
TestAssetHelper.getSaveLoginAsset(mockWebServer)
|
|
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
|
|
verifySaveLoginPromptIsShown()
|
|
// Click save to save the login
|
|
saveLoginFromPrompt("Save")
|
|
}
|
|
browserScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
TestHelper.scrollToElementByText("Logins and passwords")
|
|
}.openLoginsAndPasswordSubMenu {
|
|
verifyDefaultView()
|
|
}.openSavedLogins {
|
|
verifySecurityPromptForLogins()
|
|
tapSetupLater()
|
|
// Verify that the login appears correctly
|
|
verifySavedLoginFromPrompt()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun neverSaveLoginFromPromptTest() {
|
|
val saveLoginTest = TestAssetHelper.getSaveLoginAsset(mockWebServer)
|
|
val settings = activityTestRule.activity.settings()
|
|
settings.shouldShowJumpBackInCFR = false
|
|
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
|
|
verifySaveLoginPromptIsShown()
|
|
// Don't save the login, add to exceptions
|
|
saveLoginFromPrompt("Never save")
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openLoginsAndPasswordSubMenu {
|
|
verifyDefaultView()
|
|
}.openSavedLogins {
|
|
verifySecurityPromptForLogins()
|
|
tapSetupLater()
|
|
// Verify that the login list is empty
|
|
verifyNotSavedLoginFromPrompt()
|
|
}.goBack {
|
|
}.openLoginExceptions {
|
|
// Verify localhost was added to exceptions list
|
|
verifyLocalhostExceptionAdded()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun saveLoginsAndPasswordsOptions() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openLoginsAndPasswordSubMenu {
|
|
}.saveLoginsAndPasswordsOptions {
|
|
verifySaveLoginsOptionsView()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun verifyPrivateBrowsingMenuItemsTest() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openPrivateBrowsingSubMenu {
|
|
verifyAddPrivateBrowsingShortcutButton()
|
|
verifyOpenLinksInPrivateTab()
|
|
verifyOpenLinksInPrivateTabOff()
|
|
}.goBack {
|
|
verifySettingsView()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun openExternalLinksInPrivateTest() {
|
|
val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
|
val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2)
|
|
|
|
setOpenLinksInPrivateOn()
|
|
|
|
openAppFromExternalLink(firstWebPage.url.toString())
|
|
|
|
browserScreen {
|
|
}.openTabDrawer {
|
|
verifyPrivateModeSelected()
|
|
}.closeTabDrawer {
|
|
}.goToHomescreen { }
|
|
|
|
setOpenLinksInPrivateOff()
|
|
|
|
// We need to open a different link, otherwise it will open the same session
|
|
openAppFromExternalLink(secondWebPage.url.toString())
|
|
|
|
browserScreen {
|
|
}.openTabDrawer {
|
|
verifyNormalModeSelected()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun launchPageShortcutInPrivateModeTest() {
|
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
|
|
|
setOpenLinksInPrivateOn()
|
|
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
|
}.openThreeDotMenu {
|
|
}.openAddToHomeScreen {
|
|
addShortcutName(pageShortcutName)
|
|
clickAddShortcutButton()
|
|
clickAddAutomaticallyButton()
|
|
}
|
|
|
|
mDevice.waitForIdle()
|
|
// We need to close the existing tab here, to open a different session
|
|
restartApp(activityTestRule)
|
|
browserScreen {
|
|
}.openTabDrawer {
|
|
closeTab()
|
|
}
|
|
|
|
addToHomeScreen {
|
|
}.searchAndOpenHomeScreenShortcut(pageShortcutName) {
|
|
}.openTabDrawer {
|
|
verifyPrivateModeSelected()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun launchLinksInPrivateToggleOffStateDoesntChangeTest() {
|
|
val settings = activityTestRule.activity.applicationContext.settings()
|
|
settings.shouldShowJumpBackInCFR = false
|
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
|
|
|
setOpenLinksInPrivateOn()
|
|
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
|
}.openThreeDotMenu {
|
|
expandMenu()
|
|
}.openAddToHomeScreen {
|
|
addShortcutName(pageShortcutName)
|
|
clickAddShortcutButton()
|
|
clickAddAutomaticallyButton()
|
|
}.openHomeScreenShortcut(pageShortcutName) {
|
|
}.goToHomescreen { }
|
|
|
|
setOpenLinksInPrivateOff()
|
|
restartApp(activityTestRule)
|
|
mDevice.waitForIdle()
|
|
|
|
addToHomeScreen {
|
|
}.searchAndOpenHomeScreenShortcut(pageShortcutName) {
|
|
}.openTabDrawer {
|
|
verifyNormalModeSelected()
|
|
}.closeTabDrawer {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openPrivateBrowsingSubMenu {
|
|
verifyOpenLinksInPrivateTabOff()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun addPrivateBrowsingShortcut() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openPrivateBrowsingSubMenu {
|
|
cancelPrivateShortcutAddition()
|
|
addPrivateShortcutToHomescreen()
|
|
verifyPrivateBrowsingShortcutIcon()
|
|
}.openPrivateBrowsingShortcut {
|
|
verifySearchView()
|
|
}.openBrowser {
|
|
}.openTabDrawer {
|
|
verifyPrivateModeSelected()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun deleteBrowsingDataOptionStatesTest() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuDeleteBrowsingData {
|
|
verifyAllCheckBoxesAreChecked()
|
|
switchBrowsingHistoryCheckBox()
|
|
switchCachedFilesCheckBox()
|
|
verifyOpenTabsCheckBox(true)
|
|
verifyBrowsingHistoryDetails(false)
|
|
verifyCookiesCheckBox(true)
|
|
verifyCachedFilesCheckBox(false)
|
|
verifySitePermissionsCheckBox(true)
|
|
verifyDownloadsCheckBox(true)
|
|
}
|
|
|
|
restartApp(activityTestRule)
|
|
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuDeleteBrowsingData {
|
|
verifyOpenTabsCheckBox(true)
|
|
verifyBrowsingHistoryDetails(false)
|
|
verifyCookiesCheckBox(true)
|
|
verifyCachedFilesCheckBox(false)
|
|
verifySitePermissionsCheckBox(true)
|
|
verifyDownloadsCheckBox(true)
|
|
switchOpenTabsCheckBox()
|
|
switchBrowsingHistoryCheckBox()
|
|
switchCookiesCheckBox()
|
|
switchCachedFilesCheckBox()
|
|
switchSitePermissionsCheckBox()
|
|
switchDownloadsCheckBox()
|
|
verifyOpenTabsCheckBox(false)
|
|
verifyBrowsingHistoryDetails(true)
|
|
verifyCookiesCheckBox(false)
|
|
verifyCachedFilesCheckBox(true)
|
|
verifySitePermissionsCheckBox(false)
|
|
verifyDownloadsCheckBox(false)
|
|
}
|
|
|
|
restartApp(activityTestRule)
|
|
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuDeleteBrowsingData {
|
|
verifyOpenTabsCheckBox(false)
|
|
verifyBrowsingHistoryDetails(true)
|
|
verifyCookiesCheckBox(false)
|
|
verifyCachedFilesCheckBox(true)
|
|
verifySitePermissionsCheckBox(false)
|
|
verifyDownloadsCheckBox(false)
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun deleteTabsDataWithNoOpenTabsTest() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuDeleteBrowsingData {
|
|
verifyAllCheckBoxesAreChecked()
|
|
selectOnlyOpenTabsCheckBox()
|
|
clickDeleteBrowsingDataButton()
|
|
confirmDeletionAndAssertSnackbar()
|
|
}
|
|
settingsScreen {
|
|
verifyGeneralHeading()
|
|
}
|
|
}
|
|
|
|
@SmokeTest
|
|
@Test
|
|
fun deleteTabsDataTest() {
|
|
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
|
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
|
mDevice.waitForIdle()
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuDeleteBrowsingData {
|
|
verifyAllCheckBoxesAreChecked()
|
|
selectOnlyOpenTabsCheckBox()
|
|
clickDeleteBrowsingDataButton()
|
|
clickDialogCancelButton()
|
|
verifyOpenTabsCheckBox(true)
|
|
clickDeleteBrowsingDataButton()
|
|
confirmDeletionAndAssertSnackbar()
|
|
}
|
|
settingsScreen {
|
|
verifyGeneralHeading()
|
|
}.openSettingsSubMenuDeleteBrowsingData {
|
|
verifyOpenTabsDetails("0")
|
|
}.goBack {
|
|
}.goBack {
|
|
}.openTabDrawer {
|
|
verifyNoOpenTabsInNormalBrowsing()
|
|
}
|
|
}
|
|
|
|
@SmokeTest
|
|
@Test
|
|
fun deleteDeleteBrowsingHistoryDataTest() {
|
|
val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
|
val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2)
|
|
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
|
mDevice.waitForIdle()
|
|
}.openNavigationToolbar {
|
|
}.enterURLAndEnterToBrowser(secondWebPage.url) {
|
|
mDevice.waitForIdle()
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openSettingsSubMenuDeleteBrowsingData {
|
|
verifyBrowsingHistoryDetails("2")
|
|
selectOnlyBrowsingHistoryCheckBox()
|
|
clickDeleteBrowsingDataButton()
|
|
clickDialogCancelButton()
|
|
verifyBrowsingHistoryDetails(true)
|
|
clickDeleteBrowsingDataButton()
|
|
confirmDeletionAndAssertSnackbar()
|
|
verifyBrowsingHistoryDetails("0")
|
|
}.goBack {
|
|
verifyGeneralHeading()
|
|
}.goBack {
|
|
}
|
|
navigationToolbar {
|
|
}.openThreeDotMenu {
|
|
}.openHistory {
|
|
verifyEmptyHistoryView()
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun setOpenLinksInPrivateOn() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openPrivateBrowsingSubMenu {
|
|
verifyOpenLinksInPrivateTabEnabled()
|
|
clickOpenLinksInPrivateTabSwitch()
|
|
}.goBack {
|
|
}.goBack {
|
|
verifyHomeComponent()
|
|
}
|
|
}
|
|
|
|
private fun setOpenLinksInPrivateOff() {
|
|
homeScreen {
|
|
}.openThreeDotMenu {
|
|
}.openSettings {
|
|
}.openPrivateBrowsingSubMenu {
|
|
clickOpenLinksInPrivateTabSwitch()
|
|
verifyOpenLinksInPrivateTabOff()
|
|
}.goBack {
|
|
}.goBack {
|
|
verifyHomeComponent()
|
|
}
|
|
}
|