-
Notifications
You must be signed in to change notification settings - Fork 0
/
ContainerKafkaMoveReceiverTest.kt
51 lines (43 loc) · 1.79 KB
/
ContainerKafkaMoveReceiverTest.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
package de.igorakkerman.demo.kafka.kafka.container
import com.ninjasquad.springmockk.MockkBean
import de.igorakkerman.demo.kafka.application.GameService
import de.igorakkerman.demo.kafka.application.Move
import de.igorakkerman.demo.kafka.kafka.KafkaMoveReceiver
import io.mockk.verify
import org.apache.kafka.clients.producer.ProducerRecord
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.context.annotation.Import
import org.springframework.kafka.core.ProducerFactory
import org.springframework.test.annotation.DirtiesContext
import org.springframework.test.context.junit.jupiter.EnabledIf
import java.time.LocalDateTime
@SpringBootTest(classes = [KafkaMoveReceiver::class])
@EnabledIf(expression = "\${test.container.enabled:false}", loadContext = true)
@EnableAutoConfiguration
@Import(TestContainersConfiguration::class)
@DirtiesContext
internal class ContainerKafkaMoveReceiverTest(
@Autowired
private val producerFactory: ProducerFactory<String, Move>,
@Value("\${spring.kafka.template.default-topic}")
private val topic: String,
) {
@MockkBean(relaxUnitFun = true)
private lateinit var gameService: GameService
@Test
internal fun `should be reading a message`() {
// given
val move = Move("Cinka", 321, LocalDateTime.now().toString())
val producer = producerFactory.createProducer()
// GameService mock is relaxed
// when
producer.send(ProducerRecord(topic, move))
producer.flush()
// then
verify(timeout = 3000) { gameService.acceptMove(move) }
}
}