1
+ package com.example.tamaskozmer.kotlinrxexample.presentation.presenters
2
+
3
+ import com.example.tamaskozmer.kotlinrxexample.domain.interactors.GetUsers
4
+ import com.example.tamaskozmer.kotlinrxexample.presentation.view.UserListView
5
+ import com.example.tamaskozmer.kotlinrxexample.presentation.view.viewmodels.UserViewModel
6
+ import com.example.tamaskozmer.kotlinrxexample.testutil.ImmediateSchedulerRule
7
+ import io.reactivex.Single
8
+ import org.junit.Before
9
+ import org.junit.Rule
10
+ import org.junit.Test
11
+ import org.mockito.Mock
12
+ import org.mockito.Mockito.anyBoolean
13
+ import org.mockito.Mockito.anyInt
14
+ import org.mockito.Mockito.times
15
+ import org.mockito.Mockito.verify
16
+ import org.mockito.MockitoAnnotations
17
+ import org.mockito.Mockito.`when` as whenever
18
+
19
+ /* *
20
+ * Created by Tamas_Kozmer on 7/21/2017.
21
+ */
22
+ class UserListPresenterTest {
23
+
24
+ @Rule @JvmField
25
+ val immediateSchedulerRule = ImmediateSchedulerRule ()
26
+
27
+ @Mock
28
+ lateinit var mockGetUsers: GetUsers
29
+
30
+ @Mock
31
+ lateinit var mockView: UserListView
32
+
33
+ lateinit var userListPresenter: UserListPresenter
34
+
35
+ @Before
36
+ fun setUp () {
37
+ MockitoAnnotations .initMocks(this )
38
+ userListPresenter = UserListPresenter (mockGetUsers)
39
+ }
40
+
41
+ @Test
42
+ fun testGetUsers_errorCase_showError () {
43
+ // Given
44
+ val error = " Test error"
45
+ val single: Single <List <UserViewModel >> = Single .create {
46
+ emitter ->
47
+ emitter.onError(Exception (error))
48
+ }
49
+
50
+ // When
51
+ whenever(mockGetUsers.execute(anyInt(), anyBoolean())).thenReturn(single)
52
+
53
+ userListPresenter.attachView(mockView)
54
+ userListPresenter.getUsers()
55
+
56
+ // Then
57
+ verify(mockView).hideLoading()
58
+ verify(mockView).showEmptyListError()
59
+ }
60
+
61
+ @Test
62
+ fun testGetUsers_successCaseFirstPage_clearList () {
63
+ // Given
64
+ val users = listOf (UserViewModel (1 , " Name" , 1000 , " " ))
65
+ val single: Single <List <UserViewModel >> = Single .create {
66
+ emitter ->
67
+ emitter.onSuccess(users)
68
+ }
69
+
70
+ // When
71
+ whenever(mockGetUsers.execute(anyInt(), anyBoolean())).thenReturn(single)
72
+
73
+ userListPresenter.attachView(mockView)
74
+ userListPresenter.getUsers()
75
+
76
+ // Then
77
+ verify(mockView).clearList()
78
+ }
79
+
80
+ @Test
81
+ fun testGetUsers_successCaseMultipleTimes_clearListOnlyOnce () {
82
+ // Given
83
+ val users = listOf (UserViewModel (1 , " Name" , 1000 , " " ))
84
+ val single: Single <List <UserViewModel >> = Single .create {
85
+ emitter ->
86
+ emitter.onSuccess(users)
87
+ }
88
+
89
+ // When
90
+ whenever(mockGetUsers.execute(anyInt(), anyBoolean())).thenReturn(single)
91
+
92
+ userListPresenter.attachView(mockView)
93
+ userListPresenter.getUsers()
94
+ userListPresenter.getUsers()
95
+
96
+ // Then
97
+ verify(mockView).clearList()
98
+ verify(mockView, times(2 )).hideLoading()
99
+ verify(mockView, times(2 )).addUsersToList(users)
100
+ }
101
+
102
+ @Test
103
+ fun testGetUsers_forcedSuccessCaseMultipleTimes_clearListEveryTime () {
104
+ // Given
105
+ val users = listOf (UserViewModel (1 , " Name" , 1000 , " " ))
106
+ val single: Single <List <UserViewModel >> = Single .create {
107
+ emitter ->
108
+ emitter.onSuccess(users)
109
+ }
110
+
111
+ // When
112
+ whenever(mockGetUsers.execute(anyInt(), anyBoolean())).thenReturn(single)
113
+
114
+ userListPresenter.attachView(mockView)
115
+ userListPresenter.getUsers(forced = true )
116
+ userListPresenter.getUsers(forced = true )
117
+
118
+ // Then
119
+ verify(mockView, times(2 )).clearList()
120
+ verify(mockView, times(2 )).hideLoading()
121
+ verify(mockView, times(2 )).addUsersToList(users)
122
+ }
123
+ }
0 commit comments