@@ -9,13 +9,15 @@ import io.cloudstate.javasupport.ServiceCallFactory
9
9
import io.cloudstate.javasupport.eventsourced.CommandContext
10
10
import io.cloudstate.javasupport.eventsourced.EventContext
11
11
import io.cloudstate.javasupport.eventsourced.EventSourcedContext
12
+ import io.cloudstate.javasupport.eventsourced.SnapshotContext
12
13
import io.cloudstate.javasupport.impl.AnySupport
13
14
import io.cloudstate.kotlinsupport.annotations.EntityId
14
15
import io.cloudstate.kotlinsupport.annotations.eventsourced.*
15
16
import io.cloudstate.kotlinsupport.api.eventsourced.KotlinAnnotationBasedEventSourced
16
17
import io.cloudstate.kotlinsupport.logger
17
18
import org.junit.Test
18
19
import java.util.*
20
+ import java.util.stream.Collectors
19
21
import kotlin.test.assertEquals
20
22
import kotlin.test.assertNotNull
21
23
import kotlin.test.assertTrue
@@ -42,11 +44,11 @@ class KotlinAnnotationBasedEventSourcedTest {
42
44
val handler = annotationHandler.create(creationContext)
43
45
44
46
val expectResult = Optional .of(
45
- params.first.encodeJava(
46
- ShoppingCartProto .Cart .newBuilder()
47
- .addAllItems(mutableMapOf<String , ShoppingCartProto .LineItem ?>().values)
48
- .build())
49
- )
47
+ params.first.encodeJava(
48
+ ShoppingCartProto .Cart .newBuilder()
49
+ .addAllItems(mutableMapOf<String , ShoppingCartProto .LineItem ?>().values)
50
+ .build())
51
+ )
50
52
51
53
val command = params.first.encodeJava(Empty .getDefaultInstance())
52
54
@@ -99,12 +101,37 @@ class KotlinAnnotationBasedEventSourcedTest {
99
101
log.info(" Result of Call GetCart is: ${result.get()} " )
100
102
}
101
103
104
+ @Test
102
105
fun `Validate SnapshotInvoker Calls` () {
103
- TODO ()
106
+ val annotationHandler = params.second
107
+ val creationContext = createCreationContext()
108
+ val snapshotContext: SnapshotContext = createSnapshotContext()
109
+ val handler = annotationHandler.create(creationContext)
110
+
111
+ val expectResult = Optional .of(
112
+ params.first.encodeJava(
113
+ Domain .Cart .newBuilder()
114
+ .addAllItems(mutableMapOf<String , Domain .LineItem ?>().values)
115
+ .build())
116
+ )
117
+
118
+ val result = handler.snapshot(snapshotContext)
119
+ assertTrue(result.isPresent)
120
+ assertEquals(expectResult.get(), result.get())
121
+ log.info(" Result of Call Snapshot is: ${result.get()} " )
104
122
}
105
123
106
- fun `Validate SnapshotHandlers Calls` () {
107
- TODO ()
124
+ private fun createSnapshotContext (): SnapshotContext = object : SnapshotContext {
125
+ override fun entityId (): String = " test:1"
126
+
127
+ override fun serviceCallFactory (): ServiceCallFactory {
128
+ TODO (" Not yet implemented" )
129
+ }
130
+
131
+ override fun sequenceNumber (): Long {
132
+ TODO (" Not yet implemented" )
133
+ }
134
+
108
135
}
109
136
110
137
private fun createItemAddedEventContext (): EventContext ? = object : EventContext {
@@ -181,7 +208,14 @@ class TestEntity(@EntityId private val entityId: String) {
181
208
private val cart: MutableMap <String , ShoppingCartProto .LineItem ?> = mutableMapOf<String , ShoppingCartProto .LineItem ?>()
182
209
183
210
@Snapshot
184
- fun snapshot () {}
211
+ fun snapshot (): Domain .Cart =
212
+ Domain .Cart .newBuilder()
213
+ .addAllItems(
214
+ cart.values.stream()
215
+ .map { item: ShoppingCartProto .LineItem ? -> this .convert(item) }
216
+ .collect(Collectors .toList())
217
+ )
218
+ .build()
185
219
186
220
@SnapshotHandler
187
221
fun handleSnapshot (cart : Domain .Cart ) {}
@@ -194,8 +228,8 @@ class TestEntity(@EntityId private val entityId: String) {
194
228
convert(itemAdded.item)
195
229
} else {
196
230
item.toBuilder()
197
- .setQuantity(item.quantity + itemAdded.item.quantity)
198
- .build()
231
+ .setQuantity(item.quantity + itemAdded.item.quantity)
232
+ .build()
199
233
}
200
234
cart[item!! .productId] = item
201
235
}
@@ -213,9 +247,16 @@ class TestEntity(@EntityId private val entityId: String) {
213
247
fun removeItem () {}
214
248
215
249
private fun convert (item : Domain .LineItem ): ShoppingCartProto .LineItem =
216
- ShoppingCartProto .LineItem .newBuilder()
217
- .setProductId(item.productId)
218
- .setName(item.name)
219
- .setQuantity(item.quantity)
220
- .build()
250
+ ShoppingCartProto .LineItem .newBuilder()
251
+ .setProductId(item.productId)
252
+ .setName(item.name)
253
+ .setQuantity(item.quantity)
254
+ .build()
255
+
256
+ private fun convert (item : ShoppingCartProto .LineItem ? ): Domain .LineItem =
257
+ Domain .LineItem .newBuilder()
258
+ .setProductId(item!! .productId)
259
+ .setName(item.name)
260
+ .setQuantity(item.quantity)
261
+ .build()
221
262
}
0 commit comments