Skip to content

Commit c6f7d6c

Browse files
committed
Add EagerConflictResolutionTests
Signed-off-by: matt-ramotar <[email protected]>
1 parent 8a7cefa commit c6f7d6c

File tree

1 file changed

+141
-1
lines changed

1 file changed

+141
-1
lines changed
Lines changed: 141 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import dev.mokkery.matcher.eq
1010
import dev.mokkery.mock
1111
import dev.mokkery.verify
1212
import dev.mokkery.verify.VerifyMode.Companion.exactly
13+
import dev.mokkery.verify.VerifyMode.Companion.not
1314
import dev.mokkery.verifySuspend
1415
import kotlinx.coroutines.flow.flowOf
1516
import kotlinx.coroutines.test.TestScope
@@ -27,7 +28,7 @@ import org.mobilenativefoundation.store.store5.test_utils.model.Note
2728
import kotlin.test.Test
2829
import 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

Comments
 (0)