Bug 1857019 - Update Fakespot SUMO links

fenix/120.0
Alexandru2909 9 months ago committed by mergify[bot]
parent 8136b96237
commit 135514b69e

@ -57,6 +57,7 @@ object SupportUtils {
HTTPS_ONLY_MODE("https-only-mode-firefox-android"), HTTPS_ONLY_MODE("https-only-mode-firefox-android"),
COOKIE_BANNER("cookie-banner-reduction-firefox-android"), COOKIE_BANNER("cookie-banner-reduction-firefox-android"),
UNSIGNED_ADDONS("unsigned-addons"), UNSIGNED_ADDONS("unsigned-addons"),
REVIEW_QUALITY_CHECK("review_checker_mobile"),
} }
enum class MozillaPage(internal val path: String) { enum class MozillaPage(internal val path: String) {

@ -40,11 +40,7 @@ object ReviewQualityCheckMiddlewareProvider {
listOf( listOf(
providePreferencesMiddleware(settings, browserStore, scope), providePreferencesMiddleware(settings, browserStore, scope),
provideNetworkMiddleware(browserStore, context, scope), provideNetworkMiddleware(browserStore, context, scope),
provideNavigationMiddleware( provideNavigationMiddleware(TabsUseCases.SelectOrAddUseCase(browserStore), context),
TabsUseCases.SelectOrAddUseCase(browserStore),
context,
scope,
),
) )
private fun providePreferencesMiddleware( private fun providePreferencesMiddleware(
@ -70,10 +66,8 @@ object ReviewQualityCheckMiddlewareProvider {
private fun provideNavigationMiddleware( private fun provideNavigationMiddleware(
selectOrAddUseCase: TabsUseCases.SelectOrAddUseCase, selectOrAddUseCase: TabsUseCases.SelectOrAddUseCase,
context: Context, context: Context,
scope: CoroutineScope,
) = ReviewQualityCheckNavigationMiddleware( ) = ReviewQualityCheckNavigationMiddleware(
selectOrAddUseCase = selectOrAddUseCase, selectOrAddUseCase = selectOrAddUseCase,
context = context, context = context,
scope = scope,
) )
} }

@ -5,15 +5,18 @@
package org.mozilla.fenix.shopping.middleware package org.mozilla.fenix.shopping.middleware
import android.content.Context import android.content.Context
import kotlinx.coroutines.CoroutineScope import android.net.Uri
import kotlinx.coroutines.launch
import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.lib.state.Middleware
import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.MiddlewareContext
import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.SupportUtils
import org.mozilla.fenix.shopping.store.ReviewQualityCheckAction import org.mozilla.fenix.shopping.store.ReviewQualityCheckAction
import org.mozilla.fenix.shopping.store.ReviewQualityCheckMiddleware
import org.mozilla.fenix.shopping.store.ReviewQualityCheckState import org.mozilla.fenix.shopping.store.ReviewQualityCheckState
private const val PARAM_UTM_CAMPAIGN_KEY = "utm_campaign"
private const val PARAM_UTM_CAMPAIGN_VALUE = "fakespot-by-mozilla"
private const val PARAM_UTM_TERM_KEY = "utm_term"
private const val PARAM_UTM_TERM_VALUE = "core-sheet"
private const val POWERED_BY_URL = private const val POWERED_BY_URL =
"https://www.fakespot.com/review-checker?utm_source=review-checker" + "https://www.fakespot.com/review-checker?utm_source=review-checker" +
"&utm_campaign=fakespot-by-mozilla&utm_medium=inproduct&utm_term=core-sheet" "&utm_campaign=fakespot-by-mozilla&utm_medium=inproduct&utm_term=core-sheet"
@ -25,13 +28,11 @@ private const val TERMS_OF_USE_URL = "https://www.fakespot.com/terms"
* *
* @property selectOrAddUseCase UseCase instance used to open new tabs. * @property selectOrAddUseCase UseCase instance used to open new tabs.
* @property context Context used to get SUMO urls. * @property context Context used to get SUMO urls.
* @property scope [CoroutineScope] used to launch coroutines.
*/ */
class ReviewQualityCheckNavigationMiddleware( class ReviewQualityCheckNavigationMiddleware(
private val selectOrAddUseCase: TabsUseCases.SelectOrAddUseCase, private val selectOrAddUseCase: TabsUseCases.SelectOrAddUseCase,
private val context: Context, private val context: Context,
private val scope: CoroutineScope, ) : ReviewQualityCheckMiddleware {
) : Middleware<ReviewQualityCheckState, ReviewQualityCheckAction> {
override fun invoke( override fun invoke(
context: MiddlewareContext<ReviewQualityCheckState, ReviewQualityCheckAction>, context: MiddlewareContext<ReviewQualityCheckState, ReviewQualityCheckAction>,
@ -49,7 +50,7 @@ class ReviewQualityCheckNavigationMiddleware(
private fun processAction( private fun processAction(
action: ReviewQualityCheckAction.NavigationMiddlewareAction, action: ReviewQualityCheckAction.NavigationMiddlewareAction,
) = scope.launch { ) {
selectOrAddUseCase.invoke(actionToUrl(action)) selectOrAddUseCase.invoke(actionToUrl(action))
} }
@ -61,21 +62,24 @@ class ReviewQualityCheckNavigationMiddleware(
private fun actionToUrl( private fun actionToUrl(
action: ReviewQualityCheckAction.NavigationMiddlewareAction, action: ReviewQualityCheckAction.NavigationMiddlewareAction,
) = when (action) { ) = when (action) {
// Placeholder SUMO urls to be used until the Fakespot SUMO pages are added in 1854277 is ReviewQualityCheckAction.OpenExplainerLearnMoreLink,
is ReviewQualityCheckAction.OpenExplainerLearnMoreLink -> SupportUtils.getSumoURLForTopic( ReviewQualityCheckAction.OpenOnboardingLearnMoreLink,
context, -> appendUTMParams(
SupportUtils.SumoTopic.HELP, SupportUtils.getSumoURLForTopic(
context,
SupportUtils.SumoTopic.REVIEW_QUALITY_CHECK,
),
) )
is ReviewQualityCheckAction.OpenOnboardingTermsLink -> TERMS_OF_USE_URL is ReviewQualityCheckAction.OpenOnboardingTermsLink -> TERMS_OF_USE_URL
is ReviewQualityCheckAction.OpenOnboardingLearnMoreLink -> SupportUtils.getSumoURLForTopic(
context,
SupportUtils.SumoTopic.HELP,
)
is ReviewQualityCheckAction.OpenOnboardingPrivacyPolicyLink -> PRIVACY_POLICY_URL is ReviewQualityCheckAction.OpenOnboardingPrivacyPolicyLink -> PRIVACY_POLICY_URL
is ReviewQualityCheckAction.OpenPoweredByLink -> POWERED_BY_URL is ReviewQualityCheckAction.OpenPoweredByLink -> POWERED_BY_URL
} }
} }
private fun appendUTMParams(url: String): String = Uri.parse(url).buildUpon()
.appendQueryParameter(PARAM_UTM_CAMPAIGN_KEY, PARAM_UTM_CAMPAIGN_VALUE)
.appendQueryParameter(PARAM_UTM_TERM_KEY, PARAM_UTM_TERM_VALUE)
.build().toString()

@ -5,10 +5,8 @@ import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.ext.joinBlocking
import mozilla.components.support.test.libstate.ext.waitUntilIdle import mozilla.components.support.test.libstate.ext.waitUntilIdle
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import mozilla.components.support.test.rule.MainCoroutineRule
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Before import org.junit.Before
import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@ -18,10 +16,6 @@ import org.mozilla.fenix.shopping.store.ReviewQualityCheckStore
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class ReviewQualityCheckNavigationMiddlewareTest { class ReviewQualityCheckNavigationMiddlewareTest {
@get:Rule
val coroutinesTestRule = MainCoroutineRule()
private val dispatcher = coroutinesTestRule.testDispatcher
private val scope = coroutinesTestRule.scope
private lateinit var store: ReviewQualityCheckStore private lateinit var store: ReviewQualityCheckStore
private lateinit var browserStore: BrowserStore private lateinit var browserStore: BrowserStore
private lateinit var addTabUseCase: TabsUseCases.SelectOrAddUseCase private lateinit var addTabUseCase: TabsUseCases.SelectOrAddUseCase
@ -34,7 +28,6 @@ class ReviewQualityCheckNavigationMiddlewareTest {
middleware = ReviewQualityCheckNavigationMiddleware( middleware = ReviewQualityCheckNavigationMiddleware(
selectOrAddUseCase = addTabUseCase, selectOrAddUseCase = addTabUseCase,
context = testContext, context = testContext,
scope = scope,
) )
store = ReviewQualityCheckStore( store = ReviewQualityCheckStore(
middleware = listOf(middleware), middleware = listOf(middleware),
@ -45,7 +38,6 @@ class ReviewQualityCheckNavigationMiddlewareTest {
fun `WHEN opening an external link THEN the link should be opened in a new tab`() { fun `WHEN opening an external link THEN the link should be opened in a new tab`() {
val action = ReviewQualityCheckAction.OpenPoweredByLink val action = ReviewQualityCheckAction.OpenPoweredByLink
store.waitUntilIdle() store.waitUntilIdle()
dispatcher.scheduler.advanceUntilIdle()
assertEquals(0, browserStore.state.tabs.size) assertEquals(0, browserStore.state.tabs.size)
store.dispatch(action).joinBlocking() store.dispatch(action).joinBlocking()

Loading…
Cancel
Save