@@ -23,6 +23,9 @@ class BaseMviPresenterTest {
23
23
@MockK
24
24
private lateinit var mockReducer: TestReducer
25
25
26
+ @MockK
27
+ private lateinit var mockTestLogger: TestErrorLogger
28
+
26
29
private lateinit var presenter: TestPresenter
27
30
28
31
private lateinit var presenterPublishSubject: PublishSubject <TestPartialState >
@@ -33,7 +36,8 @@ class BaseMviPresenterTest {
33
36
presenter = TestPresenter (
34
37
mockMapper,
35
38
mockReducer,
36
- presenterPublishSubject
39
+ presenterPublishSubject,
40
+ mockTestLogger
37
41
)
38
42
}
39
43
@@ -215,6 +219,42 @@ class BaseMviPresenterTest {
215
219
assert (presenterPublishSubject.hasObservers() == false )
216
220
}
217
221
222
+ @Test
223
+ fun `Should call onError when error occurs during observing presenter intents` () {
224
+ // Given
225
+ val viewIntentsSubject = PublishSubject .create<TestViewIntent >()
226
+ val mockView = createMockView(viewIntentsSubject)
227
+ val mockThrowable: Throwable = mockk(relaxed = true )
228
+ every { mockThrowable.stackTrace } returns emptyArray()
229
+ every { mockThrowable.cause } returns null
230
+ every { mockTestLogger.logError(any()) } returns Unit
231
+ presenter.attachView(mockView)
232
+
233
+ // When
234
+ presenterPublishSubject.onError(mockThrowable)
235
+
236
+ // Then
237
+ verify(exactly = 1 ) { mockTestLogger.logError(mockThrowable) }
238
+ }
239
+
240
+ @Test
241
+ fun `Should call onError when error occurs during observing view intents` () {
242
+ // Given
243
+ val viewIntentsSubject = PublishSubject .create<TestViewIntent >()
244
+ val mockView = createMockView(viewIntentsSubject)
245
+ val mockThrowable: Throwable = mockk(relaxed = true )
246
+ every { mockThrowable.stackTrace } returns emptyArray()
247
+ every { mockThrowable.cause } returns null
248
+ every { mockTestLogger.logError(any()) } returns Unit
249
+ presenter.attachView(mockView)
250
+
251
+ // When
252
+ viewIntentsSubject.onError(mockThrowable)
253
+
254
+ // Then
255
+ verify(exactly = 1 ) { mockTestLogger.logError(mockThrowable) }
256
+ }
257
+
218
258
private fun createMockView (viewIntentsObservable : Observable <TestViewIntent >): IBaseView <TestViewState , TestViewIntent > {
219
259
return mockk {
220
260
every { provideViewIntents() } returns listOf (viewIntentsObservable)
@@ -227,7 +267,8 @@ class BaseMviPresenterTest {
227
267
private class TestPresenter (
228
268
private val mapper : TestViewIntentToPartialStateMapper ,
229
269
private val reducer : TestReducer ,
230
- private val presenterObservable : Observable <TestPartialState >
270
+ private val presenterObservable : Observable <TestPartialState >,
271
+ private val testErrorLogger : TestErrorLogger
231
272
) : BaseMviPresenter<TestViewState, TestPartialState, TestViewIntent, IBaseView<TestViewState, TestViewIntent>>(Schedulers .trampoline()) {
232
273
override val viewStateSubscriptionScheduler = Schedulers .trampoline()
233
274
override val viewStateObservationScheduler = Schedulers .trampoline()
@@ -245,6 +286,10 @@ private class TestPresenter(
245
286
override fun providePresenterIntents (): List <Observable <out TestPartialState >> {
246
287
return listOf (presenterObservable)
247
288
}
289
+
290
+ override fun onError (throwable : Throwable ) {
291
+ testErrorLogger.logError(throwable)
292
+ }
248
293
}
249
294
250
295
private class TestViewState (var someProperty : Int = 0 ) :
@@ -265,4 +310,10 @@ private class TestReducer {
265
310
fun reduce (previousState : TestViewState , action : TestPartialState ): TestViewState {
266
311
throw RuntimeException (" Should be mocked" )
267
312
}
313
+ }
314
+
315
+ private class TestErrorLogger {
316
+ fun logError (throwable : Throwable ) {
317
+ throw RuntimeException (" Should be mocked" )
318
+ }
268
319
}
0 commit comments