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.
391 lines
14 KiB
Kotlin
391 lines
14 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 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.customannotations.SmokeTest
|
|
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
|
|
import org.mozilla.fenix.helpers.AppAndSystemHelper.assertExternalAppOpens
|
|
import org.mozilla.fenix.helpers.AppAndSystemHelper.clearDownloadsFolder
|
|
import org.mozilla.fenix.helpers.AppAndSystemHelper.deleteDownloadedFileOnStorage
|
|
import org.mozilla.fenix.helpers.AppAndSystemHelper.setNetworkEnabled
|
|
import org.mozilla.fenix.helpers.Constants.PackageName.GOOGLE_APPS_PHOTOS
|
|
import org.mozilla.fenix.helpers.Constants.PackageName.GOOGLE_DOCS
|
|
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
|
|
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
|
|
import org.mozilla.fenix.helpers.TestAssetHelper
|
|
import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
|
|
import org.mozilla.fenix.helpers.TestHelper.exitMenu
|
|
import org.mozilla.fenix.helpers.TestHelper.mDevice
|
|
import org.mozilla.fenix.ui.robots.browserScreen
|
|
import org.mozilla.fenix.ui.robots.clickPageObject
|
|
import org.mozilla.fenix.ui.robots.downloadRobot
|
|
import org.mozilla.fenix.ui.robots.homeScreen
|
|
import org.mozilla.fenix.ui.robots.navigationToolbar
|
|
import org.mozilla.fenix.ui.robots.notificationShade
|
|
|
|
/**
|
|
* Tests for verifying basic functionality of download
|
|
*
|
|
* - Initiates a download
|
|
* - Verifies download prompt
|
|
* - Verifies download notification and actions
|
|
* - Verifies managing downloads inside the Downloads listing.
|
|
**/
|
|
class DownloadTest {
|
|
private lateinit var mockWebServer: MockWebServer
|
|
|
|
/* Remote test page managed by Mozilla Mobile QA team at https://github.com/mozilla-mobile/testapp */
|
|
private val downloadTestPage = "https://storage.googleapis.com/mobile_test_assets/test_app/downloads.html"
|
|
private var downloadFile: String = ""
|
|
|
|
@get:Rule
|
|
val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides()
|
|
|
|
@Before
|
|
fun setUp() {
|
|
mockWebServer = MockWebServer().apply {
|
|
dispatcher = AndroidAssetDispatcher()
|
|
start()
|
|
}
|
|
|
|
// clear all existing notifications
|
|
notificationShade {
|
|
mDevice.openNotification()
|
|
clearNotifications()
|
|
}
|
|
}
|
|
|
|
@After
|
|
fun tearDown() {
|
|
notificationShade {
|
|
cancelAllShownNotifications()
|
|
}
|
|
|
|
mockWebServer.shutdown()
|
|
|
|
setNetworkEnabled(enabled = true)
|
|
|
|
// Check and clear the downloads folder
|
|
clearDownloadsFolder()
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/243844
|
|
@Test
|
|
fun verifyTheDownloadPromptsTest() {
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "web_icon.png")
|
|
verifyDownloadCompleteNotificationPopup()
|
|
}.clickOpen("image/png") {}
|
|
downloadRobot {
|
|
verifyPhotosAppOpens()
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2299405
|
|
@Test
|
|
fun verifyTheDownloadFailedNotificationsTest() {
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "1GB.zip")
|
|
setNetworkEnabled(enabled = false)
|
|
verifyDownloadFailedPrompt("1GB.zip")
|
|
setNetworkEnabled(enabled = true)
|
|
clickTryAgainButton()
|
|
}
|
|
mDevice.openNotification()
|
|
notificationShade {
|
|
verifySystemNotificationDoesNotExist("Download failed")
|
|
verifySystemNotificationExists("1GB.zip")
|
|
}.closeNotificationTray {}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2298616
|
|
@Test
|
|
fun verifyDownloadCompleteNotificationTest() {
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "web_icon.png")
|
|
verifyDownloadCompleteNotificationPopup()
|
|
}
|
|
mDevice.openNotification()
|
|
notificationShade {
|
|
verifySystemNotificationExists("Download completed")
|
|
clickNotification("Download completed")
|
|
assertExternalAppOpens(GOOGLE_APPS_PHOTOS)
|
|
mDevice.pressBack()
|
|
mDevice.openNotification()
|
|
verifySystemNotificationExists("Download completed")
|
|
swipeDownloadNotification(
|
|
direction = "Left",
|
|
shouldDismissNotification = true,
|
|
canExpandNotification = false,
|
|
)
|
|
verifySystemNotificationDoesNotExist("Firefox Fenix")
|
|
}.closeNotificationTray {}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/451563
|
|
@Ignore("Failing: Bug https://bugzilla.mozilla.org/show_bug.cgi?id=1813521")
|
|
@SmokeTest
|
|
@Test
|
|
fun pauseResumeCancelDownloadTest() {
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "3GB.zip")
|
|
}
|
|
mDevice.openNotification()
|
|
notificationShade {
|
|
verifySystemNotificationExists("Firefox Fenix")
|
|
expandNotificationMessage()
|
|
clickDownloadNotificationControlButton("PAUSE")
|
|
verifySystemNotificationExists("Download paused")
|
|
clickDownloadNotificationControlButton("RESUME")
|
|
clickDownloadNotificationControlButton("CANCEL")
|
|
verifySystemNotificationDoesNotExist("3GB.zip")
|
|
mDevice.pressBack()
|
|
}
|
|
browserScreen {
|
|
}.openThreeDotMenu {
|
|
}.openDownloadsManager {
|
|
verifyEmptyDownloadsList()
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2301474
|
|
@Test
|
|
fun openDownloadedFileFromDownloadsMenuTest() {
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "web_icon.png")
|
|
verifyDownloadCompleteNotificationPopup()
|
|
}
|
|
browserScreen {
|
|
}.openThreeDotMenu {
|
|
}.openDownloadsManager {
|
|
verifyDownloadedFileName("web_icon.png")
|
|
openDownloadedFile("web_icon.png")
|
|
verifyPhotosAppOpens()
|
|
mDevice.pressBack()
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1114970
|
|
@Test
|
|
fun deleteDownloadedFileTest() {
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "smallZip.zip")
|
|
}
|
|
browserScreen {
|
|
}.openThreeDotMenu {
|
|
}.openDownloadsManager {
|
|
verifyDownloadedFileName("smallZip.zip")
|
|
deleteDownloadedItem("smallZip.zip")
|
|
clickSnackbarButton("UNDO")
|
|
verifyDownloadedFileName("smallZip.zip")
|
|
deleteDownloadedItem("smallZip.zip")
|
|
verifyEmptyDownloadsList()
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2302662
|
|
@Test
|
|
fun deleteMultipleDownloadedFilesTest() {
|
|
val firstDownloadedFile = "smallZip.zip"
|
|
val secondDownloadedFile = "textfile.txt"
|
|
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = firstDownloadedFile)
|
|
verifyDownloadedFileName(firstDownloadedFile)
|
|
}.closeDownloadPrompt {
|
|
}.clickDownloadLink(secondDownloadedFile) {
|
|
verifyDownloadPrompt(secondDownloadedFile)
|
|
}.clickDownload {
|
|
verifyDownloadedFileName(secondDownloadedFile)
|
|
}
|
|
browserScreen {
|
|
}.openThreeDotMenu {
|
|
}.openDownloadsManager {
|
|
verifyDownloadedFileName(firstDownloadedFile)
|
|
verifyDownloadedFileName(secondDownloadedFile)
|
|
longClickDownloadedItem(firstDownloadedFile)
|
|
selectDownloadedItem(secondDownloadedFile)
|
|
openMultiSelectMoreOptionsMenu()
|
|
clickMultiSelectRemoveButton()
|
|
clickSnackbarButton("UNDO")
|
|
verifyDownloadedFileName(firstDownloadedFile)
|
|
verifyDownloadedFileName(secondDownloadedFile)
|
|
longClickDownloadedItem(firstDownloadedFile)
|
|
selectDownloadedItem(secondDownloadedFile)
|
|
openMultiSelectMoreOptionsMenu()
|
|
clickMultiSelectRemoveButton()
|
|
verifyEmptyDownloadsList()
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2301537
|
|
@Test
|
|
fun fileDeletedFromStorageIsDeletedEverywhereTest() {
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "smallZip.zip")
|
|
verifyDownloadCompleteNotificationPopup()
|
|
}
|
|
browserScreen {
|
|
}.openThreeDotMenu {
|
|
}.openDownloadsManager {
|
|
waitForDownloadsListToExist()
|
|
verifyDownloadedFileName("smallZip.zip")
|
|
deleteDownloadedFileOnStorage("smallZip.zip")
|
|
}.exitDownloadsManagerToBrowser {
|
|
}.openThreeDotMenu {
|
|
}.openDownloadsManager {
|
|
verifyEmptyDownloadsList()
|
|
exitMenu()
|
|
}
|
|
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "smallZip.zip")
|
|
verifyDownloadCompleteNotificationPopup()
|
|
}
|
|
browserScreen {
|
|
}.openThreeDotMenu {
|
|
}.openDownloadsManager {
|
|
waitForDownloadsListToExist()
|
|
verifyDownloadedFileName("smallZip.zip")
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/457112
|
|
@Test
|
|
fun systemNotificationCantBeDismissedWhileInProgressTest() {
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "3GB.zip")
|
|
}
|
|
browserScreen {
|
|
}.openNotificationShade {
|
|
verifySystemNotificationExists("Firefox Fenix")
|
|
expandNotificationMessage()
|
|
swipeDownloadNotification(direction = "Left", shouldDismissNotification = false)
|
|
clickDownloadNotificationControlButton("PAUSE")
|
|
swipeDownloadNotification(direction = "Right", shouldDismissNotification = false)
|
|
clickDownloadNotificationControlButton("CANCEL")
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2299297
|
|
@Ignore("Failing, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1842154")
|
|
@Test
|
|
fun notificationCanBeDismissedIfDownloadIsInterruptedTest() {
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "1GB.zip")
|
|
}
|
|
|
|
setNetworkEnabled(enabled = false)
|
|
|
|
browserScreen {
|
|
}.openNotificationShade {
|
|
expandNotificationMessage()
|
|
verifySystemNotificationExists("Download failed")
|
|
swipeDownloadNotification("Left", true)
|
|
verifySystemNotificationDoesNotExist("Firefox Fenix")
|
|
}.closeNotificationTray {}
|
|
|
|
downloadRobot {
|
|
}.closeDownloadPrompt {
|
|
verifyDownloadPromptIsDismissed()
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1632384
|
|
@Test
|
|
fun warningWhenClosingPrivateTabsWhileDownloadingTest() {
|
|
homeScreen {
|
|
}.togglePrivateBrowsingMode()
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "3GB.zip")
|
|
}
|
|
browserScreen {
|
|
}.openTabDrawer {
|
|
closeTab()
|
|
}
|
|
browserScreen {
|
|
verifyCancelPrivateDownloadsPrompt("1")
|
|
clickStayInPrivateBrowsingPromptButton()
|
|
}.openNotificationShade {
|
|
verifySystemNotificationExists("Firefox Fenix")
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2302663
|
|
@Test
|
|
fun cancelActivePrivateBrowsingDownloadsTest() {
|
|
homeScreen {
|
|
}.togglePrivateBrowsingMode()
|
|
downloadRobot {
|
|
openPageAndDownloadFile(url = downloadTestPage.toUri(), downloadFile = "3GB.zip")
|
|
}
|
|
browserScreen {
|
|
}.openTabDrawer {
|
|
closeTab()
|
|
}
|
|
browserScreen {
|
|
verifyCancelPrivateDownloadsPrompt("1")
|
|
clickCancelPrivateDownloadsPromptButton()
|
|
}.openNotificationShade {
|
|
verifySystemNotificationDoesNotExist("Firefox Fenix")
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2048448
|
|
// Save edited PDF file from the share overlay
|
|
@SmokeTest
|
|
@Test
|
|
fun saveAsPdfFunctionalityTest() {
|
|
val genericURL =
|
|
TestAssetHelper.getGenericAsset(mockWebServer, 3)
|
|
downloadFile = "pdfForm.pdf"
|
|
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(genericURL.url) {
|
|
clickPageObject(itemWithText("PDF form file"))
|
|
waitForPageToLoad()
|
|
fillPdfForm("Firefox")
|
|
}.openThreeDotMenu {
|
|
}.clickShareButton {
|
|
}.clickSaveAsPDF {
|
|
verifyDownloadPrompt("pdfForm.pdf")
|
|
}.clickDownload {
|
|
}.clickOpen("application/pdf") {
|
|
assertExternalAppOpens(GOOGLE_DOCS)
|
|
}
|
|
}
|
|
|
|
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/244125
|
|
@Test
|
|
fun restartDownloadFromAppNotificationAfterConnectionIsInterruptedTest() {
|
|
downloadFile = "3GB.zip"
|
|
|
|
navigationToolbar {
|
|
}.enterURLAndEnterToBrowser(downloadTestPage.toUri()) {
|
|
waitForPageToLoad()
|
|
}.clickDownloadLink(downloadFile) {
|
|
verifyDownloadPrompt(downloadFile)
|
|
setNetworkEnabled(false)
|
|
}.clickDownload {
|
|
verifyDownloadFailedPrompt(downloadFile)
|
|
setNetworkEnabled(true)
|
|
clickTryAgainButton()
|
|
}
|
|
browserScreen {
|
|
}.openNotificationShade {
|
|
verifySystemNotificationExists("Firefox Fenix")
|
|
expandNotificationMessage()
|
|
clickDownloadNotificationControlButton("CANCEL")
|
|
}
|
|
}
|
|
}
|