1
+ package org.mobilenativefoundation.trails.xplat.lib.repositories.post.impl.store.bookkeeper
2
+
3
+ import dev.mokkery.MockMode
4
+ import dev.mokkery.mock
5
+ import dev.mokkery.verify
6
+ import dev.mokkery.verifyNoMoreCalls
7
+ import kotlinx.coroutines.test.runTest
8
+ import org.mobilenativefoundation.trails.xplat.lib.models.post.Post
9
+ import org.mobilenativefoundation.trails.xplat.lib.repositories.post.impl.store.db.PostBookkeepingDAO
10
+ import kotlin.test.Test
11
+
12
+ class PostBookkeepingRemoverTest {
13
+ private val bookkeepingDAO = mock<PostBookkeepingDAO >(MockMode .autoUnit)
14
+ private val bookkeepingRemover = RealPostBookkeepingRemover (bookkeepingDAO)
15
+
16
+ @Test
17
+ fun removeFailedUpdates_givenValidDAOAndFailedUpdatesAndDeletes_whenCalledWithMultipleKeys_thenShouldClearFailedUpdatesOnly () =
18
+ runTest {
19
+ // Given
20
+ val key1 = Post .Key (1 )
21
+ val key2 = Post .Key (2 )
22
+ val key3 = Post .Key (3 )
23
+
24
+ // When
25
+ bookkeepingRemover.removeFailedUpdates(listOf (key1, key2, key3))
26
+
27
+ // Then
28
+ verify { bookkeepingDAO.clearFailedUpdate(key1.id) }
29
+ verify { bookkeepingDAO.clearFailedUpdate(key2.id) }
30
+ verify { bookkeepingDAO.clearFailedUpdate(key3.id) }
31
+ verifyNoMoreCalls(bookkeepingDAO)
32
+ }
33
+
34
+ @Test
35
+ fun removeFailedDeletes_givenValidDAOAndFailedUpdatesAndDeletes_whenCalledWithMultipleKeys_thenShouldClearFailedDeletesOnly () =
36
+ runTest {
37
+ // Given
38
+ val key1 = Post .Key (1 )
39
+ val key2 = Post .Key (2 )
40
+ val key3 = Post .Key (3 )
41
+
42
+ // When
43
+ bookkeepingRemover.removeFailedDeletes(listOf (key1, key2, key3))
44
+
45
+ // Then
46
+ verify { bookkeepingDAO.clearFailedDelete(key1.id) }
47
+ verify { bookkeepingDAO.clearFailedDelete(key2.id) }
48
+ verify { bookkeepingDAO.clearFailedDelete(key3.id) }
49
+ verifyNoMoreCalls(bookkeepingDAO)
50
+ }
51
+
52
+ @Test
53
+ fun removeAllFailedDeletes_givenValidDAOAndFailedUpdatesAndDeletes_whenCalled_thenShouldClearAllFailedDeletes () =
54
+ runTest {
55
+ // When
56
+ bookkeepingRemover.removeAllFailedDeletes()
57
+
58
+ // Then
59
+ verify { bookkeepingDAO.clearAllFailedDeletes() }
60
+ verifyNoMoreCalls(bookkeepingDAO)
61
+ }
62
+
63
+ @Test
64
+ fun removeAllFailedUpdates_givenValidDAOAndFailedUpdatesAndDeletes_whenCalled_thenShouldClearAllFailedUpdates () =
65
+ runTest {
66
+ // When
67
+ bookkeepingRemover.removeAllFailedUpdates()
68
+
69
+ // Then
70
+ verify { bookkeepingDAO.clearAllFailedUpdates() }
71
+ verifyNoMoreCalls(bookkeepingDAO)
72
+ }
73
+
74
+ @Test
75
+ fun removeFailedDelete_givenValidDAOAndFailedUpdatesAndDeletes_whenCalledWithSingleKey_thenShouldRemoveFailedDeletesForThatKey () =
76
+ runTest {
77
+ // Given
78
+ val key1 = Post .Key (1 )
79
+
80
+ // When
81
+ bookkeepingRemover.removeFailedDelete(key1)
82
+
83
+ // Then
84
+ verify { bookkeepingDAO.clearFailedDelete(key1.id) }
85
+ verifyNoMoreCalls(bookkeepingDAO)
86
+ }
87
+
88
+ @Test
89
+ fun removeFailedUpdate_givenValidDAOAndFailedUpdatesAndDeletes_whenCalledWithSingleKey_thenShouldRemoveFailedUpdatesForThatKey () =
90
+ runTest {
91
+ // Given
92
+ val key1 = Post .Key (1 )
93
+
94
+ // When
95
+ bookkeepingRemover.removeFailedUpdate(key1)
96
+
97
+ // Then
98
+ verify { bookkeepingDAO.clearFailedUpdate(key1.id) }
99
+ verifyNoMoreCalls(bookkeepingDAO)
100
+ }
101
+ }
0 commit comments