@@ -19,9 +19,8 @@ import io.mockk.clearMocks
19
19
import io.mockk.every
20
20
import io.mockk.mockk
21
21
import io.mockk.verify
22
- import org.axonframework.messaging.responsetypes.AbstractResponseType
23
- import org.axonframework.messaging.responsetypes.InstanceResponseType
24
22
import org.axonframework.queryhandling.QueryGateway
23
+ import org.axonframework.queryhandling.SubscriptionQueryResult
25
24
import java.util.*
26
25
import java.util.concurrent.CompletableFuture
27
26
import java.util.concurrent.TimeUnit
@@ -47,6 +46,7 @@ internal class QueryGatewayExtensionsTest {
47
46
private val streamInstanceReturnValue = Stream .of(" Value" )
48
47
private val streamMultipleReturnValue = Stream .of(listOf (" Value" , " Second Value" ))
49
48
private val streamOptionalReturnValue = Stream .of(Optional .of(" Value" ))
49
+ private val subscriptionQueryResult = ExampleSubscriptionQueryResult ()
50
50
51
51
@BeforeTest
52
52
fun before () {
@@ -62,6 +62,15 @@ internal class QueryGatewayExtensionsTest {
62
62
every { subjectGateway.scatterGather(queryName, exampleQuery, matchInstanceResponseType<String >(), timeout, timeUnit) } returns streamInstanceReturnValue
63
63
every { subjectGateway.scatterGather(queryName, exampleQuery, matchMultipleInstancesResponseType<String >(), timeout, timeUnit) } returns streamMultipleReturnValue
64
64
every { subjectGateway.scatterGather(queryName, exampleQuery, matchOptionalResponseType<String >(), timeout, timeUnit) } returns streamOptionalReturnValue
65
+ every { subjectGateway.subscriptionQuery(exampleQuery, matchInstanceResponseType<InitialResponseType >(), matchInstanceResponseType<UpdateResponseType >()) } returns subscriptionQueryResult
66
+ every {
67
+ subjectGateway.subscriptionQuery(
68
+ queryName,
69
+ exampleQuery,
70
+ matchInstanceResponseType<InitialResponseType >(),
71
+ matchInstanceResponseType<UpdateResponseType >()
72
+ )
73
+ } returns subscriptionQueryResult
65
74
}
66
75
67
76
@AfterTest
@@ -80,7 +89,7 @@ internal class QueryGatewayExtensionsTest {
80
89
81
90
@Test
82
91
fun `Query without queryName should invoke query method and not require explicit generic types` () {
83
- val queryResult: CompletableFuture <String > = subjectGateway.query(query = exampleQuery)
92
+ val queryResult: CompletableFuture <String > = subjectGateway.query(query = exampleQuery)
84
93
assertSame(queryResult, instanceReturnValue)
85
94
verify(exactly = 1 ) {
86
95
subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java))
@@ -90,7 +99,6 @@ internal class QueryGatewayExtensionsTest {
90
99
@Test
91
100
fun `Query without queryName Optional should invoke query method with correct generic parameters` () {
92
101
val queryResult = subjectGateway.queryOptional<String , ExampleQuery >(query = exampleQuery)
93
-
94
102
assertSame(queryResult, optionalReturnValue)
95
103
verify(exactly = 1 ) { subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
96
104
}
@@ -127,7 +135,7 @@ internal class QueryGatewayExtensionsTest {
127
135
}
128
136
129
137
val queryResult = nullableQueryGateway.query<String ?, ExampleQuery >(query = exampleQuery)
130
-
138
+
131
139
assertSame(queryResult, nullInstanceReturnValue)
132
140
assertEquals(nullInstanceReturnValue.get(), null )
133
141
verify(exactly = 1 ) { nullableQueryGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
@@ -185,7 +193,7 @@ internal class QueryGatewayExtensionsTest {
185
193
fun `Query should handle nullable responses` () {
186
194
val nullInstanceReturnValue: CompletableFuture <String ?> = CompletableFuture .completedFuture(null )
187
195
val nullableQueryGateway = mockk<QueryGateway > {
188
- every { query(queryName, exampleQuery, matchInstanceResponseType<String ?>() ) } returns nullInstanceReturnValue
196
+ every { query(queryName, exampleQuery, matchInstanceResponseType<String ?>()) } returns nullInstanceReturnValue
189
197
}
190
198
191
199
val queryResult = nullableQueryGateway.query<String ?, ExampleQuery >(queryName = queryName, query = exampleQuery)
@@ -195,29 +203,29 @@ internal class QueryGatewayExtensionsTest {
195
203
verify(exactly = 1 ) { nullableQueryGateway.query(queryName, exampleQuery, matchExpectedResponseType(String ::class .java)) }
196
204
}
197
205
198
- @Test
199
- fun `ScatterGather for Single should invoke scatterGather method with correct generic parameters` () {
200
- val result = subjectGateway.scatterGather<String , ExampleQuery >(
201
- query = exampleQuery,
202
- timeout = timeout,
203
- timeUnit = timeUnit
204
- )
206
+ @Test
207
+ fun `ScatterGather for Single should invoke scatterGather method with correct generic parameters` () {
208
+ val result = subjectGateway.scatterGather<String , ExampleQuery >(
209
+ query = exampleQuery,
210
+ timeout = timeout,
211
+ timeUnit = timeUnit
212
+ )
205
213
206
- assertSame(result, streamInstanceReturnValue)
207
- verify(exactly = 1 ) { subjectGateway.scatterGather(exampleQuery, matchExpectedResponseType(String ::class .java), timeout, timeUnit) }
208
- }
214
+ assertSame(result, streamInstanceReturnValue)
215
+ verify(exactly = 1 ) { subjectGateway.scatterGather(exampleQuery, matchExpectedResponseType(String ::class .java), timeout, timeUnit) }
216
+ }
209
217
210
- @Test
211
- fun `ScatterGather for Multiple should invoke scatterGather method with correct generic parameters` () {
212
- val result = subjectGateway.scatterGatherMany<String , ExampleQuery >(
213
- query = exampleQuery,
214
- timeout = timeout,
215
- timeUnit = timeUnit
216
- )
218
+ @Test
219
+ fun `ScatterGather for Multiple should invoke scatterGather method with correct generic parameters` () {
220
+ val result = subjectGateway.scatterGatherMany<String , ExampleQuery >(
221
+ query = exampleQuery,
222
+ timeout = timeout,
223
+ timeUnit = timeUnit
224
+ )
217
225
218
- assertSame(result, streamMultipleReturnValue)
219
- verify(exactly = 1 ) { subjectGateway.scatterGather(exampleQuery, matchMultipleInstancesResponseType<String >(), timeout, timeUnit) }
220
- }
226
+ assertSame(result, streamMultipleReturnValue)
227
+ verify(exactly = 1 ) { subjectGateway.scatterGather(exampleQuery, matchMultipleInstancesResponseType<String >(), timeout, timeUnit) }
228
+ }
221
229
222
230
@Test
223
231
fun `ScatterGather for Optional should invoke scatterGather method with correct generic parameters` () {
@@ -270,4 +278,57 @@ internal class QueryGatewayExtensionsTest {
270
278
verify(exactly = 1 ) { subjectGateway.scatterGather(queryName, exampleQuery, matchOptionalResponseType<String >(), timeout, timeUnit) }
271
279
}
272
280
281
+ @Test
282
+ fun `Query without queryName should invoke subscription query method with correct generic parameters` () {
283
+ val queryResult = subjectGateway.subscriptionQuery<ExampleQuery , InitialResponseType , UpdateResponseType >(query = exampleQuery)
284
+ assertSame(queryResult, subscriptionQueryResult)
285
+ verify(exactly = 1 ) {
286
+ subjectGateway.subscriptionQuery(
287
+ exampleQuery,
288
+ matchExpectedResponseType(InitialResponseType ::class .java),
289
+ matchExpectedResponseType(UpdateResponseType ::class .java)
290
+ )
291
+ }
292
+ }
293
+
294
+ @Test
295
+ fun `Query without queryName should invoke subscriptionQuery method and not require explicit generic types` () {
296
+ val queryResult: SubscriptionQueryResult <InitialResponseType , UpdateResponseType > = subjectGateway.subscriptionQuery(query = exampleQuery)
297
+ assertSame(queryResult, subscriptionQueryResult)
298
+ verify(exactly = 1 ) {
299
+ subjectGateway.subscriptionQuery(
300
+ exampleQuery,
301
+ matchExpectedResponseType(InitialResponseType ::class .java),
302
+ matchExpectedResponseType(UpdateResponseType ::class .java)
303
+ )
304
+ }
305
+ }
306
+
307
+ @Test
308
+ fun `Query should invoke subscriptionQuery method with correct generic parameters` () {
309
+ val queryResult = subjectGateway.subscriptionQuery<ExampleQuery , InitialResponseType , UpdateResponseType >(queryName = queryName, query = exampleQuery)
310
+ assertSame(queryResult, subscriptionQueryResult)
311
+ verify(exactly = 1 ) {
312
+ subjectGateway.subscriptionQuery(
313
+ queryName,
314
+ exampleQuery,
315
+ matchExpectedResponseType(InitialResponseType ::class .java),
316
+ matchExpectedResponseType(UpdateResponseType ::class .java)
317
+ )
318
+ }
319
+ }
320
+
321
+ @Test
322
+ fun `Query should invoke subscriptionQuery method and not require explicit generic types` () {
323
+ val queryResult: SubscriptionQueryResult <InitialResponseType , UpdateResponseType > = subjectGateway.subscriptionQuery(queryName = queryName, query = exampleQuery)
324
+ assertSame(queryResult, subscriptionQueryResult)
325
+ verify(exactly = 1 ) {
326
+ subjectGateway.subscriptionQuery(
327
+ queryName,
328
+ exampleQuery,
329
+ matchExpectedResponseType(InitialResponseType ::class .java),
330
+ matchExpectedResponseType(UpdateResponseType ::class .java)
331
+ )
332
+ }
333
+ }
273
334
}
0 commit comments