Skip to content

Commit 4df4b37

Browse files
committed
Cover RealPostBookkeepingReader
Signed-off-by: Matt Ramotar <[email protected]>
1 parent 4524065 commit 4df4b37

File tree

1 file changed

+235
-0
lines changed
  • xplat/lib/repositories/post/impl/src/commonTest/kotlin/org/mobilenativefoundation/trails/xplat/lib/repositories/post/impl/store/bookkeeper

1 file changed

+235
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
package org.mobilenativefoundation.trails.xplat.lib.repositories.post.impl.store.bookkeeper
2+
3+
import dev.mokkery.answering.returns
4+
import dev.mokkery.everySuspend
5+
import dev.mokkery.matcher.eq
6+
import dev.mokkery.mock
7+
import dev.mokkery.verifySuspend
8+
import kotlinx.coroutines.test.runTest
9+
import org.mobilenativefoundation.trails.xplat.lib.db.*
10+
import org.mobilenativefoundation.trails.xplat.lib.models.post.Post
11+
import org.mobilenativefoundation.trails.xplat.lib.repositories.post.impl.store.db.PostBookkeepingDAO
12+
import kotlin.test.Test
13+
import kotlin.test.assertEquals
14+
import kotlin.test.assertNull
15+
16+
class RealPostBookkeepingReaderTest {
17+
18+
private val bookkeepingDAO = mock<PostBookkeepingDAO>()
19+
private val bookkeepingReader = RealPostBookkeepingReader(bookkeepingDAO)
20+
21+
@Test
22+
fun findLastFailedUpdate_givenNormalBookkeepingDAOAndFailedUpdate_whenCalled_thenShouldReturnTimestamp() = runTest {
23+
// Given
24+
val failedUpdate = GetFailedUpdates(1L)
25+
26+
everySuspend {
27+
bookkeepingDAO.getAllFailedUpdates()
28+
}.returns(listOf(failedUpdate))
29+
30+
everySuspend {
31+
bookkeepingDAO.getAllFailedDeletes()
32+
}.returns(emptyList())
33+
34+
// When
35+
val timestamp = bookkeepingReader.findLastFailedUpdate()
36+
37+
// Then
38+
verifySuspend { bookkeepingDAO.getAllFailedUpdates() }
39+
verifySuspend { bookkeepingDAO.getAllFailedDeletes() }
40+
assertEquals(failedUpdate.timestamp, timestamp)
41+
}
42+
43+
@Test
44+
fun findLastFailedUpdate_givenNormalBookkeepingDAOAndFailedDelete_whenCalled_thenShouldReturnTimestamp() = runTest {
45+
// Given
46+
val failedDelete = GetFailedDeletes(1L)
47+
48+
everySuspend {
49+
bookkeepingDAO.getAllFailedUpdates()
50+
}.returns(emptyList())
51+
52+
everySuspend {
53+
bookkeepingDAO.getAllFailedDeletes()
54+
}.returns(listOf(failedDelete))
55+
56+
// When
57+
val timestamp = bookkeepingReader.findLastFailedUpdate()
58+
59+
// Then
60+
verifySuspend { bookkeepingDAO.getAllFailedUpdates() }
61+
verifySuspend { bookkeepingDAO.getAllFailedDeletes() }
62+
assertEquals(failedDelete.timestamp, timestamp)
63+
}
64+
65+
@Test
66+
fun findLastFailedUpdate_givenNormalBookkeepingDAOAndNoFailedSyncs_whenCalled_thenShouldReturnNull() = runTest {
67+
// Given
68+
69+
everySuspend {
70+
bookkeepingDAO.getAllFailedUpdates()
71+
}.returns(emptyList())
72+
73+
everySuspend {
74+
bookkeepingDAO.getAllFailedDeletes()
75+
}.returns(emptyList())
76+
77+
// When
78+
val timestamp = bookkeepingReader.findLastFailedUpdate()
79+
80+
// Then
81+
verifySuspend { bookkeepingDAO.getAllFailedUpdates() }
82+
verifySuspend { bookkeepingDAO.getAllFailedDeletes() }
83+
assertNull(timestamp)
84+
}
85+
86+
@Test
87+
fun findLastFailedUpdate_givenNormalBookkeepingDAOAndFailedUpdate_whenCalledWithMultipleKeys_thenShouldReturnTimestamp() =
88+
runTest {
89+
// Given
90+
val keys = listOf(Post.Key(1))
91+
val ids = keys.map { it.id }
92+
val failedUpdate = GetManyFailedUpdates(1L)
93+
94+
everySuspend {
95+
bookkeepingDAO.getManyFailedUpdates(eq(ids))
96+
}.returns(listOf(failedUpdate))
97+
98+
everySuspend {
99+
bookkeepingDAO.getManyFailedDeletes(eq(ids))
100+
}.returns(emptyList())
101+
102+
// When
103+
val timestamp = bookkeepingReader.findLastFailedUpdate(keys)
104+
105+
// Then
106+
verifySuspend { bookkeepingDAO.getManyFailedUpdates(eq(ids)) }
107+
verifySuspend { bookkeepingDAO.getManyFailedDeletes(eq(ids)) }
108+
assertEquals(failedUpdate.timestamp, timestamp)
109+
}
110+
111+
112+
@Test
113+
fun findLastFailedUpdate_givenNormalBookkeepingDAOAndFailedDelete_whenCalledWithMultipleKeys_thenShouldReturnTimestamp() =
114+
runTest {
115+
// Given
116+
val keys = listOf(Post.Key(1))
117+
val ids = keys.map { it.id }
118+
val failedDelete = GetManyFailedDeletes(1L)
119+
120+
everySuspend {
121+
bookkeepingDAO.getManyFailedUpdates(eq(ids))
122+
}.returns(emptyList())
123+
124+
everySuspend {
125+
bookkeepingDAO.getManyFailedDeletes(eq(ids))
126+
}.returns(listOf(failedDelete))
127+
128+
// When
129+
val timestamp = bookkeepingReader.findLastFailedUpdate(keys)
130+
131+
// Then
132+
verifySuspend { bookkeepingDAO.getManyFailedUpdates(eq(ids)) }
133+
verifySuspend { bookkeepingDAO.getManyFailedDeletes(eq(ids)) }
134+
assertEquals(failedDelete.timestamp, timestamp)
135+
}
136+
137+
138+
@Test
139+
fun findLastFailedUpdate_givenNormalBookkeepingDAOAndNoFailedSyncs_whenCalledWithMultipleKeys_thenShouldReturnNull() =
140+
runTest {
141+
// Given
142+
val keys = listOf(Post.Key(1))
143+
val ids = keys.map { it.id }
144+
145+
everySuspend {
146+
bookkeepingDAO.getManyFailedUpdates(eq(ids))
147+
}.returns(emptyList())
148+
149+
everySuspend {
150+
bookkeepingDAO.getManyFailedDeletes(eq(ids))
151+
}.returns(emptyList())
152+
153+
// When
154+
val timestamp = bookkeepingReader.findLastFailedUpdate(keys)
155+
156+
// Then
157+
verifySuspend { bookkeepingDAO.getManyFailedUpdates(eq(ids)) }
158+
verifySuspend { bookkeepingDAO.getManyFailedDeletes(eq(ids)) }
159+
assertNull(timestamp)
160+
}
161+
162+
@Test
163+
fun findLastFailedUpdate_givenNormalBookkeepingDAOAndFailedUpdate_whenCalledWithSingleKey_thenShouldReturnTimestamp() =
164+
runTest {
165+
// Given
166+
val key = Post.Key(1)
167+
val failedUpdate = GetOneFailedUpdate(1L)
168+
169+
everySuspend {
170+
bookkeepingDAO.getOneFailedUpdate(key.id)
171+
}.returns(failedUpdate)
172+
173+
everySuspend {
174+
bookkeepingDAO.getOneFailedDelete(key.id)
175+
}.returns(null)
176+
177+
// When
178+
val timestamp = bookkeepingReader.findLastFailedUpdate(key)
179+
180+
// Then
181+
verifySuspend { bookkeepingDAO.getOneFailedUpdate(key.id) }
182+
verifySuspend { bookkeepingDAO.getOneFailedDelete(key.id) }
183+
assertEquals(failedUpdate.timestamp, timestamp)
184+
}
185+
186+
187+
@Test
188+
fun findLastFailedUpdate_givenNormalBookkeepingDAOAndFailedDelete_whenCalledWithSingleKey_thenShouldReturnTimestamp() =
189+
runTest {
190+
// Given
191+
val key = Post.Key(1)
192+
val failedDelete = GetOneFailedDelete(1L)
193+
194+
everySuspend {
195+
bookkeepingDAO.getOneFailedUpdate(key.id)
196+
}.returns(null)
197+
198+
everySuspend {
199+
bookkeepingDAO.getOneFailedDelete(key.id)
200+
}.returns(failedDelete)
201+
202+
// When
203+
val timestamp = bookkeepingReader.findLastFailedUpdate(key)
204+
205+
// Then
206+
verifySuspend { bookkeepingDAO.getOneFailedUpdate(key.id) }
207+
verifySuspend { bookkeepingDAO.getOneFailedDelete(key.id) }
208+
assertEquals(failedDelete.timestamp, timestamp)
209+
}
210+
211+
212+
@Test
213+
fun findLastFailedUpdate_givenNormalBookkeepingDAOAndNoFailedSyncs_whenCalledWithSingleKey_thenShouldReturnNull() =
214+
runTest {
215+
// Given
216+
val key = Post.Key(1)
217+
218+
everySuspend {
219+
bookkeepingDAO.getOneFailedUpdate(key.id)
220+
}.returns(null)
221+
222+
everySuspend {
223+
bookkeepingDAO.getOneFailedDelete(key.id)
224+
}.returns(null)
225+
226+
// When
227+
val timestamp = bookkeepingReader.findLastFailedUpdate(key)
228+
229+
// Then
230+
verifySuspend { bookkeepingDAO.getOneFailedUpdate(key.id) }
231+
verifySuspend { bookkeepingDAO.getOneFailedDelete(key.id) }
232+
assertNull(timestamp)
233+
}
234+
235+
}

0 commit comments

Comments
 (0)