For #26884: [UI tests] Reset modified settings just before the Activity finishes

This should prevent issues with the cleanup being done earlier (even in @After)
and affecting the behavior of the Activity which is still running.
With this issue fixed I've re-enabled verifyCustomizeHomepageTest.

Because when FeatureSettingsHelper is instantiated it caches the settings
values from that instant it's important to only use one instance of it so I've
updated all tests that are using HomeActivityTestRule.
HomeActivityIntentTestRule may be updated with a similar functionality later.
This commit is contained in:
Mugurell 2022-09-13 19:41:07 +03:00 committed by mergify[bot]
parent 4e99fe8521
commit 5010aa7d0d
11 changed files with 25 additions and 46 deletions

View File

@ -6,6 +6,7 @@
package org.mozilla.fenix.helpers
import android.app.Activity
import android.view.ViewConfiguration.getLongPressTimeout
import androidx.test.espresso.intent.rule.IntentsTestRule
import androidx.test.rule.ActivityTestRule
@ -28,6 +29,18 @@ class HomeActivityTestRule(
private val skipOnboarding: Boolean = false,
) :
ActivityTestRule<HomeActivity>(HomeActivity::class.java, initialTouchMode, launchActivity) {
/**
* Helper for updating various app settings that could interfere with the tests.
* Tests that use [HomeActivityTestRule] are expected to rely on this [FeatureSettingsHelper]
* instead of instantiating their own.
*
* The main benefit this brings is better ordering of operations with the settings cleanup
* automatically happening just before the [Activity] under test finishes which may as opposed to
* cleanup happening earlier and modifying the app behavior.
*/
val featureSettingsHelper = FeatureSettingsHelper()
private val longTapUserPreference = getLongPressTimeout()
override fun beforeActivityLaunched() {
@ -39,6 +52,7 @@ class HomeActivityTestRule(
override fun afterActivityFinished() {
super.afterActivityFinished()
setLongTapTimeout(longTapUserPreference)
featureSettingsHelper.resetAllFeatureFlags()
closeNotificationShade()
}
}

View File

@ -11,7 +11,6 @@ import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.ActivityTestRule
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.Until
@ -21,10 +20,8 @@ import org.junit.Before
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.mDevice
@ -40,14 +37,14 @@ import tools.fastlane.screengrab.locale.LocaleTestRule
class MenuScreenShotTest : ScreenshotTest() {
private lateinit var mockWebServer: MockWebServer
private lateinit var mDevice: UiDevice
private val featureSettingsHelper = FeatureSettingsHelper()
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
var mActivityTestRule: ActivityTestRule<HomeActivity> = HomeActivityTestRule()
var mActivityTestRule = HomeActivityTestRule()
private val featureSettingsHelper = mActivityTestRule.featureSettingsHelper
@Before
fun setUp() {
@ -62,7 +59,6 @@ class MenuScreenShotTest : ScreenshotTest() {
@After
fun tearDown() {
featureSettingsHelper.resetAllFeatureFlags()
mActivityTestRule.getActivity().finishAndRemoveTask()
mockWebServer.shutdown()
}

View File

@ -5,13 +5,11 @@
package org.mozilla.fenix.ui
import androidx.core.net.toUri
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.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestHelper.getStringResource
@ -26,10 +24,10 @@ class BrowsingErrorPagesTest {
private val unwantedSoftwareWarning =
getStringResource(R.string.mozac_browser_errorpages_safe_browsing_unwanted_uri_title)
private val harmfulSiteWarning = getStringResource(R.string.mozac_browser_errorpages_safe_harmful_uri_title)
private val featureSettingsHelper = FeatureSettingsHelper()
@get: Rule
val mActivityTestRule = HomeActivityTestRule()
private val featureSettingsHelper = mActivityTestRule.featureSettingsHelper
@Rule
@JvmField
@ -42,11 +40,6 @@ class BrowsingErrorPagesTest {
featureSettingsHelper.setTCPCFREnabled(false)
}
@After
fun tearDown() {
featureSettingsHelper.resetAllFeatureFlags()
}
@SmokeTest
@Test
fun blockMalwarePageTest() {

View File

@ -21,7 +21,6 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.RecyclerViewIdlingResource
import org.mozilla.fenix.helpers.TestAssetHelper
@ -41,10 +40,10 @@ class HistoryTest {
private lateinit var mDevice: UiDevice
private var historyListIdlingResource: RecyclerViewIdlingResource? = null
private var recentlyClosedTabsListIdlingResource: RecyclerViewIdlingResource? = null
private val featureSettingsHelper = FeatureSettingsHelper()
@get:Rule
val activityTestRule = HomeActivityTestRule()
private val featureSettingsHelper = activityTestRule.featureSettingsHelper
@Before
fun setUp() {
@ -63,7 +62,6 @@ class HistoryTest {
@After
fun tearDown() {
mockWebServer.shutdown()
featureSettingsHelper.resetAllFeatureFlags()
// Clearing all history data after each test to avoid overlapping data
val applicationContext: Context = activityTestRule.activity.applicationContext
val historyStorage = PlacesHistoryStorage(applicationContext)

View File

@ -11,11 +11,9 @@ import androidx.test.uiautomator.Until
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.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
@ -36,10 +34,10 @@ class HomeScreenTest {
private lateinit var mDevice: UiDevice
private lateinit var mockWebServer: MockWebServer
private val featureSettingsHelper = FeatureSettingsHelper()
@get:Rule
val activityTestRule = HomeActivityTestRule()
private val featureSettingsHelper = activityTestRule.featureSettingsHelper
@Rule
@JvmField
@ -60,7 +58,6 @@ class HomeScreenTest {
@After
fun tearDown() {
mockWebServer.shutdown()
featureSettingsHelper.resetAllFeatureFlags()
}
@Test
@ -196,7 +193,6 @@ class HomeScreenTest {
}
}
@Ignore("Failing, see: https://github.com/mozilla-mobile/fenix/issues/26932")
@Test
fun verifyCustomizeHomepageTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)

View File

@ -13,7 +13,6 @@ import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.ui.robots.homeScreen
@ -36,7 +35,7 @@ class NavigationToolbarTest {
/* ktlint-disable no-blank-line-before-rbrace */ // This imposes unreadable grouping.
@get:Rule
val activityTestRule = HomeActivityTestRule()
private val featureSettingsHelper = FeatureSettingsHelper()
private val featureSettingsHelper = activityTestRule.featureSettingsHelper
@Before
fun setUp() {
@ -53,7 +52,6 @@ class NavigationToolbarTest {
@After
fun tearDown() {
mockWebServer.shutdown()
featureSettingsHelper.resetAllFeatureFlags()
}
@Test

View File

@ -13,7 +13,6 @@ import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.helpers.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.TestHelper.packageName
import org.mozilla.fenix.helpers.TestHelper.setNetworkEnabled
@ -31,8 +30,7 @@ class NoNetworkAccessStartupTests {
@get:Rule
val activityTestRule = HomeActivityTestRule(launchActivity = false)
private val featureSettingsHelper = FeatureSettingsHelper()
private val featureSettingsHelper = activityTestRule.featureSettingsHelper
@Before
fun setUp() {
@ -44,7 +42,6 @@ class NoNetworkAccessStartupTests {
fun tearDown() {
// Restoring network connection
setNetworkEnabled(true)
featureSettingsHelper.resetAllFeatureFlags()
}
// Test running on beta/release builds in CI:

View File

@ -23,7 +23,6 @@ import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.Constants.PackageName.ANDROID_SETTINGS
import org.mozilla.fenix.helpers.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.SearchDispatcher
import org.mozilla.fenix.helpers.TestHelper.appContext
@ -48,7 +47,6 @@ import org.mozilla.fenix.ui.robots.multipleSelectionToolbar
*/
class SearchTest {
private val featureSettingsHelper = FeatureSettingsHelper()
lateinit var searchMockServer: MockWebServer
@get:Rule
@ -56,6 +54,7 @@ class SearchTest {
HomeActivityTestRule(),
{ it.activity },
)
private val featureSettingsHelper = activityTestRule.activityRule.featureSettingsHelper
@Before
fun setUp() {
@ -72,7 +71,6 @@ class SearchTest {
@After
fun tearDown() {
searchMockServer.shutdown()
featureSettingsHelper.resetAllFeatureFlags()
}
@Test

View File

@ -12,13 +12,11 @@ import android.os.Build
import androidx.core.net.toUri
import androidx.test.filters.SdkSuppress
import androidx.test.rule.GrantPermissionRule
import org.junit.After
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.MockLocationUpdatesRule
import org.mozilla.fenix.helpers.RetryTestRule
@ -34,12 +32,12 @@ 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"
private val featureSettingsHelper = FeatureSettingsHelper()
private val cameraManager = appContext.getSystemService(Context.CAMERA_SERVICE) as CameraManager
private val micManager = appContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager
@get:Rule
val activityTestRule = HomeActivityTestRule()
private val featureSettingsHelper = activityTestRule.featureSettingsHelper
@get:Rule
val grantPermissionRule: GrantPermissionRule = GrantPermissionRule.grant(
@ -63,11 +61,6 @@ class SitePermissionsTest {
featureSettingsHelper.disablePwaCFR(true)
}
@After
fun tearDown() {
featureSettingsHelper.resetAllFeatureFlags()
}
@SdkSuppress(maxSdkVersion = Build.VERSION_CODES.P, codeName = "P")
@SmokeTest
@Test

View File

@ -12,7 +12,6 @@ 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.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.ui.robots.enhancedTrackingProtection
@ -35,10 +34,10 @@ import org.mozilla.fenix.ui.robots.settingsSubMenuEnhancedTrackingProtection
class StrictEnhancedTrackingProtectionTest {
private lateinit var mockWebServer: MockWebServer
private val featureSettingsHelper = FeatureSettingsHelper()
@get:Rule
val activityTestRule = HomeActivityTestRule()
private val featureSettingsHelper = activityTestRule.featureSettingsHelper
@Before
fun setUp() {
@ -55,7 +54,6 @@ class StrictEnhancedTrackingProtectionTest {
@After
fun tearDown() {
mockWebServer.shutdown()
featureSettingsHelper.resetAllFeatureFlags()
}
@Test

View File

@ -14,7 +14,6 @@ import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
@ -43,11 +42,11 @@ import org.mozilla.fenix.ui.robots.notificationShade
class TabbedBrowsingTest {
private lateinit var mDevice: UiDevice
private lateinit var mockWebServer: MockWebServer
private val featureSettingsHelper = FeatureSettingsHelper()
/* ktlint-disable no-blank-line-before-rbrace */ // This imposes unreadable grouping.
@get:Rule
val activityTestRule = HomeActivityTestRule()
private val featureSettingsHelper = activityTestRule.featureSettingsHelper
@Rule
@JvmField
@ -70,7 +69,6 @@ class TabbedBrowsingTest {
@After
fun tearDown() {
mockWebServer.shutdown()
featureSettingsHelper.resetAllFeatureFlags()
}
@Test