1
0
Fork 0
fenix/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsPrivacyTest.kt

550 lines
18 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.Ignore
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityTestRule
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
/**
* 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 = HomeActivityTestRule()
@Before
fun setUp() {
mockWebServer = MockWebServer().apply {
setDispatcher(AndroidAssetDispatcher())
start()
}
}
@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 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 {
// DATA COLLECTION
verifyDataCollectionButton()
}.openSettingsSubMenuDataCollection {
verifyNavigationToolBarHeader()
verifyDataCollectionSubMenuItems()
}.goBack {
// OPEN LINKS IN APPS
verifyOpenLinksInAppsButton()
verifyOpenLinksInAppsSwitchDefault()
}.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()
verifyDefaultValueSyncLogins()
verifyDefaultValueAutofillLogins()
}.openSavedLogins {
verifySavedLoginsView()
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")
}.openTabDrawer {
}.openHomeScreen {
}.openThreeDotMenu {
}.openSettings {
TestHelper.scrollToElementByText("Logins and passwords")
}.openLoginsAndPasswordSubMenu {
verifyDefaultView()
verifyDefaultValueSyncLogins()
}.openSavedLogins {
verifySavedLoginsView()
tapSetupLater()
// Verify that the login appears correctly
verifySavedLoginFromPrompt()
}
}
@Test
fun doNotSaveLoginFromPromptTest() {
val saveLoginTest = TestAssetHelper.getSaveLoginAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
verifySaveLoginPromptIsShown()
// Don't save the login
saveLoginFromPrompt("Never save")
}.openTabDrawer {
}.openHomeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
verifyDefaultView()
verifyDefaultValueSyncLogins()
}.openSavedLogins {
verifySavedLoginsView()
tapSetupLater()
// Verify that the login list is empty
verifyNotSavedLoginFromPromt()
}
}
@Test
fun saveLoginsAndPasswordsOptions() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.saveLoginsAndPasswordsOptions {
verifySaveLoginsOptionsView()
}
}
@Test
fun verifyPrivateBrowsingMenuItemsTest() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openPrivateBrowsingSubMenu {
verifyAddPrivateBrowsingShortcutButton()
verifyOpenLinksInPrivateTab()
verifyOpenLinksInPrivateTabOff()
}.goBack {
verifySettingsView()
}
}
@Test
@Ignore("See: https://github.com/mozilla-mobile/fenix/issues/10915")
fun openExternalLinksInPrivateTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
setOpenLinksInPrivateOn()
openAppFromExternalLink(defaultWebPage.url.toString())
browserScreen {
}.openTabDrawer {
verifyPrivateModeSelected()
}.openHomeScreen { }
setOpenLinksInPrivateOff()
openAppFromExternalLink(defaultWebPage.url.toString())
browserScreen {
}.openTabDrawer {
verifyNormalModeSelected()
}
}
@Test
@Ignore("See: https://github.com/mozilla-mobile/fenix/issues/10915")
fun launchPageShortcutInPrivateModeTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
setOpenLinksInPrivateOn()
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
}.openThreeDotMenu {
}.openAddToHomeScreen {
addShortcutName(pageShortcutName)
clickAddShortcutButton()
clickAddAutomaticallyButton()
}.openHomeScreenShortcut(pageShortcutName) {
}.openTabDrawer {
verifyPrivateModeSelected()
}
}
@Test
fun launchLinksInPrivateToggleOffStateDoesntChangeTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
setOpenLinksInPrivateOn()
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
}.openThreeDotMenu {
}.openAddToHomeScreen {
addShortcutName(pageShortcutName)
clickAddShortcutButton()
clickAddAutomaticallyButton()
}.openHomeScreenShortcut(pageShortcutName) {
}.openTabDrawer {
}.openHomeScreen { }
setOpenLinksInPrivateOff()
restartApp(activityTestRule)
mDevice.waitForIdle()
addToHomeScreen {
}.searchAndOpenHomeScreenShortcut(pageShortcutName) {
}.openTabDrawer {
verifyNormalModeSelected()
}.openHomeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openPrivateBrowsingSubMenu {
verifyOpenLinksInPrivateTabOff()
}
}
@Test
fun addPrivateBrowsingShortcut() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openPrivateBrowsingSubMenu {
addPrivateShortcutToHomescreen()
verifyPrivateBrowsingShortcutIcon()
}.openPrivateBrowsingShortcut {
verifySearchView()
}.openBrowser {
}.openTabDrawer {
verifyPrivateModeSelected()
}
}
@Ignore("This is a stub test, ignore for now")
@Test
fun toggleTrackingProtection() {
// Open static test website to verify TP is turned on (default): https://github.com/rpappalax/testapp
// (static content needs to be migrated to assets folder)
// Open 3dot (main) menu
// Select settings
// Toggle Tracking Protection to 'off'
// Back arrow to Home
// Open static test website to verify TP is now off: https://github.com/rpappalax/testapp
}
@Ignore("This is a stub test, ignore for now")
@Test
fun verifySitePermissions() {
// Open 3dot (main) menu
// Select settings
// Click on: "Site permissions"
// Verify sub-menu items...
// Click on: "Exceptions"
// Verify: "No site exceptions"
// TBD: create a site exception
// TBD: return to this UI and verify
//
// Open browser to static test website: https://github.com/rpappalax/testapp
// Click on "Test site permissions: geolocation"
// Verify that geolocation permissions dialogue is opened
// Verify text: "Allow <website URL> to use your geolocation?
// Verify toggle: 'Remember decision for this site?"
// Verify button: "Don't Allow"
// Verify button: "Allow" (default)
// Select "Remember decision for this site"
// Refresh page
// Click on "Test site permissions: geolocation"
// Verify that geolocation permissions dialogue is not opened
//
//
// Open browser to static test website: https://github.com/rpappalax/testapp
// Click on "Test site permissions: camera"
// Verify that camera permissions dialogue is opened
// Verify text: "Allow <website URL> to use your camera?
// Verify toggle: 'Remember decision for this site?"
// Verify button: "Don't Allow"
// Verify button: "Allow" (default)
// Select "Remember decision for this site"
// Refresh page
// Click on "Test site permissions: camera"
// Verify that camera permissions dialogue is not opened
//
//
// Open browser to static test website: https://github.com/rpappalax/testapp
// Click on "Test site permissions: microphone"
// Verify that microphone permissions dialogue is opened
// Verify text: "Allow <website URL> to use your microphone?
// Verify toggle: 'Remember decision for this site?"
// Verify button: "Don't Allow"
// Verify button: "Allow" (default)
// Select "Remember decision for this site"
// Refresh page
// Click on "Test site permissions: microphone"
// Verify that microphone permissions dialogue is not opened
//
//
// Open browser to static test website: https://github.com/rpappalax/testapp
// Click on "Test site permissions: notifications dialogue"
// Verify that notifications dialogue permissions dialogue is opened
// Verify text: "Allow <website URL> to send notifications?
// Verify toggle: 'Remember decision for this site?"
// Verify button: "Never"
// Verify button: "Always" (default)
// Select "Remember decision for this site"
// Refresh page
// Click on "Test site permissions: notifications dialogue"
// Verify that notifications dialogue permissions dialogue is not opened
//
// Open 3dot (main) menu
// Select settings
// Click on: "Site permissions"
// Select: Camera
// Switch from "ask to allow" (default) to "blocked"
// Click back arrow
//
// Select: Location
// Switch from "ask to allow" (default) to "blocked"
// Click back arrow
//
// Select: Microphone
// Switch from "ask to allow" (default) to "blocked"
// Click back arrow
//
// Select: Notification
// Switch from "ask to allow" (default) to "blocked"
// Click back arrow
//
// Open browser to static test website: https://github.com/rpappalax/testapp
// Click on "Test site permissions: camera dialogue"
// Verify that notifications dialogue permissions dialogue is not opened
//
// Open browser to static test website: https://github.com/rpappalax/testapp
// Click on "Test site permissions: geolocation dialogue"
// Verify that notifications dialogue permissions dialogue is not opened
//
// Open browser to static test website: https://github.com/rpappalax/testapp
// Click on "Test site permissions: microphone dialogue"
// Verify that notifications dialogue permissions dialogue is not opened
//
// Open browser to static test website: https://github.com/rpappalax/testapp
// Click on "Test site permissions: notifications dialogue"
// Verify that notifications dialogue permissions dialogue is not opened
}
@Ignore("This is a stub test, ignore for now")
@Test
fun deleteBrowsingData() {
// Setup:
// Open 2 websites as 2 tabs
// Save as 1 collection
// Open 2 more websites in 2 other tabs
// Save as a 2nd collection
// Open 3dot (main) menu
// Select settings
// Click on "Delete browsing data"
// Verify correct number of tabs, addresses and collections are indicated
// Select all 3 checkboxes
// Click on "Delete browsing data button"
// Return to home screen and verify that all tabs, history and collection are gone
//
// Verify xxx
//
// New: If coming from tab -> settings -> delete browsing data
// then expect to return to home screen
// If coming from tab -> home -> settings -> delete browsing data
// then expect return to settings (after which you can return to home manually)
}
@Ignore("This is a stub test, ignore for now")
@Test
fun verifyDataCollection() {
// Open 3dot (main) menu
// Select settings
// Click on "Data collection"
// Verify header: "Usage and technical data"
// Verify text: "Shares performance, usage, hardware and customization data about your browser with Mozilla"
// " to help us make Firefox preview better"
// Verify toggle is on by default
// TBD:
// see: telemetry testcases
}
@Ignore("This is a stub test, ignore for now")
@Test
fun openPrivacyNotice() {
// Open 3dot (main) menu
// Select settings
// Click on "Privacy notice"
// Verify redirect to: mozilla.org Privacy notice page"
}
@Ignore("This is a stub test, ignore for now")
@Test
fun checkLeakCanary() {
// Open 3dot (main) menu
// Select settings
// Click on Leak Canary toggle
// Verify 'dump' message
}
}
private fun setOpenLinksInPrivateOn() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openPrivateBrowsingSubMenu {
verifyOpenLinksInPrivateTabEnabled()
clickOpenLinksInPrivateTabSwitch()
}.goBack {
}.goBack {
verifyHomeComponent()
}
}
private fun setOpenLinksInPrivateOff() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openPrivateBrowsingSubMenu {
clickOpenLinksInPrivateTabSwitch()
verifyOpenLinksInPrivateTabOff()
}.goBack {
}.goBack {
verifyHomeComponent()
}
}