Skip to content

Commit c34bb30

Browse files
authored
Merge pull request #27 from AxonFramework/feature/QueryUpdateEmitter-extensions
Add reified generics based extension of QueryUpdateEmitter's emit
2 parents 5a34f67 + f4071e2 commit c34bb30

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.axonframework.extensions.kotlin
2+
3+
import org.axonframework.queryhandling.QueryUpdateEmitter
4+
5+
/**
6+
* Reified version of [org.axonframework.queryhandling.QueryUpdateEmitter.emit] which uses generics
7+
* to indicate Query type and Update type.
8+
*
9+
* Emits given incremental update to subscription queries matching given generic query type and filter.
10+
* In order to send nullable updates, use [org.axonframework.queryhandling.QueryUpdateEmitter.emit]
11+
* with an [org.axonframework.queryhandling.SubscriptionQueryUpdateMessage]
12+
*
13+
* @param update incremental update
14+
* @param filter predicate on query payload used to filter subscription queries
15+
* @param [Q] the type of the query
16+
* @param [U] the type of the update
17+
* @see org.axonframework.queryhandling.QueryUpdateEmitter.emit
18+
* @author Stefan Andjelkovic
19+
*/
20+
inline fun <reified Q, reified U : Any> QueryUpdateEmitter.emit(update: U, noinline filter: (Q) -> Boolean) =
21+
this.emit(Q::class.java, filter, update)
22+
23+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.axonframework.extensions.kotlin
2+
3+
import io.mockk.every
4+
import io.mockk.mockk
5+
import io.mockk.verify
6+
import org.axonframework.queryhandling.QueryUpdateEmitter
7+
import kotlin.test.BeforeTest
8+
import kotlin.test.Test
9+
10+
/**
11+
* Tests [org.axonframework.queryhandling.QueryUpdateEmitter] extensions.
12+
*
13+
* @author Stefan Andjelkovic
14+
*/
15+
internal class QueryUpdateEmitterExtensionsTest {
16+
private val subjectEmitter = mockk<QueryUpdateEmitter>()
17+
private val exampleQuery = ExampleQuery(2)
18+
private val exampleUpdatePayload: String = "Updated"
19+
20+
@BeforeTest
21+
fun before() {
22+
every { subjectEmitter.emit(ExampleQuery::class.java, match { it.test(exampleQuery) }, exampleUpdatePayload) } returns Unit
23+
}
24+
25+
@Test
26+
fun `Emit extension should invoke correct emit method with a class parameter`() {
27+
subjectEmitter.emit<ExampleQuery, String>(exampleUpdatePayload) { it.value == exampleQuery.value }
28+
verify { subjectEmitter.emit(ExampleQuery::class.java, match { it.test(exampleQuery) }, exampleUpdatePayload) }
29+
}
30+
}

0 commit comments

Comments
 (0)