-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAxonServerContainerKotlinITest.kt
70 lines (57 loc) · 2.39 KB
/
AxonServerContainerKotlinITest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package io.holixon.axon.testcontainer.kotlin
import io.holixon.axon.testcontainer.AxonServerContainer
import io.holixon.axon.testcontainer.kotlin.KotlinTestApplication
import io.holixon.axon.testcontainer.spring.addDynamicProperties
import mu.KLogging
import org.assertj.core.api.Assertions.assertThat
import org.axonframework.commandhandling.gateway.CommandGateway
import org.axonframework.messaging.responsetypes.ResponseTypes
import org.axonframework.queryhandling.QueryGateway
import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment
import org.springframework.test.context.DynamicPropertyRegistry
import org.springframework.test.context.DynamicPropertySource
import org.testcontainers.junit.jupiter.Container
import org.testcontainers.junit.jupiter.Testcontainers
import java.util.*
@SpringBootTest(classes = [KotlinTestApplication::class], webEnvironment = WebEnvironment.NONE)
@Testcontainers
@Disabled("seems to be an issue to run kotlin and java test app in the same scope on github")
internal class AxonServerContainerKotlinITest {
companion object : KLogging() {
@Container
val axon = AxonServerContainer.builder()
.enableDevMode()
.build().apply {
logger.info { "------ $this" }
}
@JvmStatic
@DynamicPropertySource
fun axonProperties(registry: DynamicPropertyRegistry) = axon.addDynamicProperties(registry)
@JvmStatic
@AfterAll
internal fun tearDown() {
axon.stop()
}
}
@Autowired
private lateinit var commandGateway: CommandGateway
@Autowired
private lateinit var queryGateway: QueryGateway
@Test
fun `start axon server, run cmd, evt and query`() {
val accountId = UUID.randomUUID().toString()
commandGateway.sendAndWait<Any>(KotlinTestApplication.CreateBankAccountCommand(accountId = accountId, initialBalance = 100))
val account = queryGateway.query(
KotlinTestApplication.FindBankAccountById(accountId),
ResponseTypes.optionalInstanceOf(KotlinTestApplication.BankAccountDto::class.java)
).join().orElseThrow()
assertThat(account.accountId).isEqualTo(accountId)
assertThat(account.balance).isEqualTo(100)
}
}