[fenix] For https://github.com/mozilla-mobile/fenix/issues/26286 new site security quick settings UI tests

pull/600/head
AndiAJ 2 years ago committed by mergify[bot]
parent 7005fff61b
commit 2219f9580b

@ -4,6 +4,7 @@
package org.mozilla.fenix.ui
import androidx.core.net.toUri
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import okhttp3.mockwebserver.MockWebServer
@ -15,6 +16,7 @@ import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
/**
@ -45,6 +47,7 @@ class NavigationToolbarTest {
}
featureSettingsHelper.setJumpBackCFREnabled(false)
featureSettingsHelper.setTCPCFREnabled(false)
featureSettingsHelper.disablePwaCFR(true)
}
@After
@ -138,4 +141,44 @@ class NavigationToolbarTest {
verifyFindNextInPageResult("1/1")
}.closeFindInPage { }
}
@Test
fun verifySecurePageSecuritySubMenuTest() {
val defaultWebPage = "https://mozilla-mobile.github.io/testapp/loginForm"
val defaultWebPageTitle = "Login_form"
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.toUri()) {
}.openSiteSecuritySheet {
verifyQuickActionSheet(defaultWebPage, true)
openSecureConnectionSubMenu(true)
verifySecureConnectionSubMenu(defaultWebPageTitle, defaultWebPage, true)
}
}
@Test
fun verifyInsecurePageSecuritySubMenuTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
}.openSiteSecuritySheet {
verifyQuickActionSheet(defaultWebPage.url.toString(), false)
openSecureConnectionSubMenu(false)
verifySecureConnectionSubMenu(defaultWebPage.title, defaultWebPage.url.toString(), false)
}
}
@Test
fun verifyClearCookiesFromQuickSettingsTest() {
val helpPageUrl = "mozilla.org"
homeScreen {
}.openThreeDotMenu {
}.openHelp {
}.openSiteSecuritySheet {
clickQuickActionSheetClearSiteData()
verifyClearSiteDataPrompt(helpPageUrl)
}
}
}

@ -945,6 +945,14 @@ class BrowserRobot {
SitePermissionsRobot().interact()
return SitePermissionsRobot.Transition()
}
fun openSiteSecuritySheet(interact: SiteSecurityRobot.() -> Unit): SiteSecurityRobot.Transition {
siteSecurityToolbarButton().waitForExists(waitingTime)
siteSecurityToolbarButton().clickAndWaitForNewWindow(waitingTime)
SiteSecurityRobot().interact()
return SiteSecurityRobot.Transition()
}
}
}
@ -1030,6 +1038,9 @@ private fun creditCardSuggestion(creditCardNumber: String) =
.textContains(creditCardNumber),
)
private fun siteSecurityToolbarButton() =
mDevice.findObject(UiSelector().resourceId("$packageName:id/mozac_browser_toolbar_security_indicator"))
// Permissions test page elements & prompts
// Test page used located at https://mozilla-mobile.github.io/testapp/permissions
private val cameraButton = mDevice.findObject(UiSelector().text("Open camera"))

@ -0,0 +1,149 @@
/* 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/. */
@file:Suppress("TooManyFunctions")
package org.mozilla.fenix.ui.robots
import androidx.test.uiautomator.UiSelector
import mozilla.components.support.ktx.kotlin.tryGetHostFromUrl
import org.junit.Assert.assertTrue
import org.mozilla.fenix.R
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime
import org.mozilla.fenix.helpers.TestHelper.getStringResource
import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.helpers.TestHelper.packageName
/**
* Implementation of Robot Pattern for Site Security UI.
*/
class SiteSecurityRobot {
fun verifyQuickActionSheet(url: String = "", isConnectionSecure: Boolean) = assertQuickActionSheet(url, isConnectionSecure)
fun openSecureConnectionSubMenu(isConnectionSecure: Boolean) =
quickActionSheetSecurityInfo(isConnectionSecure).clickAndWaitForNewWindow(waitingTime)
fun verifySecureConnectionSubMenu(pageTitle: String = "", url: String = "", isConnectionSecure: Boolean) =
assertSecureConnectionSubMenu(pageTitle, url, isConnectionSecure)
fun clickQuickActionSheetClearSiteData() = quickActionSheetClearSiteData().click()
fun verifyClearSiteDataPrompt(url: String) = assertClearSiteDataPrompt(url)
class Transition
}
private fun assertQuickActionSheet(url: String = "", isConnectionSecure: Boolean) {
quickActionSheet().waitForExists(waitingTime)
assertTrue(quickActionSheetUrl(url.tryGetHostFromUrl()).waitForExists(waitingTime))
assertTrue(quickActionSheetSecurityInfo(isConnectionSecure).waitForExists(waitingTime))
assertTrue(quickActionSheetTrackingProtectionSwitch().waitForExists(waitingTime))
assertTrue(quickActionSheetClearSiteData().waitForExists(waitingTime))
}
private fun assertSecureConnectionSubMenu(pageTitle: String = "", url: String = "", isConnectionSecure: Boolean) {
secureConnectionSubMenu().waitForExists(waitingTime)
assertTrue(secureConnectionSubMenuPageTitle(pageTitle).waitForExists(waitingTime))
assertTrue(secureConnectionSubMenuPageUrl(url).waitForExists(waitingTime))
assertTrue(secureConnectionSubMenuLockIcon().waitForExists(waitingTime))
assertTrue(secureConnectionSubMenuSecurityInfo(isConnectionSecure).waitForExists(waitingTime))
assertTrue(secureConnectionSubMenuCertificateInfo().waitForExists(waitingTime))
}
private fun assertClearSiteDataPrompt(url: String) {
assertTrue(clearSiteDataPrompt(url).waitForExists(waitingTime))
assertTrue(cancelClearSiteDataButton.waitForExists(waitingTime))
assertTrue(deleteSiteDataButton.waitForExists(waitingTime))
}
private fun quickActionSheet() =
mDevice.findObject(UiSelector().resourceId("$packageName:id/quick_action_sheet"))
private fun quickActionSheetUrl(url: String) =
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/url")
.textContains(url),
)
private fun quickActionSheetSecurityInfo(isConnectionSecure: Boolean) =
if (isConnectionSecure) {
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/securityInfo")
.textContains(getStringResource(R.string.quick_settings_sheet_secure_connection_2)),
)
} else {
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/securityInfo")
.textContains(getStringResource(R.string.quick_settings_sheet_insecure_connection_2)),
)
}
private fun quickActionSheetTrackingProtectionSwitch() =
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/trackingProtectionSwitch"),
)
private fun quickActionSheetClearSiteData() =
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/clearSiteData"),
)
private fun secureConnectionSubMenu() =
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/design_bottom_sheet"),
)
private fun secureConnectionSubMenuPageTitle(pageTitle: String) =
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/title")
.textContains(pageTitle),
)
private fun secureConnectionSubMenuPageUrl(url: String) =
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/url")
.textContains(url),
)
private fun secureConnectionSubMenuLockIcon() =
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/securityInfoIcon"),
)
private fun secureConnectionSubMenuSecurityInfo(isConnectionSecure: Boolean) =
if (isConnectionSecure) {
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/securityInfo")
.textContains(getStringResource(R.string.quick_settings_sheet_secure_connection_2)),
)
} else {
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/securityInfo")
.textContains(getStringResource(R.string.quick_settings_sheet_insecure_connection_2)),
)
}
private fun secureConnectionSubMenuCertificateInfo() =
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/securityInfo"),
)
private fun clearSiteDataPrompt(url: String) =
mDevice.findObject(
UiSelector()
.resourceId("android:id/message")
.textContains(url),
)
private val cancelClearSiteDataButton = mDevice.findObject(UiSelector().resourceId("android:id/button2"))
private val deleteSiteDataButton = mDevice.findObject(UiSelector().resourceId("android:id/button1"))
Loading…
Cancel
Save