@@ -24,16 +24,17 @@ import org.axonframework.messaging.responsetypes.InstanceResponseType
24
24
import org.axonframework.queryhandling.QueryGateway
25
25
import java.util.*
26
26
import java.util.concurrent.CompletableFuture
27
- import kotlin.test.AfterTest
28
- import kotlin.test.BeforeTest
29
- import kotlin.test.Test
30
- import kotlin.test.assertSame
31
- import kotlin.test.assertTrue
27
+ import java.util.concurrent.TimeUnit
28
+ import java.util.stream.Stream
29
+ import kotlin.test.*
30
+ import kotlin.time.DurationUnit
31
+ import kotlin.time.ExperimentalTime
32
32
33
33
/* *
34
34
* Tests Query Gateway extensions.
35
35
*
36
36
* @author Stefan Andjelkovic
37
+ * @author Henrique Sena
37
38
*/
38
39
class QueryGatewayExtensionsTest {
39
40
@@ -43,7 +44,14 @@ class QueryGatewayExtensionsTest {
43
44
private val optionalReturnValue: CompletableFuture <Optional <String >> = CompletableFuture .completedFuture(Optional .of(" Value" ))
44
45
private val listReturnValue: CompletableFuture <List <String >> = CompletableFuture .completedFuture(listOf (" Value" , " Second value" ))
45
46
private val subjectGateway = mockk<QueryGateway >()
46
-
47
+ private val timeout: Long = 1000
48
+ @ExperimentalTime
49
+ private val durationUnit = DurationUnit .valueOf(TimeUnit .SECONDS .name)
50
+ private val streamInstanceReturnValue = Stream .of(" Value" )
51
+ private val streamMultipleReturnValue = Stream .of(listOf (" Value" , " Second Value" ))
52
+ private val streamOptionalReturnValue = Stream .of(Optional .of(" Value" ))
53
+
54
+ @ExperimentalTime
47
55
@BeforeTest
48
56
fun before () {
49
57
every { subjectGateway.query(exampleQuery, matchInstanceResponseType<String >()) } returns instanceReturnValue
@@ -52,6 +60,12 @@ class QueryGatewayExtensionsTest {
52
60
every { subjectGateway.query(queryName, exampleQuery, matchInstanceResponseType<String >()) } returns instanceReturnValue
53
61
every { subjectGateway.query(queryName, exampleQuery, matchOptionalResponseType<String >()) } returns optionalReturnValue
54
62
every { subjectGateway.query(queryName, exampleQuery, matchMultipleInstancesResponseType<String >()) } returns listReturnValue
63
+ every { subjectGateway.scatterGather(exampleQuery, matchInstanceResponseType<String >(), timeout, durationUnit) } returns streamInstanceReturnValue
64
+ every { subjectGateway.scatterGather(exampleQuery, matchMultipleInstancesResponseType<String >(), timeout, durationUnit) } returns streamMultipleReturnValue
65
+ every { subjectGateway.scatterGather(exampleQuery, matchOptionalResponseType<String >(), timeout, durationUnit) } returns streamOptionalReturnValue
66
+ every { subjectGateway.scatterGather(queryName, exampleQuery, matchInstanceResponseType<String >(), timeout, durationUnit) } returns streamInstanceReturnValue
67
+ every { subjectGateway.scatterGather(queryName, exampleQuery, matchMultipleInstancesResponseType<String >(), timeout, durationUnit) } returns streamMultipleReturnValue
68
+ every { subjectGateway.scatterGather(queryName, exampleQuery, matchOptionalResponseType<String >(), timeout, durationUnit) } returns streamOptionalReturnValue
55
69
}
56
70
57
71
@AfterTest
@@ -119,7 +133,7 @@ class QueryGatewayExtensionsTest {
119
133
val queryResult = nullableQueryGateway.queryForSingle<String ?, ExampleQuery >(query = exampleQuery)
120
134
121
135
assertSame(queryResult, nullInstanceReturnValue)
122
- assertTrue (nullInstanceReturnValue.get() == null )
136
+ assertEquals (nullInstanceReturnValue.get(), null )
123
137
verify(exactly = 1 ) { nullableQueryGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
124
138
}
125
139
@@ -182,8 +196,89 @@ class QueryGatewayExtensionsTest {
182
196
val queryResult = nullableQueryGateway.queryForSingle<String ?, ExampleQuery >(queryName = queryName, query = exampleQuery)
183
197
184
198
assertSame(queryResult, nullInstanceReturnValue)
185
- assertTrue (nullInstanceReturnValue.get() == null )
199
+ assertEquals (nullInstanceReturnValue.get(), null )
186
200
verify(exactly = 1 ) { nullableQueryGateway.query(queryName, exampleQuery, matchExpectedResponseType(String ::class .java)) }
187
201
}
188
202
203
+ @ExperimentalTime
204
+ @Test
205
+ fun `ScatterGather for Single should invoke scatterGather method with correct generic parameters` () {
206
+ val result = subjectGateway.scatterGatherForSingle<String , ExampleQuery >(
207
+ query = exampleQuery,
208
+ timeout = timeout,
209
+ durationUnit = durationUnit
210
+ )
211
+
212
+ assertSame(result, streamInstanceReturnValue)
213
+ verify(exactly = 1 ) { subjectGateway.scatterGather(exampleQuery, matchExpectedResponseType(String ::class .java), timeout, durationUnit) }
214
+ }
215
+
216
+ @ExperimentalTime
217
+ @Test
218
+ fun `ScatterGather for Multiple should invoke scatterGather method with correct generic parameters` () {
219
+ val result = subjectGateway.scatterGatherForMultiple<String , ExampleQuery >(
220
+ query = exampleQuery,
221
+ timeout = timeout,
222
+ durationUnit = durationUnit
223
+ )
224
+
225
+ assertSame(result, streamMultipleReturnValue)
226
+ verify(exactly = 1 ) { subjectGateway.scatterGather(exampleQuery, matchMultipleInstancesResponseType<String >(), timeout, durationUnit) }
227
+ }
228
+
229
+ @ExperimentalTime
230
+ @Test
231
+ fun `ScatterGather for Optional should invoke scatterGather method with correct generic parameters` () {
232
+ val result = subjectGateway.scatterGatherForOptional<String , ExampleQuery >(
233
+ query = exampleQuery,
234
+ timeout = timeout,
235
+ durationUnit = durationUnit
236
+ )
237
+
238
+ assertSame(result, streamOptionalReturnValue)
239
+ verify(exactly = 1 ) { subjectGateway.scatterGather(exampleQuery, matchOptionalResponseType<String >(), timeout, durationUnit) }
240
+ }
241
+
242
+ @ExperimentalTime
243
+ @Test
244
+ fun `ScatterGather for Single should invoke scatterGather method with explicit query name` () {
245
+ val result = subjectGateway.scatterGatherForSingle<String , ExampleQuery >(
246
+ queryName = queryName,
247
+ query = exampleQuery,
248
+ timeout = timeout,
249
+ durationUnit = durationUnit
250
+ )
251
+
252
+ assertSame(result, streamInstanceReturnValue)
253
+ verify(exactly = 1 ) { subjectGateway.scatterGather(queryName, exampleQuery, matchExpectedResponseType(String ::class .java), timeout, durationUnit) }
254
+ }
255
+
256
+ @ExperimentalTime
257
+ @Test
258
+ fun `ScatterGather for Multiple should invoke scatterGather method with explicit query name` () {
259
+ val result = subjectGateway.scatterGatherForMultiple<String , ExampleQuery >(
260
+ queryName = queryName,
261
+ query = exampleQuery,
262
+ timeout = timeout,
263
+ durationUnit = durationUnit
264
+ )
265
+
266
+ assertSame(result, streamMultipleReturnValue)
267
+ verify(exactly = 1 ) { subjectGateway.scatterGather(queryName, exampleQuery, matchMultipleInstancesResponseType<String >(), timeout, durationUnit) }
268
+ }
269
+
270
+ @ExperimentalTime
271
+ @Test
272
+ fun `ScatterGather for Optional should invoke scatterGather method with explicit query name` () {
273
+ val result = subjectGateway.scatterGatherForOptional<String , ExampleQuery >(
274
+ queryName = queryName,
275
+ query = exampleQuery,
276
+ timeout = timeout,
277
+ durationUnit = durationUnit
278
+ )
279
+
280
+ assertSame(result, streamOptionalReturnValue)
281
+ verify(exactly = 1 ) { subjectGateway.scatterGather(queryName, exampleQuery, matchOptionalResponseType<String >(), timeout, durationUnit) }
282
+ }
283
+
189
284
}
0 commit comments