/ * 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, it’ s 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 )
}
}
}