@@ -10,6 +10,7 @@ import dev.mokkery.matcher.eq
1010import dev.mokkery.mock
1111import dev.mokkery.verify
1212import dev.mokkery.verify.VerifyMode.Companion.exactly
13+ import dev.mokkery.verify.VerifyMode.Companion.not
1314import dev.mokkery.verifySuspend
1415import kotlinx.coroutines.flow.flowOf
1516import kotlinx.coroutines.test.TestScope
@@ -27,7 +28,7 @@ import org.mobilenativefoundation.store.store5.test_utils.model.Note
2728import kotlin.test.Test
2829import kotlin.test.assertEquals
2930
30- class EagerConflictResolutionLoggingTests {
31+ class EagerConflictResolutionTests {
3132 private val testScope = TestScope ()
3233
3334 private val delegate = mock<RealStore <String , Note , Note , Note >>(autoUnit)
@@ -82,6 +83,10 @@ class EagerConflictResolutionLoggingTests {
8283 updater.post(eq(" id" ), eq(latestNote))
8384 }
8485
86+ verifySuspend(not ) {
87+ bookkeeper.clear(eq(" id" ))
88+ }
89+
8590 verify(exactly(1 )) {
8691 logger.error(eq(exception.toString()))
8792 }
@@ -136,6 +141,10 @@ class EagerConflictResolutionLoggingTests {
136141 updater.post(eq(" id" ), eq(latestNote))
137142 }
138143
144+ verifySuspend(not ) {
145+ bookkeeper.clear(eq(" id" ))
146+ }
147+
139148 verify(exactly(1 )) {
140149 logger.error(eq(errorMessage))
141150 }
@@ -151,4 +160,135 @@ class EagerConflictResolutionLoggingTests {
151160
152161 }
153162
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+
154294}
0 commit comments