1
+ package org.buffer.android.boilerplate.data
2
+
3
+ import com.nhaarman.mockito_kotlin.*
4
+ import io.reactivex.Completable
5
+ import io.reactivex.Single
6
+ import org.buffer.android.boilerplate.data.mapper.BufferooMapper
7
+ import org.buffer.android.boilerplate.data.model.BufferooEntity
8
+ import org.buffer.android.boilerplate.data.repository.BufferooDataStore
9
+ import org.buffer.android.boilerplate.data.source.BufferooCacheDataStore
10
+ import org.buffer.android.boilerplate.data.source.BufferooDataStoreFactory
11
+ import org.buffer.android.boilerplate.data.source.BufferooRemoteDataStore
12
+ import org.buffer.android.boilerplate.data.test.factory.BufferooFactory
13
+ import org.buffer.android.boilerplate.domain.model.Bufferoo
14
+ import org.junit.Before
15
+ import org.junit.Test
16
+ import org.junit.runner.RunWith
17
+ import org.junit.runners.JUnit4
18
+
19
+ @RunWith(JUnit4 ::class )
20
+ class BufferooDataRepositoryTest {
21
+
22
+ private lateinit var bufferooDataRepository: BufferooDataRepository
23
+
24
+ private lateinit var bufferooDataStoreFactory: BufferooDataStoreFactory
25
+ private lateinit var bufferooMapper: BufferooMapper
26
+ private lateinit var bufferooCacheDataStore: BufferooCacheDataStore
27
+ private lateinit var bufferooRemoteDataStore: BufferooRemoteDataStore
28
+
29
+ @Before
30
+ fun setUp () {
31
+ bufferooDataStoreFactory = mock()
32
+ bufferooMapper = mock()
33
+ bufferooCacheDataStore = mock()
34
+ bufferooRemoteDataStore = mock()
35
+ bufferooDataRepository = BufferooDataRepository (bufferooDataStoreFactory, bufferooMapper)
36
+ stubBufferooDataStoreFactoryRetrieveCacheDataStore()
37
+ stubBufferooDataStoreFactoryRetrieveRemoteDataStore()
38
+ }
39
+
40
+ // <editor-fold desc="Clear Bufferoos">
41
+ @Test
42
+ fun clearBufferoosCompletes () {
43
+ stubBufferooCacheClearBufferoos(Completable .complete())
44
+ val testObserver = bufferooDataRepository.clearBufferoos().test()
45
+ testObserver.assertComplete()
46
+ }
47
+
48
+ @Test
49
+ fun clearBufferoosCallsCacheDataStore () {
50
+ stubBufferooCacheClearBufferoos(Completable .complete())
51
+ bufferooDataRepository.clearBufferoos().test()
52
+ verify(bufferooCacheDataStore).clearBufferoos()
53
+ }
54
+
55
+ @Test
56
+ fun clearBufferoosNeverCallsRemoteDataStore () {
57
+ stubBufferooCacheClearBufferoos(Completable .complete())
58
+ bufferooDataRepository.clearBufferoos().test()
59
+ verify(bufferooRemoteDataStore, never()).clearBufferoos()
60
+ }
61
+ // </editor-fold>
62
+
63
+ // <editor-fold desc="Save Bufferoos">
64
+ @Test
65
+ fun saveBufferoosCompletes () {
66
+ stubBufferooCacheSaveBufferoos(Completable .complete())
67
+ val testObserver = bufferooDataRepository.saveBufferoos(
68
+ BufferooFactory .makeBufferooList(2 )).test()
69
+ testObserver.assertComplete()
70
+ }
71
+
72
+ @Test
73
+ fun saveBufferoosCallsCacheDataStore () {
74
+ stubBufferooCacheSaveBufferoos(Completable .complete())
75
+ bufferooDataRepository.saveBufferoos(BufferooFactory .makeBufferooList(2 )).test()
76
+ verify(bufferooCacheDataStore).saveBufferoos(any())
77
+ }
78
+
79
+ @Test
80
+ fun saveBufferoosNeverCallsRemoteDataStore () {
81
+ stubBufferooCacheSaveBufferoos(Completable .complete())
82
+ bufferooDataRepository.saveBufferoos(BufferooFactory .makeBufferooList(2 )).test()
83
+ verify(bufferooRemoteDataStore, never()).saveBufferoos(any())
84
+ }
85
+ // </editor-fold>
86
+
87
+ // <editor-fold desc="Get Bufferoos">
88
+ @Test
89
+ fun getBufferoosCompletes () {
90
+ stubBufferooDataStoreFactoryRetrieveDataStore(bufferooCacheDataStore)
91
+ stubBufferooCacheDataStoreGetBufferoos(Single .just(
92
+ BufferooFactory .makeBufferooEntityList(2 )))
93
+ val testObserver = bufferooDataRepository.getBufferoos().test()
94
+ testObserver.assertComplete()
95
+ }
96
+
97
+ @Test
98
+ fun getBufferoosReturnsData () {
99
+ stubBufferooDataStoreFactoryRetrieveDataStore(bufferooCacheDataStore)
100
+ val bufferoos = BufferooFactory .makeBufferooList(2 )
101
+ val bufferooEntities = BufferooFactory .makeBufferooEntityList(2 )
102
+ bufferoos.forEachIndexed { index, bufferoo ->
103
+ stubBufferooMapperMapFromEntity(bufferooEntities[index], bufferoo) }
104
+ stubBufferooCacheDataStoreGetBufferoos(Single .just(bufferooEntities))
105
+
106
+ val testObserver = bufferooDataRepository.getBufferoos().test()
107
+ testObserver.assertValue(bufferoos)
108
+ }
109
+
110
+ @Test
111
+ fun getBufferoosSavesBufferoosWhenFromCacheDataStore () {
112
+ stubBufferooDataStoreFactoryRetrieveDataStore(bufferooCacheDataStore)
113
+ stubBufferooCacheSaveBufferoos(Completable .complete())
114
+ bufferooDataRepository.saveBufferoos(BufferooFactory .makeBufferooList(2 )).test()
115
+ verify(bufferooCacheDataStore).saveBufferoos(any())
116
+ }
117
+
118
+ @Test
119
+ fun getBufferoosNeverSavesBufferoosWhenFromRemoteDataStore () {
120
+ stubBufferooDataStoreFactoryRetrieveDataStore(bufferooRemoteDataStore)
121
+ stubBufferooCacheSaveBufferoos(Completable .complete())
122
+ bufferooDataRepository.saveBufferoos(BufferooFactory .makeBufferooList(2 )).test()
123
+ verify(bufferooRemoteDataStore, never()).saveBufferoos(any())
124
+ }
125
+ // </editor-fold>
126
+
127
+ // <editor-fold desc="Stub helper methods">
128
+ private fun stubBufferooCacheSaveBufferoos (completable : Completable ) {
129
+ whenever(bufferooCacheDataStore.saveBufferoos(any()))
130
+ .thenReturn(completable)
131
+ }
132
+
133
+ private fun stubBufferooCacheDataStoreGetBufferoos (single : Single <List <BufferooEntity >>) {
134
+ whenever(bufferooCacheDataStore.getBufferoos())
135
+ .thenReturn(single)
136
+ }
137
+
138
+ private fun stubBufferooRemoteDataStoreGetBufferoos (single : Single <List <BufferooEntity >>) {
139
+ whenever(bufferooRemoteDataStore.getBufferoos())
140
+ .thenReturn(single)
141
+ }
142
+
143
+ private fun stubBufferooCacheClearBufferoos (completable : Completable ) {
144
+ whenever(bufferooCacheDataStore.clearBufferoos())
145
+ .thenReturn(completable)
146
+ }
147
+
148
+ private fun stubBufferooDataStoreFactoryRetrieveCacheDataStore () {
149
+ whenever(bufferooDataStoreFactory.retrieveCacheDataStore())
150
+ .thenReturn(bufferooCacheDataStore)
151
+ }
152
+
153
+ private fun stubBufferooDataStoreFactoryRetrieveRemoteDataStore () {
154
+ whenever(bufferooDataStoreFactory.retrieveRemoteDataStore())
155
+ .thenReturn(bufferooCacheDataStore)
156
+ }
157
+
158
+ private fun stubBufferooDataStoreFactoryRetrieveDataStore (dataStore : BufferooDataStore ) {
159
+ whenever(bufferooDataStoreFactory.retrieveDataStore())
160
+ .thenReturn(dataStore)
161
+ }
162
+
163
+ private fun stubBufferooMapperMapFromEntity (bufferooEntity : BufferooEntity ,
164
+ bufferoo : Bufferoo ) {
165
+ whenever(bufferooMapper.mapFromEntity(bufferooEntity))
166
+ .thenReturn(bufferoo)
167
+ }
168
+ // </editor-fold>
169
+
170
+ }
0 commit comments