1
0
mirror of https://github.com/pcvolkmer/onco-analytics-monitor.git synced 2025-04-19 19:16:52 +00:00

test: add EventStreamControllerTest

This commit is contained in:
Paul-Christian Volkmer 2024-08-08 10:14:41 +02:00
parent ce73d4edd7
commit 0c7439ef92

View File

@ -0,0 +1,49 @@
package dev.pcvolkmer.oncoanalytics.monitor.web
import dev.pcvolkmer.oncoanalytics.monitor.StatisticsSink
import dev.pcvolkmer.oncoanalytics.monitor.conditions.Statistics
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest
import org.springframework.http.MediaType
import org.springframework.test.context.junit.jupiter.SpringExtension
import org.springframework.test.web.reactive.server.WebTestClient
import org.springframework.test.web.reactive.server.returnResult
import reactor.core.publisher.Sinks
import reactor.test.StepVerifier
import kotlin.time.Duration.Companion.seconds
import kotlin.time.toJavaDuration
@ExtendWith(SpringExtension::class)
@WebFluxTest
class EventStreamControllerTest {
private lateinit var webClient: WebTestClient
private lateinit var statisticsEventProducer: StatisticsSink
@BeforeEach
fun setup() {
this.statisticsEventProducer = Sinks.many().multicast().onBackpressureBuffer(10)
val controller = EventStreamController(this.statisticsEventProducer)
this.webClient = WebTestClient.bindToController(controller).build()
}
@Test
fun shouldSendEvents() {
this.statisticsEventProducer.emitNext(Statistics("test", emptyList())) { _, _ -> false }
val result = webClient
.get().uri("/events")
.accept(MediaType.TEXT_EVENT_STREAM)
.exchange()
.expectStatus().isOk
.returnResult<Statistics>()
StepVerifier.create(result.responseBody)
.expectNextCount(1)
.expectTimeout(3.seconds.toJavaDuration())
.verify()
}
}