@@ -10,6 +10,7 @@ import dev.mokkery.matcher.eq
10
10
import dev.mokkery.mock
11
11
import dev.mokkery.verify
12
12
import dev.mokkery.verify.VerifyMode.Companion.exactly
13
+ import dev.mokkery.verify.VerifyMode.Companion.not
13
14
import dev.mokkery.verifySuspend
14
15
import kotlinx.coroutines.flow.flowOf
15
16
import kotlinx.coroutines.test.TestScope
@@ -27,7 +28,7 @@ import org.mobilenativefoundation.store.store5.test_utils.model.Note
27
28
import kotlin.test.Test
28
29
import kotlin.test.assertEquals
29
30
30
- class EagerConflictResolutionLoggingTests {
31
+ class EagerConflictResolutionTests {
31
32
private val testScope = TestScope ()
32
33
33
34
private val delegate = mock<RealStore <String , Note , Note , Note >>(autoUnit)
@@ -82,6 +83,10 @@ class EagerConflictResolutionLoggingTests {
82
83
updater.post(eq(" id" ), eq(latestNote))
83
84
}
84
85
86
+ verifySuspend(not ) {
87
+ bookkeeper.clear(eq(" id" ))
88
+ }
89
+
85
90
verify(exactly(1 )) {
86
91
logger.error(eq(exception.toString()))
87
92
}
@@ -136,6 +141,10 @@ class EagerConflictResolutionLoggingTests {
136
141
updater.post(eq(" id" ), eq(latestNote))
137
142
}
138
143
144
+ verifySuspend(not ) {
145
+ bookkeeper.clear(eq(" id" ))
146
+ }
147
+
139
148
verify(exactly(1 )) {
140
149
logger.error(eq(errorMessage))
141
150
}
@@ -151,4 +160,135 @@ class EagerConflictResolutionLoggingTests {
151
160
152
161
}
153
162
163
+ @Test
164
+ fun stream_givenNoConflicts_whenCalled_thenShouldLog () = testScope.runTest {
165
+ // Given
166
+ val latestNote = Note (" id" , " Title" , " Content" )
167
+ val readResponse = StoreReadResponse .Data (latestNote, StoreReadResponseOrigin .Cache )
168
+ val delegateFlow = flowOf(readResponse)
169
+ val readRequest = StoreReadRequest .fresh(" id" )
170
+
171
+ every {
172
+ delegate.stream(any())
173
+ } returns delegateFlow
174
+
175
+ everySuspend {
176
+ delegate.latestOrNull(any())
177
+ } returns latestNote
178
+
179
+ everySuspend {
180
+ bookkeeper.getLastFailedSync(any())
181
+ } returns null
182
+
183
+ everySuspend {
184
+ updater.post(any(), any())
185
+ } returns UpdaterResult .Success .Typed (true )
186
+
187
+ every {
188
+ updater.onCompletion
189
+ } returns null
190
+
191
+ everySuspend {
192
+ bookkeeper.clear(any())
193
+ } returns true
194
+
195
+
196
+ // When
197
+ val stream = mutableStore.stream<Boolean >(
198
+ readRequest
199
+ )
200
+
201
+ // Then
202
+
203
+ stream.test {
204
+
205
+ verifySuspend(not ) {
206
+ updater.post(eq(" id" ), eq(latestNote))
207
+ }
208
+
209
+ verify(exactly(1 )) {
210
+ logger.debug(eq(" No conflicts." ))
211
+ }
212
+
213
+ verifySuspend(not ) {
214
+ bookkeeper.clear(eq(" id" ))
215
+ }
216
+
217
+ verify(exactly(1 )) {
218
+ delegate.stream(eq(readRequest))
219
+ }
220
+
221
+ assertEquals(readResponse, awaitItem())
222
+
223
+ awaitComplete()
224
+ }
225
+
226
+ }
227
+
228
+ @Test
229
+ fun stream_givenConflicts_whenSuccessResolvingConflicts_thenShouldLog () = testScope.runTest {
230
+ // Given
231
+ val latestNote = Note (" id" , " Title" , " Content" )
232
+ val readResponse = StoreReadResponse .Data (latestNote, StoreReadResponseOrigin .Cache )
233
+ val delegateFlow = flowOf(readResponse)
234
+ val readRequest = StoreReadRequest .fresh(" id" )
235
+
236
+ every {
237
+ delegate.stream(any())
238
+ } returns delegateFlow
239
+
240
+ everySuspend {
241
+ delegate.latestOrNull(any())
242
+ } returns latestNote
243
+
244
+ everySuspend {
245
+ bookkeeper.getLastFailedSync(any())
246
+ } returns 1L
247
+
248
+ everySuspend {
249
+ updater.post(any(), any())
250
+ } returns UpdaterResult .Success .Typed (true )
251
+
252
+ every {
253
+ updater.onCompletion
254
+ } returns null
255
+
256
+ everySuspend {
257
+ bookkeeper.clear(any())
258
+ } returns true
259
+
260
+
261
+ // When
262
+ val stream = mutableStore.stream<Boolean >(
263
+ readRequest
264
+ )
265
+
266
+ // Then
267
+
268
+ stream.test {
269
+
270
+ verifySuspend(exactly(1 )) {
271
+ updater.post(eq(" id" ), eq(latestNote))
272
+ }
273
+
274
+ verify(exactly(1 )) {
275
+ logger.debug(eq(" true" ))
276
+ }
277
+
278
+ verifySuspend(exactly(1 )) {
279
+ bookkeeper.clear(eq(" id" ))
280
+ }
281
+
282
+ verify(exactly(1 )) {
283
+ delegate.stream(eq(readRequest))
284
+ }
285
+
286
+ assertEquals(readResponse, awaitItem())
287
+
288
+ awaitComplete()
289
+ }
290
+
291
+ }
292
+
293
+
154
294
}
0 commit comments