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:
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)