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.
iceraven-browser/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsHTTPSOnlyModeTest.kt

202 lines
7.6 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.core.net.toUri
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.TestHelper.exitMenu
import org.mozilla.fenix.helpers.TestSetup
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
class SettingsHTTPSOnlyModeTest : TestSetup() {
private val httpPageUrl = "http://example.com/"
private val httpsPageUrl = "https://example.com/"
private val insecureHttpPage = "http.badssl.com"
// "HTTPs not supported" error page contents:
private val httpsOnlyErrorTitle = "Secure site not available"
private val httpsOnlyErrorMessage = "Most likely, the website simply does not support HTTPS."
private val httpsOnlyErrorMessage2 = "However, its also possible that an attacker is involved. If you continue to the website, you should not enter any sensitive info. If you continue, HTTPS-Only mode will be turned off temporarily for the site."
private val httpsOnlyContinueButton = "Continue to HTTP Site"
private val httpsOnlyBackButton = "Go Back (Recommended)"
@get:Rule
val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides(skipOnboarding = true)
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1724825
@Test
fun httpsOnlyModeMenuItemsTest() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openHttpsOnlyModeMenu {
verifyHttpsOnlyModeMenuHeader()
verifyHttpsOnlyModeSummary()
verifyHttpsOnlyModeIsEnabled(false)
verifyHttpsOnlyModeOptionsEnabled(false)
verifyHttpsOnlyOptionSelected(
allTabsOptionSelected = false,
privateTabsOptionSelected = false,
)
clickHttpsOnlyModeSwitch()
verifyHttpsOnlyModeIsEnabled(true)
verifyHttpsOnlyModeOptionsEnabled(true)
verifyHttpsOnlyOptionSelected(
allTabsOptionSelected = true,
privateTabsOptionSelected = false,
)
}.goBack {
verifySettingsToolbar()
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1724827
@SmokeTest
@Test
fun httpsOnlyModeEnabledInNormalBrowsingTest() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openHttpsOnlyModeMenu {
clickHttpsOnlyModeSwitch()
verifyHttpsOnlyOptionSelected(
allTabsOptionSelected = true,
privateTabsOptionSelected = false,
)
}.goBack {
verifySettingsOptionSummary("HTTPS-Only Mode", "On in all tabs")
exitMenu()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(httpPageUrl.toUri()) {
waitForPageToLoad()
}.openNavigationToolbar {
verifyUrl(httpsPageUrl)
}.enterURLAndEnterToBrowser(insecureHttpPage.toUri()) {
verifyPageContent(httpsOnlyErrorTitle)
verifyPageContent(httpsOnlyErrorMessage)
verifyPageContent(httpsOnlyErrorMessage2)
verifyPageContent(httpsOnlyBackButton)
clickPageObject(itemContainingText(httpsOnlyBackButton))
verifyPageContent("Example Domain")
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(insecureHttpPage.toUri()) {
clickPageObject(itemContainingText(httpsOnlyContinueButton))
verifyPageContent("http.badssl.com")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2091057
@Test
fun httpsOnlyModeExceptionPersistsForCurrentSessionTest() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openHttpsOnlyModeMenu {
clickHttpsOnlyModeSwitch()
verifyHttpsOnlyOptionSelected(
allTabsOptionSelected = true,
privateTabsOptionSelected = false,
)
exitMenu()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(insecureHttpPage.toUri()) {
verifyPageContent(httpsOnlyErrorTitle)
clickPageObject(itemContainingText(httpsOnlyContinueButton))
verifyPageContent("http.badssl.com")
}.openTabDrawer {
closeTab()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(insecureHttpPage.toUri()) {
verifyPageContent("http.badssl.com")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1724828
@Test
fun httpsOnlyModeEnabledOnlyInPrivateBrowsingTest() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openHttpsOnlyModeMenu {
clickHttpsOnlyModeSwitch()
selectHttpsOnlyModeOption(
allTabsOptionSelected = false,
privateTabsOptionSelected = true,
)
}.goBack {
verifySettingsOptionSummary("HTTPS-Only Mode", "On in private tabs")
exitMenu()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(insecureHttpPage.toUri()) {
verifyPageContent("http.badssl.com")
}.goToHomescreen {
}.togglePrivateBrowsingMode()
navigationToolbar {
}.enterURLAndEnterToBrowser(httpPageUrl.toUri()) {
waitForPageToLoad()
}.openNavigationToolbar {
verifyUrl(httpsPageUrl)
}.enterURLAndEnterToBrowser(insecureHttpPage.toUri()) {
verifyPageContent(httpsOnlyErrorTitle)
verifyPageContent(httpsOnlyErrorMessage)
verifyPageContent(httpsOnlyErrorMessage2)
verifyPageContent(httpsOnlyBackButton)
clickPageObject(itemContainingText(httpsOnlyBackButton))
verifyPageContent("Example Domain")
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(insecureHttpPage.toUri()) {
clickPageObject(itemContainingText(httpsOnlyContinueButton))
verifyPageContent("http.badssl.com")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2091058
@Test
fun turnOffHttpsOnlyModeTest() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openHttpsOnlyModeMenu {
clickHttpsOnlyModeSwitch()
verifyHttpsOnlyOptionSelected(
allTabsOptionSelected = true,
privateTabsOptionSelected = false,
)
exitMenu()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(httpPageUrl.toUri()) {
waitForPageToLoad()
}.openNavigationToolbar {
verifyUrl(httpsPageUrl)
}.goBackToBrowserScreen {
}.openThreeDotMenu {
}.openSettings {
}.openHttpsOnlyModeMenu {
clickHttpsOnlyModeSwitch()
verifyHttpsOnlyModeIsEnabled(false)
}.goBack {
verifySettingsOptionSummary("HTTPS-Only Mode", "Off")
exitMenu()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(httpPageUrl.toUri()) {
waitForPageToLoad()
}.openNavigationToolbar {
verifyUrl(httpPageUrl)
}
}
}