@ -14,6 +14,7 @@ import mozilla.components.support.test.whenever
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.shopping.ProductAnalysisTestData
import org.mozilla.fenix.shopping.middleware.NetworkChecker
import org.mozilla.fenix.shopping.middleware.ReviewQualityCheckNetworkMiddleware
import org.mozilla.fenix.shopping.middleware.ReviewQualityCheckPreferences
import org.mozilla.fenix.shopping.middleware.ReviewQualityCheckPreferencesMiddleware
@ -167,6 +168,7 @@ class ReviewQualityCheckStoreTest {
middleware = provideReviewQualityCheckMiddleware (
reviewQualityCheckPreferences = FakeReviewQualityCheckPreferences ( isEnabled = true ) ,
reviewQualityCheckService = reviewQualityCheckService ,
networkChecker = FakeNetworkChecker ( isConnected = true ) ,
) ,
)
tested . waitUntilIdle ( )
@ -184,7 +186,7 @@ class ReviewQualityCheckStoreTest {
}
@Test
fun ` WHEN the user opts in the feature THEN update the preferences `( ) =
fun ` GIVEN the user has opted in the feature WHEN the a product analysis returns an error THEN state should reflect that `( ) =
runTest {
val reviewQualityCheckService = mock < ReviewQualityCheckService > ( )
whenever ( reviewQualityCheckService . fetchProductReview ( ) ) . thenReturn ( null )
@ -193,6 +195,7 @@ class ReviewQualityCheckStoreTest {
middleware = provideReviewQualityCheckMiddleware (
reviewQualityCheckPreferences = FakeReviewQualityCheckPreferences ( isEnabled = true ) ,
reviewQualityCheckService = reviewQualityCheckService ,
networkChecker = FakeNetworkChecker ( isConnected = true ) ,
) ,
)
tested . waitUntilIdle ( )
@ -203,7 +206,31 @@ class ReviewQualityCheckStoreTest {
dispatcher . scheduler . advanceUntilIdle ( )
val expected = ReviewQualityCheckState . OptedIn (
productReviewState = ReviewQualityCheckState . OptedIn . ProductReviewState . Error ,
productReviewState = ReviewQualityCheckState . OptedIn . ProductReviewState . Error . GenericError ,
productRecommendationsPreference = false ,
)
assertEquals ( expected , tested . state )
}
@Test
fun `GIVEN the user has opted in the feature WHEN device is not connected to the internet THEN state should reflect that` ( ) =
runTest {
val tested = ReviewQualityCheckStore (
middleware = provideReviewQualityCheckMiddleware (
reviewQualityCheckPreferences = FakeReviewQualityCheckPreferences ( isEnabled = true ) ,
reviewQualityCheckService = mock ( ) ,
networkChecker = FakeNetworkChecker ( isConnected = false ) ,
) ,
)
tested . waitUntilIdle ( )
dispatcher . scheduler . advanceUntilIdle ( )
tested . waitUntilIdle ( )
tested . dispatch ( ReviewQualityCheckAction . FetchProductAnalysis ) . joinBlocking ( )
tested . waitUntilIdle ( )
dispatcher . scheduler . advanceUntilIdle ( )
val expected = ReviewQualityCheckState . OptedIn (
productReviewState = ReviewQualityCheckState . OptedIn . ProductReviewState . Error . NetworkError ,
productRecommendationsPreference = false ,
)
assertEquals ( expected , tested . state )
@ -212,8 +239,9 @@ class ReviewQualityCheckStoreTest {
private fun provideReviewQualityCheckMiddleware (
reviewQualityCheckPreferences : ReviewQualityCheckPreferences ,
reviewQualityCheckService : ReviewQualityCheckService ? = null ,
networkChecker : NetworkChecker ? = null ,
) : List < ReviewQualityCheckMiddleware > {
return if ( reviewQualityCheckService != null ) {
return if ( reviewQualityCheckService != null && networkChecker != null ) {
listOf (
ReviewQualityCheckPreferencesMiddleware (
reviewQualityCheckPreferences = reviewQualityCheckPreferences ,
@ -221,6 +249,7 @@ class ReviewQualityCheckStoreTest {
) ,
ReviewQualityCheckNetworkMiddleware (
reviewQualityCheckService = reviewQualityCheckService ,
networkChecker = networkChecker ,
scope = this . scope ,
) ,
)
@ -254,3 +283,9 @@ private class FakeReviewQualityCheckPreferences(
updateCFRCallback ( )
}
}
private class FakeNetworkChecker (
private val isConnected : Boolean ,
) : NetworkChecker {
override fun isConnected ( ) : Boolean = isConnected
}