diff --git a/app/src/main/java/org/mozilla/fenix/shopping/middleware/ProductAnalysisMapper.kt b/app/src/main/java/org/mozilla/fenix/shopping/middleware/ProductAnalysisMapper.kt index 75c098786..7e9907c97 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/middleware/ProductAnalysisMapper.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/middleware/ProductAnalysisMapper.kt @@ -4,8 +4,7 @@ package org.mozilla.fenix.shopping.middleware -import mozilla.components.browser.engine.gecko.shopping.GeckoProductAnalysis -import mozilla.components.browser.engine.gecko.shopping.Highlight +import mozilla.components.concept.engine.shopping.Highlight import mozilla.components.concept.engine.shopping.ProductAnalysis import org.mozilla.fenix.shopping.store.ReviewQualityCheckState import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.HighlightType @@ -15,10 +14,10 @@ import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.OptedIn.ProductR /** * Maps [ProductAnalysis] to [ProductReviewState]. */ -fun GeckoProductAnalysis?.toProductReviewState(isInitialAnalysis: Boolean = true): ProductReviewState = +fun ProductAnalysis?.toProductReviewState(isInitialAnalysis: Boolean = true): ProductReviewState = this?.toProductReview(isInitialAnalysis) ?: ProductReviewState.Error.GenericError -private fun GeckoProductAnalysis.toProductReview(isInitialAnalysis: Boolean): ProductReviewState = +private fun ProductAnalysis.toProductReview(isInitialAnalysis: Boolean): ProductReviewState = if (pageNotSupported) { ProductReviewState.Error.UnsupportedProductTypeError } else if (productId == null) { diff --git a/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNetworkMiddleware.kt b/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNetworkMiddleware.kt index 4068f5ddb..b8417e934 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNetworkMiddleware.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNetworkMiddleware.kt @@ -6,7 +6,7 @@ package org.mozilla.fenix.shopping.middleware import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import mozilla.components.browser.engine.gecko.shopping.GeckoProductAnalysis +import mozilla.components.concept.engine.shopping.ProductAnalysis import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import org.mozilla.fenix.components.AppStore @@ -138,7 +138,7 @@ class ReviewQualityCheckNetworkMiddleware( private fun Store.restoreAnalysingStateIfRequired( productPageUrl: String, productReviewState: ProductReviewState, - productAnalysis: GeckoProductAnalysis?, + productAnalysis: ProductAnalysis?, ) { if (productReviewState.isAnalysisPresentOrNoAnalysisPresent() && productAnalysis?.needsAnalysis == true && diff --git a/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckService.kt b/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckService.kt index fa679b0fd..d6e3b070e 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckService.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckService.kt @@ -6,7 +6,6 @@ package org.mozilla.fenix.shopping.middleware import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -import mozilla.components.browser.engine.gecko.shopping.GeckoProductAnalysis import mozilla.components.browser.state.selector.selectedTab import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.engine.shopping.ProductAnalysis @@ -24,7 +23,7 @@ interface ReviewQualityCheckService { * * @return [ProductAnalysis] if the request succeeds, null otherwise. */ - suspend fun fetchProductReview(): GeckoProductAnalysis? + suspend fun fetchProductReview(): ProductAnalysis? /** * Triggers a reanalysis of the product review for the current tab. @@ -57,16 +56,13 @@ class DefaultReviewQualityCheckService( private val logger = Logger("DefaultReviewQualityCheckService") - override suspend fun fetchProductReview(): GeckoProductAnalysis? = withContext(Dispatchers.Main) { + override suspend fun fetchProductReview(): ProductAnalysis? = withContext(Dispatchers.Main) { suspendCoroutine { continuation -> browserStore.state.selectedTab?.let { tab -> tab.engineState.engineSession?.requestProductAnalysis( url = tab.content.url, onResult = { - when (it) { - is GeckoProductAnalysis -> continuation.resume(it) - else -> continuation.resume(null) - } + continuation.resume(it) }, onException = { logger.error("Error fetching product review", it) diff --git a/app/src/test/java/org/mozilla/fenix/shopping/ProductAnalysisTestData.kt b/app/src/test/java/org/mozilla/fenix/shopping/ProductAnalysisTestData.kt index 8debb579f..17de5a0f2 100644 --- a/app/src/test/java/org/mozilla/fenix/shopping/ProductAnalysisTestData.kt +++ b/app/src/test/java/org/mozilla/fenix/shopping/ProductAnalysisTestData.kt @@ -4,8 +4,8 @@ package org.mozilla.fenix.shopping -import mozilla.components.browser.engine.gecko.shopping.GeckoProductAnalysis -import mozilla.components.browser.engine.gecko.shopping.Highlight +import mozilla.components.concept.engine.shopping.Highlight +import mozilla.components.concept.engine.shopping.ProductAnalysis import org.mozilla.fenix.shopping.store.ReviewQualityCheckState import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.OptedIn.ProductReviewState.AnalysisPresent.AnalysisStatus import java.util.SortedMap @@ -23,7 +23,7 @@ object ProductAnalysisTestData { deletedProductReported: Boolean = false, deletedProduct: Boolean = false, highlights: Highlight? = null, - ): GeckoProductAnalysis = GeckoProductAnalysis( + ): ProductAnalysis = ProductAnalysis( productId = productId, analysisURL = analysisURL, grade = grade, diff --git a/app/src/test/java/org/mozilla/fenix/shopping/fake/FakeReviewQualityCheckService.kt b/app/src/test/java/org/mozilla/fenix/shopping/fake/FakeReviewQualityCheckService.kt index c3e05dc94..69e9b0337 100644 --- a/app/src/test/java/org/mozilla/fenix/shopping/fake/FakeReviewQualityCheckService.kt +++ b/app/src/test/java/org/mozilla/fenix/shopping/fake/FakeReviewQualityCheckService.kt @@ -4,12 +4,12 @@ package org.mozilla.fenix.shopping.fake -import mozilla.components.browser.engine.gecko.shopping.GeckoProductAnalysis +import mozilla.components.concept.engine.shopping.ProductAnalysis import org.mozilla.fenix.shopping.middleware.AnalysisStatusDto import org.mozilla.fenix.shopping.middleware.ReviewQualityCheckService class FakeReviewQualityCheckService( - private val productAnalysis: (Int) -> GeckoProductAnalysis? = { null }, + private val productAnalysis: (Int) -> ProductAnalysis? = { null }, private val reanalysis: AnalysisStatusDto? = null, private val status: AnalysisStatusDto? = null, private val selectedTabUrl: String? = null, @@ -17,7 +17,7 @@ class FakeReviewQualityCheckService( private var analysisCount = 0 - override suspend fun fetchProductReview(): GeckoProductAnalysis? { + override suspend fun fetchProductReview(): ProductAnalysis? { return productAnalysis(analysisCount).also { analysisCount++ } diff --git a/app/src/test/java/org/mozilla/fenix/shopping/middleware/DefaultReviewQualityCheckServiceTest.kt b/app/src/test/java/org/mozilla/fenix/shopping/middleware/DefaultReviewQualityCheckServiceTest.kt index f82fd7c1e..1c74f4bda 100644 --- a/app/src/test/java/org/mozilla/fenix/shopping/middleware/DefaultReviewQualityCheckServiceTest.kt +++ b/app/src/test/java/org/mozilla/fenix/shopping/middleware/DefaultReviewQualityCheckServiceTest.kt @@ -110,33 +110,4 @@ class DefaultReviewQualityCheckServiceTest { assertEquals(expected, actual) } - - @Test - fun `GIVEN fetch is called WHEN onResult is invoked with an unexpected type THEN product analysis returns null`() = - runTest { - val engineSession = mockk() - val randomAnalysis = object : ProductAnalysis { - override val productId: String = "id1" - } - - every { - engineSession.requestProductAnalysis(any(), any(), any()) - }.answers { - secondArg<(ProductAnalysis) -> Unit>().invoke(randomAnalysis) - } - - val tab = createTab( - url = "https://www.shopping.org/product", - id = "test-tab", - engineSession = engineSession, - ) - val browserState = BrowserState( - tabs = listOf(tab), - selectedTabId = tab.id, - ) - - val tested = DefaultReviewQualityCheckService(BrowserStore(browserState)) - - assertNull(tested.fetchProductReview()) - } } diff --git a/app/src/test/java/org/mozilla/fenix/shopping/middleware/ProductAnalysisMapperTest.kt b/app/src/test/java/org/mozilla/fenix/shopping/middleware/ProductAnalysisMapperTest.kt index 6b422118b..a9c421843 100644 --- a/app/src/test/java/org/mozilla/fenix/shopping/middleware/ProductAnalysisMapperTest.kt +++ b/app/src/test/java/org/mozilla/fenix/shopping/middleware/ProductAnalysisMapperTest.kt @@ -4,7 +4,7 @@ package org.mozilla.fenix.shopping.middleware -import mozilla.components.browser.engine.gecko.shopping.Highlight +import mozilla.components.concept.engine.shopping.Highlight import org.junit.Assert.assertEquals import org.junit.Test import org.mozilla.fenix.shopping.ProductAnalysisTestData @@ -15,7 +15,7 @@ import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.OptedIn.ProductR class ProductAnalysisMapperTest { @Test - fun `WHEN GeckoProductAnalysis has data THEN it is mapped to AnalysisPresent`() { + fun `WHEN ProductAnalysis has data THEN it is mapped to AnalysisPresent`() { val actual = ProductAnalysisTestData.productAnalysis( productId = "id1", grade = "C", @@ -50,7 +50,7 @@ class ProductAnalysisMapperTest { } @Test - fun `WHEN GeckoProductAnalysis has data with some missing highlights THEN it is mapped to AnalysisPresent with the non null highlights`() { + fun `WHEN ProductAnalysis has data with some missing highlights THEN it is mapped to AnalysisPresent with the non null highlights`() { val actual = ProductAnalysisTestData.productAnalysis( productId = "id1", grade = "C", @@ -83,7 +83,7 @@ class ProductAnalysisMapperTest { } @Test - fun `WHEN GeckoProductAnalysis has an invalid grade THEN it is mapped to AnalysisPresent with grade as null`() { + fun `WHEN ProductAnalysis has an invalid grade THEN it is mapped to AnalysisPresent with grade as null`() { val actual = ProductAnalysisTestData.productAnalysis( productId = "id1", grade = "?",