Skip to content
This repository has been archived by the owner on Feb 20, 2023. It is now read-only.

Commit

Permalink
[UI smoke test] For #21002: Ads app permissions UI tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Oana Horvath committed Jan 19, 2022
1 parent af5b2c9 commit 29c14bc
Show file tree
Hide file tree
Showing 4 changed files with 404 additions and 10 deletions.
226 changes: 226 additions & 0 deletions app/src/androidTest/java/org/mozilla/fenix/ui/SitePermissionsTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
/* 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.Ignore
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.navigationToolbar

/**
* Tests for verifying site permissions prompts & functionality
*
*/
class SitePermissionsTest {
/* Test page created and handled by the Mozilla mobile test-eng team */
private val testPage = "https://mozilla-mobile.github.io/testapp/permissions"
private val testPageSubstring = "https://mozilla-mobile.github.io:443"

@get:Rule
val activityTestRule = HomeActivityIntentTestRule()

@SmokeTest
@Test
fun microphonePermissionChoiceOnEachRequestTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
waitForPageToLoad()
}.clickStartMicrophoneButton {
clickAppPermissionButton(true)
verifyMicrophonePermissionPrompt(testPageSubstring)
}.clickPagePermissionButton(false) {
verifyPageContent("Microphone not allowed")
}.clickStartMicrophoneButton {
}.clickPagePermissionButton(true) {
verifyPageContent("Microphone allowed")
}
}

@SmokeTest
@Test
fun rememberBlockMicrophonePermissionChoiceTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
waitForPageToLoad()
}.clickStartMicrophoneButton {
clickAppPermissionButton(true)
verifyMicrophonePermissionPrompt(testPageSubstring)
selectRememberPermissionDecision()
}.clickPagePermissionButton(false) {
verifyPageContent("Microphone not allowed")
}.openThreeDotMenu {
}.refreshPage {
waitForPageToLoad()
}.clickStartMicrophoneButton { }
browserScreen {
verifyPageContent("Microphone not allowed")
}
}

@Ignore("Flaky, needs investigation: https://github.com/mozilla-mobile/fenix/issues/23298")
@SmokeTest
@Test
fun rememberAllowMicrophonePermissionChoiceTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
waitForPageToLoad()
}.clickStartMicrophoneButton {
clickAppPermissionButton(true)
verifyMicrophonePermissionPrompt(testPageSubstring)
selectRememberPermissionDecision()
}.clickPagePermissionButton(true) {
verifyPageContent("Microphone allowed")
}.openThreeDotMenu {
}.refreshPage {
waitForPageToLoad()
}.clickStartMicrophoneButton { }
browserScreen {
verifyPageContent("Microphone allowed")
}
}

@SmokeTest
@Test
fun blockAppUsingMicrophoneTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
}.clickStartMicrophoneButton {
clickAppPermissionButton(false)
}
browserScreen {
verifyPageContent("Microphone not allowed")
}
}

@SmokeTest
@Test
fun cameraPermissionChoiceOnEachRequestTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
waitForPageToLoad()
}.clickStartCameraButton {
clickAppPermissionButton(true)
verifyCameraPermissionPrompt(testPageSubstring)
}.clickPagePermissionButton(false) {
verifyPageContent("Camera not allowed")
}.clickStartCameraButton {
}.clickPagePermissionButton(true) {
verifyPageContent("Camera allowed")
}
}

@SmokeTest
@Test
fun rememberBlockCameraPermissionChoiceTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
waitForPageToLoad()
}.clickStartCameraButton {
clickAppPermissionButton(true)
verifyCameraPermissionPrompt(testPageSubstring)
selectRememberPermissionDecision()
}.clickPagePermissionButton(false) {
verifyPageContent("Camera not allowed")
}.openThreeDotMenu {
}.refreshPage {
waitForPageToLoad()
}.clickStartCameraButton { }
browserScreen {
verifyPageContent("Camera not allowed")
}
}

@SmokeTest
@Test
fun rememberAllowCameraPermissionChoiceTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
waitForPageToLoad()
}.clickStartCameraButton {
clickAppPermissionButton(true)
verifyCameraPermissionPrompt(testPageSubstring)
selectRememberPermissionDecision()
}.clickPagePermissionButton(true) {
verifyPageContent("Camera allowed")
}.openThreeDotMenu {
}.refreshPage {
waitForPageToLoad()
}.clickStartCameraButton { }
browserScreen {
verifyPageContent("Camera allowed")
}
}

@SmokeTest
@Test
fun blockAppUsingCameraTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
}.clickStartCameraButton {
clickAppPermissionButton(false)
}
browserScreen {
verifyPageContent("Camera not allowed")
}
}

@Test
fun blockNotificationsPermissionPromptTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
}.clickOpenNotificationButton {
verifyNotificationsPermissionPrompt(testPageSubstring)
}.clickPagePermissionButton(false) {
verifyPageContent("Notifications not allowed")
}.openThreeDotMenu {
}.refreshPage {
waitForPageToLoad()
}.clickOpenNotificationButton {
verifyNotificationsPermissionPrompt(testPageSubstring, true)
}
}

@Test
fun allowNotificationsPermissionPromptTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
}.clickOpenNotificationButton {
verifyNotificationsPermissionPrompt(testPageSubstring)
}.clickPagePermissionButton(true) {
verifyPageContent("Notifications allowed")
}
}

@Ignore("Needs mocking location for Firebase - to do: https://github.com/mozilla-mobile/mobile-test-eng/issues/585")
@Test
fun allowLocationPermissionsTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
}.clickGetLocationButton {
clickAppPermissionButton(true)
verifyLocationPermissionPrompt(testPageSubstring)
}.clickPagePermissionButton(true) {
verifyPageContent("longitude")
verifyPageContent("latitude")
}
}

@Ignore("Needs mocking location for Firebase - to do: https://github.com/mozilla-mobile/mobile-test-eng/issues/585")
@Test
fun blockLocationPermissionsTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.toUri()) {
}.clickGetLocationButton {
clickAppPermissionButton(true)
verifyLocationPermissionPrompt(testPageSubstring)
}.clickPagePermissionButton(false) {
verifyPageContent("User denied geolocation prompt")
}
}
}
1 change: 0 additions & 1 deletion app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ import org.mozilla.fenix.helpers.TestHelper.returnToBrowser
import org.mozilla.fenix.helpers.TestHelper.scrollToElementByText
import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource
import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickTabCrashedRestoreButton
import org.mozilla.fenix.ui.robots.collectionRobot
import org.mozilla.fenix.ui.robots.customTabScreen
import org.mozilla.fenix.ui.robots.enhancedTrackingProtection
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ import org.mozilla.fenix.helpers.ext.waitNotNull
class BrowserRobot {
private lateinit var sessionLoadedIdlingResource: SessionLoadedIdlingResource

fun waitForPageToLoad() = progressBar.waitUntilGone(waitingTime)

fun verifyCurrentPrivateSession(context: Context) {
val selectedTab = context.components.core.store.state.selectedTab
assertTrue("Current session is private", selectedTab?.content?.private ?: false)
Expand Down Expand Up @@ -541,6 +543,16 @@ class BrowserRobot {
}
}

fun clickTabCrashedRestoreButton() {
assertTrue(
mDevice.findObject(UiSelector().resourceId("$packageName:id/restoreTabButton"))
.waitForExists(waitingTime)
)

val tabCrashRestoreButton = mDevice.findObject(UiSelector().resourceIdMatches("$packageName:id/restoreTabButton"))
tabCrashRestoreButton.click()
}

class Transition {
private val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
private fun threeDotButton() = onView(
Expand Down Expand Up @@ -622,7 +634,6 @@ class BrowserRobot {
}

fun clickTabCrashedCloseButton(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition {

assertTrue(
mDevice.findObject(UiSelector().resourceId("$packageName:id/closeTabButton"))
.waitForExists(waitingTime)
Expand Down Expand Up @@ -655,6 +666,42 @@ class BrowserRobot {
DownloadRobot().interact()
return DownloadRobot.Transition()
}

fun clickStartCameraButton(interact: SitePermissionsRobot.() -> Unit): SitePermissionsRobot.Transition {
// Test page used for testing permissions located at https://mozilla-mobile.github.io/testapp/permissions
cameraButton.waitForExists(waitingTime)
cameraButton.click()

SitePermissionsRobot().interact()
return SitePermissionsRobot.Transition()
}

fun clickStartMicrophoneButton(interact: SitePermissionsRobot.() -> Unit): SitePermissionsRobot.Transition {
// Test page used for testing permissions located at https://mozilla-mobile.github.io/testapp/permissions
microphoneButton.waitForExists(waitingTime)
microphoneButton.click()

SitePermissionsRobot().interact()
return SitePermissionsRobot.Transition()
}

fun clickOpenNotificationButton(interact: SitePermissionsRobot.() -> Unit): SitePermissionsRobot.Transition {
// Test page used for testing permissions located at https://mozilla-mobile.github.io/testapp/permissions
notificationButton.waitForExists(waitingTime)
notificationButton.click()

SitePermissionsRobot().interact()
return SitePermissionsRobot.Transition()
}

fun clickGetLocationButton(interact: SitePermissionsRobot.() -> Unit): SitePermissionsRobot.Transition {
// Test page used for testing permissions located at https://mozilla-mobile.github.io/testapp/permissions
getLocationButton.waitForExists(waitingTime)
getLocationButton.click()

SitePermissionsRobot().interact()
return SitePermissionsRobot.Transition()
}
}
}

Expand Down Expand Up @@ -699,13 +746,17 @@ private fun mediaPlayerPlayButton() =
.text("Play")
)

fun clickTabCrashedRestoreButton() {

assertTrue(
mDevice.findObject(UiSelector().resourceId("$packageName:id/restoreTabButton"))
.waitForExists(waitingTime)
private var progressBar =
mDevice.findObject(
UiSelector().resourceId("$packageName:id/mozac_browser_toolbar_progress")
)

val tabCrashRestoreButton = mDevice.findObject(UiSelector().resourceIdMatches("$packageName:id/restoreTabButton"))
tabCrashRestoreButton.click()
}
// 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"))

private val microphoneButton = mDevice.findObject(UiSelector().text("Open microphone"))

private val notificationButton = mDevice.findObject(UiSelector().text("Open notifications dialogue"))

private val getLocationButton = mDevice.findObject(UiSelector().text("Get Location"))
Loading

0 comments on commit 29c14bc

Please sign in to comment.