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