/* 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.compose.ui.test.junit4.AndroidComposeTestRule import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test import org.mozilla.fenix.R import org.mozilla.fenix.customannotations.SmokeTest import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestAssetHelper.getStorageTestAsset import org.mozilla.fenix.helpers.TestHelper.exitMenu import org.mozilla.fenix.helpers.TestHelper.getStringResource import org.mozilla.fenix.helpers.TestHelper.mDevice import org.mozilla.fenix.helpers.TestHelper.restartApp import org.mozilla.fenix.helpers.TestHelper.setNetworkEnabled import org.mozilla.fenix.ui.robots.browserScreen import org.mozilla.fenix.ui.robots.clickPageObject import org.mozilla.fenix.ui.robots.homeScreen import org.mozilla.fenix.ui.robots.navigationToolbar import org.mozilla.fenix.ui.robots.settingsScreen /** * Tests for verifying the Settings for: * Delete Browsing Data */ class ComposeSettingsDeleteBrowsingDataTest { private lateinit var mockWebServer: MockWebServer @get:Rule val composeTestRule = AndroidComposeTestRule( HomeActivityIntentTestRule.withDefaultSettingsOverrides( skipOnboarding = true, tabsTrayRewriteEnabled = true, ), ) { it.activity } @Before fun setUp() { mockWebServer = MockWebServer().apply { dispatcher = AndroidAssetDispatcher() start() } } @After fun tearDown() { mockWebServer.shutdown() } @Test fun deleteBrowsingDataOptionStatesTest() { homeScreen { }.openThreeDotMenu { }.openSettings { }.openSettingsSubMenuDeleteBrowsingData { verifyAllCheckBoxesAreChecked() switchBrowsingHistoryCheckBox() switchCachedFilesCheckBox() verifyOpenTabsCheckBox(true) verifyBrowsingHistoryDetails(false) verifyCookiesCheckBox(true) verifyCachedFilesCheckBox(false) verifySitePermissionsCheckBox(true) verifyDownloadsCheckBox(true) } restartApp(composeTestRule.activityRule) homeScreen { }.openThreeDotMenu { }.openSettings { }.openSettingsSubMenuDeleteBrowsingData { verifyOpenTabsCheckBox(true) verifyBrowsingHistoryDetails(false) verifyCookiesCheckBox(true) verifyCachedFilesCheckBox(false) verifySitePermissionsCheckBox(true) verifyDownloadsCheckBox(true) switchOpenTabsCheckBox() switchBrowsingHistoryCheckBox() switchCookiesCheckBox() switchCachedFilesCheckBox() switchSitePermissionsCheckBox() switchDownloadsCheckBox() verifyOpenTabsCheckBox(false) verifyBrowsingHistoryDetails(true) verifyCookiesCheckBox(false) verifyCachedFilesCheckBox(true) verifySitePermissionsCheckBox(false) verifyDownloadsCheckBox(false) } restartApp(composeTestRule.activityRule) homeScreen { }.openThreeDotMenu { }.openSettings { }.openSettingsSubMenuDeleteBrowsingData { verifyOpenTabsCheckBox(false) verifyBrowsingHistoryDetails(true) verifyCookiesCheckBox(false) verifyCachedFilesCheckBox(true) verifySitePermissionsCheckBox(false) verifyDownloadsCheckBox(false) } } @Test fun deleteTabsDataWithNoOpenTabsTest() { homeScreen { }.openThreeDotMenu { }.openSettings { }.openSettingsSubMenuDeleteBrowsingData { verifyAllCheckBoxesAreChecked() selectOnlyOpenTabsCheckBox() clickDeleteBrowsingDataButton() verifyDeleteBrowsingDataDialog() confirmDeletionAndAssertSnackbar() } settingsScreen { verifyGeneralHeading() } } @SmokeTest @Test fun deleteTabsDataTest() { val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) navigationToolbar { }.enterURLAndEnterToBrowser(defaultWebPage.url) { mDevice.waitForIdle() }.openThreeDotMenu { }.openSettings { }.openSettingsSubMenuDeleteBrowsingData { verifyAllCheckBoxesAreChecked() selectOnlyOpenTabsCheckBox() clickDeleteBrowsingDataButton() verifyDeleteBrowsingDataDialog() clickDialogCancelButton() verifyOpenTabsCheckBox(true) clickDeleteBrowsingDataButton() verifyDeleteBrowsingDataDialog() confirmDeletionAndAssertSnackbar() } settingsScreen { verifyGeneralHeading() }.openSettingsSubMenuDeleteBrowsingData { verifyOpenTabsDetails("0") }.goBack { }.goBack { }.openComposeTabDrawer(composeTestRule) { verifyNoOpenTabsInNormalBrowsing() } } @SmokeTest @Test fun deleteBrowsingHistoryTest() { val genericPage = getStorageTestAsset(mockWebServer, "generic1.html").url navigationToolbar { }.enterURLAndEnterToBrowser(genericPage) { }.openThreeDotMenu { }.openSettings { }.openSettingsSubMenuDeleteBrowsingData { verifyBrowsingHistoryDetails("1") selectOnlyBrowsingHistoryCheckBox() clickDeleteBrowsingDataButton() verifyDeleteBrowsingDataDialog() clickDialogCancelButton() verifyBrowsingHistoryDetails(true) clickDeleteBrowsingDataButton() verifyDeleteBrowsingDataDialog() confirmDeletionAndAssertSnackbar() verifyBrowsingHistoryDetails("0") exitMenu() } navigationToolbar { }.openThreeDotMenu { }.openHistory { verifyEmptyHistoryView() mDevice.pressBack() } } @SmokeTest @Test fun deleteCookiesAndSiteDataTest() { val genericPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) val storageWritePage = getStorageTestAsset(mockWebServer, "storage_write.html").url val storageCheckPage = getStorageTestAsset(mockWebServer, "storage_check.html").url // Browsing a generic page to allow GV to load on a fresh run navigationToolbar { }.enterURLAndEnterToBrowser(genericPage.url) { }.openNavigationToolbar { }.enterURLAndEnterToBrowser(storageWritePage) { verifyPageContent("No cookies set") clickPageObject(itemWithResId("setCookies")) verifyPageContent("user=android") }.openNavigationToolbar { }.enterURLAndEnterToBrowser(storageCheckPage) { verifyPageContent("Session storage has value") verifyPageContent("Local storage has value") }.openThreeDotMenu { }.openSettings { }.openSettingsSubMenuDeleteBrowsingData { selectOnlyCookiesCheckBox() clickDeleteBrowsingDataButton() verifyDeleteBrowsingDataDialog() confirmDeletionAndAssertSnackbar() exitMenu() } navigationToolbar { }.enterURLAndEnterToBrowser(storageCheckPage) { verifyPageContent("Session storage empty") verifyPageContent("Local storage empty") }.openNavigationToolbar { }.enterURLAndEnterToBrowser(storageWritePage) { verifyPageContent("No cookies set") } } @SmokeTest @Test fun deleteCachedFilesTest() { val pocketTopArticles = getStringResource(R.string.pocket_pinned_top_articles) homeScreen { verifyExistingTopSitesTabs(pocketTopArticles) }.openTopSiteTabWithTitle(pocketTopArticles) { waitForPageToLoad() }.openComposeTabDrawer(composeTestRule) { }.openNewTab { }.submitQuery("about:cache") { // disabling wifi to prevent downloads in the background setNetworkEnabled(enabled = false) }.openThreeDotMenu { }.openSettings { }.openSettingsSubMenuDeleteBrowsingData { selectOnlyCachedFilesCheckBox() clickDeleteBrowsingDataButton() verifyDeleteBrowsingDataDialog() confirmDeletionAndAssertSnackbar() exitMenu() } browserScreen { }.openThreeDotMenu { }.refreshPage { verifyNetworkCacheIsEmpty("memory") verifyNetworkCacheIsEmpty("disk") } setNetworkEnabled(enabled = true) } }