[fenix] Close https://github.com/mozilla-mobile/fenix/issues/20796: Fix intermittent test failure in TrackingProtectionExceptionsInteractorTest

pull/600/head
Jonathan Almeida 3 years ago committed by Jonathan Almeida
parent 14735a61ae
commit d32727eff9

@ -6,14 +6,21 @@ package org.mozilla.fenix.exceptions.trackingprotection
import mozilla.components.concept.engine.content.blocking.TrackingProtectionException import mozilla.components.concept.engine.content.blocking.TrackingProtectionException
import mozilla.components.lib.state.Action import mozilla.components.lib.state.Action
import mozilla.components.lib.state.Middleware
import mozilla.components.lib.state.State import mozilla.components.lib.state.State
import mozilla.components.lib.state.Store import mozilla.components.lib.state.Store
/** /**
* The [Store] for holding the [ExceptionsFragmentState] and applying [ExceptionsFragmentAction]s. * The [Store] for holding the [ExceptionsFragmentState] and applying [ExceptionsFragmentAction]s.
*/ */
class ExceptionsFragmentStore(initialState: ExceptionsFragmentState) : class ExceptionsFragmentStore(
Store<ExceptionsFragmentState, ExceptionsFragmentAction>(initialState, ::exceptionsStateReducer) initialState: ExceptionsFragmentState = ExceptionsFragmentState(),
middlewares: List<Middleware<ExceptionsFragmentState, ExceptionsFragmentAction>> = emptyList()
) : Store<ExceptionsFragmentState, ExceptionsFragmentAction>(
initialState,
::exceptionsStateReducer,
middlewares
)
/** /**
* Actions to dispatch through the `ExceptionsStore` to modify `ExceptionsState` through the reducer. * Actions to dispatch through the `ExceptionsStore` to modify `ExceptionsState` through the reducer.

@ -10,10 +10,15 @@ import io.mockk.impl.annotations.MockK
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
import io.mockk.verifySequence import io.mockk.verifySequence
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.Engine
import mozilla.components.concept.engine.content.blocking.TrackingProtectionException import mozilla.components.concept.engine.content.blocking.TrackingProtectionException
import mozilla.components.concept.engine.content.blocking.TrackingProtectionExceptionStorage
import mozilla.components.feature.session.TrackingProtectionUseCases import mozilla.components.feature.session.TrackingProtectionUseCases
import mozilla.components.support.test.libstate.ext.waitUntilIdle
import mozilla.components.support.test.middleware.CaptureActionsMiddleware
import org.junit.Assert.assertEquals
import org.junit.Before import org.junit.Before
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
@ -22,10 +27,15 @@ import org.mozilla.fenix.settings.SupportUtils
class TrackingProtectionExceptionsInteractorTest { class TrackingProtectionExceptionsInteractorTest {
@MockK(relaxed = true) private lateinit var activity: HomeActivity @MockK(relaxed = true) private lateinit var activity: HomeActivity
@MockK(relaxed = true) private lateinit var exceptionsStore: ExceptionsFragmentStore
@MockK(relaxed = true) private lateinit var trackingProtectionUseCases: TrackingProtectionUseCases
private lateinit var interactor: TrackingProtectionExceptionsInteractor private lateinit var interactor: TrackingProtectionExceptionsInteractor
private lateinit var results: List<TrackingProtectionException>
private val results: List<TrackingProtectionException> = emptyList()
private val engine: Engine = mockk(relaxed = true)
private val store = BrowserStore()
private val capture = CaptureActionsMiddleware<ExceptionsFragmentState, ExceptionsFragmentAction>()
private val exceptionsStore = ExceptionsFragmentStore(middlewares = listOf(capture))
private val trackingProtectionUseCases = TrackingProtectionUseCases(store, engine)
private val trackingStorage: TrackingProtectionExceptionStorage = mockk(relaxed = true)
@Before @Before
fun setup() { fun setup() {
@ -36,8 +46,8 @@ class TrackingProtectionExceptionsInteractorTest {
trackingProtectionUseCases = trackingProtectionUseCases trackingProtectionUseCases = trackingProtectionUseCases
) )
results = emptyList() every { engine.trackingProtectionExceptionStore } returns trackingStorage
every { trackingProtectionUseCases.fetchExceptions(any()) } answers { every { trackingStorage.fetchAll(any()) } answers {
firstArg<(List<TrackingProtectionException>) -> Unit>()(results) firstArg<(List<TrackingProtectionException>) -> Unit>()(results)
} }
} }
@ -57,27 +67,36 @@ class TrackingProtectionExceptionsInteractorTest {
) )
} }
} }
@Ignore("See https://github.com/mozilla-mobile/fenix/issues/20796")
@Test @Test
fun onDeleteAll() { fun onDeleteAll() {
interactor.onDeleteAll() interactor.onDeleteAll()
verifySequence { verifySequence {
trackingProtectionUseCases.removeAllExceptions() trackingStorage.removeAll(any())
trackingProtectionUseCases.fetchExceptions(any()) trackingStorage.fetchAll(any())
} }
verify { exceptionsStore.dispatch(ExceptionsFragmentAction.Change(results)) } exceptionsStore.waitUntilIdle()
capture.assertLastAction(ExceptionsFragmentAction.Change::class) {
assertEquals(results, it.list)
}
} }
@Test @Test
fun onDeleteOne() { fun onDeleteOne() {
val exceptionsItem = mockk<TrackingProtectionException>() val exceptionsItem = mockk<TrackingProtectionException>()
interactor.onDeleteOne(exceptionsItem) interactor.onDeleteOne(exceptionsItem)
verifySequence { verifySequence {
trackingProtectionUseCases.removeException(exceptionsItem) trackingStorage.remove(exceptionsItem)
trackingProtectionUseCases.fetchExceptions(any()) trackingStorage.fetchAll(any())
} }
verify { exceptionsStore.dispatch(ExceptionsFragmentAction.Change(results)) } exceptionsStore.waitUntilIdle()
capture.assertLastAction(ExceptionsFragmentAction.Change::class) {
assertEquals(results, it.list)
}
} }
} }

Loading…
Cancel
Save