|
|
@ -4,23 +4,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
package org.mozilla.fenix.shopping.middleware
|
|
|
|
package org.mozilla.fenix.shopping.middleware
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import io.mockk.every
|
|
|
|
|
|
|
|
import io.mockk.mockk
|
|
|
|
import kotlinx.coroutines.test.runTest
|
|
|
|
import kotlinx.coroutines.test.runTest
|
|
|
|
import mozilla.components.browser.state.state.BrowserState
|
|
|
|
import mozilla.components.browser.state.state.BrowserState
|
|
|
|
import mozilla.components.browser.state.state.createTab
|
|
|
|
import mozilla.components.browser.state.state.createTab
|
|
|
|
import mozilla.components.browser.state.store.BrowserStore
|
|
|
|
import mozilla.components.browser.state.store.BrowserStore
|
|
|
|
import mozilla.components.concept.engine.EngineSession
|
|
|
|
import mozilla.components.concept.engine.EngineSession
|
|
|
|
import mozilla.components.concept.engine.shopping.ProductAnalysis
|
|
|
|
import mozilla.components.concept.engine.shopping.ProductAnalysis
|
|
|
|
import mozilla.components.support.test.any
|
|
|
|
|
|
|
|
import mozilla.components.support.test.mock
|
|
|
|
|
|
|
|
import mozilla.components.support.test.rule.MainCoroutineRule
|
|
|
|
import mozilla.components.support.test.rule.MainCoroutineRule
|
|
|
|
import org.junit.Assert.assertEquals
|
|
|
|
import org.junit.Assert.assertEquals
|
|
|
|
import org.junit.Assert.assertNull
|
|
|
|
import org.junit.Assert.assertNull
|
|
|
|
import org.junit.Ignore
|
|
|
|
|
|
|
|
import org.junit.Rule
|
|
|
|
import org.junit.Rule
|
|
|
|
import org.junit.Test
|
|
|
|
import org.junit.Test
|
|
|
|
import org.mockito.Mockito.doAnswer
|
|
|
|
import org.mozilla.fenix.shopping.ProductAnalysisTestData
|
|
|
|
|
|
|
|
|
|
|
|
@Ignore("Intermittent failure, see https://bugzilla.mozilla.org/show_bug.cgi?id=1849525.")
|
|
|
|
|
|
|
|
class DefaultReviewQualityCheckServiceTest {
|
|
|
|
class DefaultReviewQualityCheckServiceTest {
|
|
|
|
|
|
|
|
|
|
|
|
@get:Rule
|
|
|
|
@get:Rule
|
|
|
@ -29,13 +27,14 @@ class DefaultReviewQualityCheckServiceTest {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
fun `GIVEN fetch is called WHEN onResult is invoked THEN product analysis returns the same data`() =
|
|
|
|
fun `GIVEN fetch is called WHEN onResult is invoked THEN product analysis returns the same data`() =
|
|
|
|
runTest {
|
|
|
|
runTest {
|
|
|
|
val engineSession = mock<EngineSession>()
|
|
|
|
val engineSession = mockk<EngineSession>()
|
|
|
|
val expected = mock<ProductAnalysis>()
|
|
|
|
val expected = ProductAnalysisTestData.productAnalysis()
|
|
|
|
|
|
|
|
|
|
|
|
doAnswer { invocation ->
|
|
|
|
every {
|
|
|
|
val onResult: (ProductAnalysis) -> Unit = invocation.getArgument(1)
|
|
|
|
engineSession.requestProductAnalysis(any(), any(), any())
|
|
|
|
onResult(expected)
|
|
|
|
}.answers {
|
|
|
|
}.`when`(engineSession).requestProductAnalysis(any(), any(), any())
|
|
|
|
secondArg<(ProductAnalysis) -> Unit>().invoke(expected)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
val tab = createTab(
|
|
|
|
val tab = createTab(
|
|
|
|
url = "https://www.shopping.org/product",
|
|
|
|
url = "https://www.shopping.org/product",
|
|
|
@ -57,12 +56,13 @@ class DefaultReviewQualityCheckServiceTest {
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
fun `GIVEN fetch is called WHEN onException is invoked THEN product analysis returns null`() =
|
|
|
|
fun `GIVEN fetch is called WHEN onException is invoked THEN product analysis returns null`() =
|
|
|
|
runTest {
|
|
|
|
runTest {
|
|
|
|
val engineSession = mock<EngineSession>()
|
|
|
|
val engineSession = mockk<EngineSession>()
|
|
|
|
|
|
|
|
|
|
|
|
doAnswer { invocation ->
|
|
|
|
every {
|
|
|
|
val onException: (Throwable) -> Unit = invocation.getArgument(2)
|
|
|
|
engineSession.requestProductAnalysis(any(), any(), any())
|
|
|
|
onException(RuntimeException())
|
|
|
|
}.answers {
|
|
|
|
}.`when`(engineSession).requestProductAnalysis(any(), any(), any())
|
|
|
|
thirdArg<(Throwable) -> Unit>().invoke(RuntimeException())
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
val tab = createTab(
|
|
|
|
val tab = createTab(
|
|
|
|
url = "https://www.shopping.org/product",
|
|
|
|
url = "https://www.shopping.org/product",
|
|
|
@ -81,13 +81,14 @@ class DefaultReviewQualityCheckServiceTest {
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
fun `WHEN fetch is called THEN fetch is called for the selected tab`() = runTest {
|
|
|
|
fun `WHEN fetch is called THEN fetch is called for the selected tab`() = runTest {
|
|
|
|
val engineSession = mock<EngineSession>()
|
|
|
|
val engineSession = mockk<EngineSession>()
|
|
|
|
|
|
|
|
val expected = ProductAnalysisTestData.productAnalysis()
|
|
|
|
|
|
|
|
|
|
|
|
val expected = mock<ProductAnalysis>()
|
|
|
|
every {
|
|
|
|
doAnswer { invocation ->
|
|
|
|
engineSession.requestProductAnalysis(any(), any(), any())
|
|
|
|
val onResult: (ProductAnalysis) -> Unit = invocation.getArgument(1)
|
|
|
|
}.answers {
|
|
|
|
onResult(expected)
|
|
|
|
secondArg<(ProductAnalysis) -> Unit>().invoke(expected)
|
|
|
|
}.`when`(engineSession).requestProductAnalysis(any(), any(), any())
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
val tab1 = createTab(
|
|
|
|
val tab1 = createTab(
|
|
|
|
url = "https://www.mozilla.org",
|
|
|
|
url = "https://www.mozilla.org",
|
|
|
|