tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 3c9266b72d158f9d47d9b6337967a907680484e2
parent 1472b1400f28006c2e1c1dcfaf900542532b9c7a
Author: Marcin KoziƄski <mkozinski@mozilla.com>
Date:   Wed, 12 Nov 2025 10:31:45 +0000

Bug 1998628 - Part 1: Add tests for review prompt feature flag and legacy criteria r=android-reviewers,gmalekpour

Differential Revision: https://phabricator.services.mozilla.com/D271751

Diffstat:
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/reviewprompt/ReviewPromptMiddlewareTest.kt | 87++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 86 insertions(+), 1 deletion(-)

diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/reviewprompt/ReviewPromptMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/reviewprompt/ReviewPromptMiddlewareTest.kt @@ -21,14 +21,16 @@ class ReviewPromptMiddlewareTest { private val eventStore = FakeNimbusEventStore() + private var isFeatureFlagEnabled = true private var isTelemetryEnabled = true private lateinit var mainCriteria: Sequence<Boolean> private lateinit var subCriteria: Sequence<Boolean> + private lateinit var legacyCriteria: Sequence<Boolean> private val store = AppStore( middlewares = listOf( ReviewPromptMiddleware( - isReviewPromptFeatureEnabled = { true }, + isReviewPromptFeatureEnabled = { isFeatureFlagEnabled }, isTelemetryEnabled = { isTelemetryEnabled }, createJexlHelper = { object : NimbusMessagingHelperInterface { @@ -39,12 +41,67 @@ class ReviewPromptMiddlewareTest { }, buildTriggerMainCriteria = { mainCriteria }, buildTriggerSubCriteria = { subCriteria }, + buildTriggerLegacyCriteria = { legacyCriteria }, nimbusEventStore = eventStore, ), ), ) @Test + fun `GIVEN feature flag is enabled WHEN check requested THEN main and sub-criteria are checked`() { + isFeatureFlagEnabled = true + + var mainCriteriaChecked = false + var subCriteriaChecked = false + var legacyCriteriaChecked = false + mainCriteria = sequence { + mainCriteriaChecked = true + yield(true) + } + subCriteria = sequence { + subCriteriaChecked = true + yield(true) + } + legacyCriteria = sequence { + legacyCriteriaChecked = true + yield(true) + } + + store.dispatch(ReviewPromptAction.CheckIfEligibleForReviewPrompt).joinBlocking() + + assertTrue(mainCriteriaChecked) + assertTrue(subCriteriaChecked) + assertFalse(legacyCriteriaChecked) + } + + @Test + fun `GIVEN feature flag is disabled WHEN check requested THEN legacy criteria are checked`() { + isFeatureFlagEnabled = false + + var mainCriteriaChecked = false + var subCriteriaChecked = false + var legacyCriteriaChecked = false + mainCriteria = sequence { + mainCriteriaChecked = true + yield(true) + } + subCriteria = sequence { + subCriteriaChecked = true + yield(true) + } + legacyCriteria = sequence { + legacyCriteriaChecked = true + yield(true) + } + + store.dispatch(ReviewPromptAction.CheckIfEligibleForReviewPrompt).joinBlocking() + + assertFalse(mainCriteriaChecked) + assertFalse(subCriteriaChecked) + assertTrue(legacyCriteriaChecked) + } + + @Test fun `GIVEN main criteria satisfied AND one of sub-criteria satisfied WHEN check requested THEN sets eligible`() { mainCriteria = sequenceOf(true) subCriteria = sequenceOf(false, true, false) @@ -209,6 +266,34 @@ class ReviewPromptMiddlewareTest { } @Test + fun `GIVEN feature flag disabled AND telemetry enabled AND criteria satisfied WHEN check requested THEN sets eligible for Custom prompt`() { + isFeatureFlagEnabled = false + isTelemetryEnabled = true + legacyCriteria = sequenceOf(true) + + store.dispatch(ReviewPromptAction.CheckIfEligibleForReviewPrompt).joinBlocking() + + assertEquals( + AppState(reviewPrompt = ReviewPromptState.Eligible(Type.PlayStore)), + store.state, + ) + } + + @Test + fun `GIVEN feature flag disabled AND telemetry disabled AND criteria satisfied WHEN check requested THEN sets eligible for Play Store prompt`() { + isFeatureFlagEnabled = false + isTelemetryEnabled = false + legacyCriteria = sequenceOf(true) + + store.dispatch(ReviewPromptAction.CheckIfEligibleForReviewPrompt).joinBlocking() + + assertEquals( + AppState(reviewPrompt = ReviewPromptState.Eligible(Type.PlayStore)), + store.state, + ) + } + + @Test fun `WHEN evalJexl returns false THEN createdAtLeastOneBookmark returns false`() { val jexlHelper = FakeNimbusMessagingHelperInterface(evalJexlValue = false)