From 0c7439ef92b45ff8ec4261db50633f255bef69ba Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Thu, 8 Aug 2024 10:14:41 +0200 Subject: [PATCH] test: add EventStreamControllerTest --- .../monitor/web/EventStreamControllerTest.kt | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/test/kotlin/dev/pcvolkmer/oncoanalytics/monitor/web/EventStreamControllerTest.kt diff --git a/src/test/kotlin/dev/pcvolkmer/oncoanalytics/monitor/web/EventStreamControllerTest.kt b/src/test/kotlin/dev/pcvolkmer/oncoanalytics/monitor/web/EventStreamControllerTest.kt new file mode 100644 index 0000000..37f4da0 --- /dev/null +++ b/src/test/kotlin/dev/pcvolkmer/oncoanalytics/monitor/web/EventStreamControllerTest.kt @@ -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() + + StepVerifier.create(result.responseBody) + .expectNextCount(1) + .expectTimeout(3.seconds.toJavaDuration()) + .verify() + } + +} \ No newline at end of file