1+ package org.mobilenativefoundation.trails.xplat.lib.repositories.post.impl.store.updater
2+
3+ import dev.mokkery.answering.returns
4+ import dev.mokkery.everySuspend
5+ import dev.mokkery.mock
6+ import kotlinx.coroutines.test.runTest
7+ import org.mobilenativefoundation.store.store5.Updater
8+ import org.mobilenativefoundation.store.store5.UpdaterResult
9+ import org.mobilenativefoundation.trails.xplat.lib.models.post.PostOutput
10+ import org.mobilenativefoundation.trails.xplat.lib.models.post.PostWriteResponse
11+ import org.mobilenativefoundation.trails.xplat.lib.operations.io.Operation
12+ import org.mobilenativefoundation.trails.xplat.lib.operations.query.DataSources
13+ import org.mobilenativefoundation.trails.xplat.lib.repositories.post.impl.store.PostOperation
14+ import org.mobilenativefoundation.trails.xplat.lib.repositories.post.test.utils.FakePostFactory.createCompositePost
15+ import org.mobilenativefoundation.trails.xplat.lib.repositories.post.test.utils.FakePostFactory.createPost
16+ import org.mobilenativefoundation.trails.xplat.lib.rest.api.post.PostOperations
17+ import kotlin.test.Test
18+ import kotlin.test.assertEquals
19+ import kotlin.test.assertIs
20+
21+ class PostUpdaterFactoryTest {
22+ private val client = mock<PostOperations >()
23+ private val factory = PostUpdaterFactory (client)
24+
25+ @Test
26+ fun create_whenCalled_thenShouldReturnUpdater () {
27+ // When
28+ val updater = factory.create()
29+
30+ // Then
31+ assertIs<Updater <PostOperation , PostOutput , PostWriteResponse >>(updater)
32+ }
33+
34+ @Test
35+ fun handleOperation_givenUpdater_whenCalledWithInsertOne_thenShouldMakeNetworkRequestAndReturnUpdaterResult () =
36+ runTest {
37+ // Given
38+ val node = createPost(1 )
39+ val properties = node.properties
40+ val updater = factory.create()
41+ val operation = Operation .Mutation .Create .InsertOne (properties)
42+ everySuspend { client.insertOne(properties) }.returns(node.key)
43+
44+ // When
45+ val result = updater.post(operation, PostOutput .Single (properties))
46+
47+ // Then
48+ assertIs<UpdaterResult .Success .Typed <PostWriteResponse .Create >>(result)
49+ assertEquals(UpdaterResult .Success .Typed (PostWriteResponse .Create (node.key)), result)
50+ }
51+
52+ @Test
53+ fun handleOperation_givenUpdater_whenCalledWithDeleteAll_thenShouldMakeNetworkRequestAndReturnUpdaterResult () =
54+ runTest {
55+ // Given
56+ val node = createPost(1 )
57+ val properties = node.properties
58+ val updater = factory.create()
59+ val operation = Operation .Mutation .Delete .DeleteAll
60+ everySuspend { client.deleteAll() }.returns(1 )
61+
62+ // When
63+ val result = updater.post(operation, PostOutput .Single (properties))
64+
65+ // Then
66+ assertIs<UpdaterResult .Success .Typed <PostWriteResponse .Delete >>(result)
67+ assertEquals(UpdaterResult .Success .Typed (PostWriteResponse .Delete (1 )), result)
68+ }
69+
70+ @Test
71+ fun handleOperation_givenUpdater_whenCalledWithDeleteMany_thenShouldMakeNetworkRequestAndReturnUpdaterResult () =
72+ runTest {
73+ // Given
74+ val node1 = createPost(1 )
75+ val node2 = createPost(2 )
76+ val updater = factory.create()
77+ val operation = Operation .Mutation .Delete .DeleteMany (listOf (node1.key, node2.key))
78+ everySuspend { client.deleteMany(listOf (node1.key, node2.key)) }.returns(2 )
79+
80+ // When
81+ val result = updater.post(operation, PostOutput .Collection (listOf (node1, node2)))
82+
83+ // Then
84+ assertIs<UpdaterResult .Success .Typed <PostWriteResponse .Delete >>(result)
85+ assertEquals(UpdaterResult .Success .Typed (PostWriteResponse .Delete (2 )), result)
86+ }
87+
88+
89+ @Test
90+ fun handleOperation_givenUpdater_whenCalledWithDeleteOne_thenShouldMakeNetworkRequestAndReturnUpdaterResult () =
91+ runTest {
92+ // Given
93+ val node1 = createPost(1 )
94+ val updater = factory.create()
95+ val operation = Operation .Mutation .Delete .DeleteOne (node1.key)
96+ everySuspend { client.deleteOne(node1.key) }.returns(1 )
97+
98+ // When
99+ val result = updater.post(operation, PostOutput .Single (node1))
100+
101+ // Then
102+ assertIs<UpdaterResult .Success .Typed <PostWriteResponse .Delete >>(result)
103+ assertEquals(UpdaterResult .Success .Typed (PostWriteResponse .Delete (1 )), result)
104+ }
105+
106+ @Test
107+ fun handleOperation_givenUpdater_whenCalledWithUpdateOne_thenShouldMakeNetworkRequestAndReturnUpdaterResult () =
108+ runTest {
109+ // Given
110+ val node1 = createPost(1 )
111+ val updater = factory.create()
112+ val operation = Operation .Mutation .Update .UpdateOne (node1)
113+ everySuspend { client.updateOne(node1) }.returns(1 )
114+
115+ // When
116+ val result = updater.post(operation, PostOutput .Single (node1))
117+
118+ // Then
119+ assertIs<UpdaterResult .Success .Typed <PostWriteResponse .Update >>(result)
120+ assertEquals(UpdaterResult .Success .Typed (PostWriteResponse .Update (1 )), result)
121+ }
122+
123+ @Test
124+ fun handleOperation_givenUpdater_whenCalledWithUpsertOne_thenShouldMakeNetworkRequestAndReturnUpdaterResult () =
125+ runTest {
126+ // Given
127+ val node1 = createPost(1 )
128+ val updater = factory.create()
129+ val operation = Operation .Mutation .Upsert .UpsertOne (node1.properties)
130+ everySuspend { client.upsertOne(node1.properties) }.returns(node1.key)
131+
132+ // When
133+ val result = updater.post(operation, PostOutput .Single (node1.properties))
134+
135+ // Then
136+ assertIs<UpdaterResult .Success .Typed <PostWriteResponse .Upsert >>(result)
137+ assertEquals(UpdaterResult .Success .Typed (PostWriteResponse .Upsert (node1.key)), result)
138+ }
139+
140+ @Test
141+ fun handleOperation_givenUpdater_whenCalledWithFindOne_thenShouldMakeNetworkRequestAndReturnUpdaterResult () =
142+ runTest {
143+ // Given
144+ val node1 = createPost(1 )
145+ val updater = factory.create()
146+ val operation = Operation .Query .FindOne (node1.key, DataSources .all)
147+ everySuspend { client.updateOne(node1) }.returns(1 )
148+
149+ // When
150+ val result = updater.post(operation, PostOutput .Single (node1))
151+
152+ // Then
153+ assertIs<UpdaterResult .Success .Typed <PostWriteResponse .Update >>(result)
154+ assertEquals(UpdaterResult .Success .Typed (PostWriteResponse .Update (1 )), result)
155+ }
156+
157+ @Test
158+ fun handleOperation_givenUpdater_whenCalledWithFindOneComposite_thenShouldMakeNetworkRequestAndReturnUpdaterResult () =
159+ runTest {
160+ // Given
161+ val node1 = createCompositePost(1 )
162+ val updater = factory.create()
163+ val operation = Operation .Query .FindOneComposite (node1.node.key, DataSources .all)
164+ everySuspend { client.updateOne(node1.node) }.returns(1 )
165+
166+ // When
167+ val result = updater.post(operation, PostOutput .Single (node1))
168+
169+ // Then
170+ assertIs<UpdaterResult .Success .Typed <PostWriteResponse .Update >>(result)
171+ assertEquals(UpdaterResult .Success .Typed (PostWriteResponse .Update (1 )), result)
172+ }
173+ }
0 commit comments