mirror of
https://github.com/pcvolkmer/onco-analytics-monitor.git
synced 2025-07-03 01:02:55 +00:00
test: add tests for StatisticsController
This commit is contained in:
@ -0,0 +1,78 @@
|
|||||||
|
package dev.pcvolkmer.oncoanalytics.monitor.web
|
||||||
|
|
||||||
|
import dev.pcvolkmer.oncoanalytics.monitor.allKeys
|
||||||
|
import dev.pcvolkmer.oncoanalytics.monitor.conditions.Condition
|
||||||
|
import dev.pcvolkmer.oncoanalytics.monitor.conditions.ConditionId
|
||||||
|
import dev.pcvolkmer.oncoanalytics.monitor.conditions.ConditionRepository
|
||||||
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest
|
||||||
|
import org.junit.jupiter.params.provider.Arguments
|
||||||
|
import org.junit.jupiter.params.provider.MethodSource
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension
|
||||||
|
import org.mockito.junit.jupiter.MockitoSettings
|
||||||
|
import org.mockito.kotlin.whenever
|
||||||
|
import org.mockito.quality.Strictness
|
||||||
|
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 java.util.stream.Stream
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension::class, SpringExtension::class)
|
||||||
|
@WebFluxTest
|
||||||
|
@MockitoSettings(strictness = Strictness.LENIENT)
|
||||||
|
class StatisticsControllerTest {
|
||||||
|
|
||||||
|
private lateinit var webClient: WebTestClient
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
fun setup(
|
||||||
|
@Mock(name = "obdsXmlConditionRepository") obdsXmlConditionRepository: ConditionRepository,
|
||||||
|
@Mock(name = "fhirObdsConditionRepository") fhirObdsConditionRepository: ConditionRepository,
|
||||||
|
@Mock(name = "fhirPseudonymizedConditionRepository") fhirPseudonymizedConditionRepository: ConditionRepository,
|
||||||
|
) {
|
||||||
|
val controller = StatisticsController(
|
||||||
|
obdsXmlConditionRepository,
|
||||||
|
fhirObdsConditionRepository,
|
||||||
|
fhirPseudonymizedConditionRepository
|
||||||
|
)
|
||||||
|
this.webClient = WebTestClient.bindToController(controller).build()
|
||||||
|
|
||||||
|
whenever(obdsXmlConditionRepository.findAll())
|
||||||
|
.thenReturn(listOf(Condition(ConditionId("TESTOBDSXML"), "C00.9", 1)))
|
||||||
|
whenever(fhirObdsConditionRepository.findAll())
|
||||||
|
.thenReturn(listOf(Condition(ConditionId("TESTFHIROBDS"), "C43.9")))
|
||||||
|
whenever(fhirPseudonymizedConditionRepository.findAll())
|
||||||
|
.thenReturn(listOf(Condition(ConditionId("TESTFHIRPSEUDO"), "F79.9")))
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest(name = "Test request to /statistics/{0}")
|
||||||
|
@MethodSource("testDataSource")
|
||||||
|
fun shouldGetObdsXmlStatistics(statisticsName: String, entryName: String, entryIndex: Int) {
|
||||||
|
webClient
|
||||||
|
.get().uri("/statistics/{0}", statisticsName)
|
||||||
|
.accept(MediaType.APPLICATION_JSON)
|
||||||
|
.exchange()
|
||||||
|
.expectAll(
|
||||||
|
{ spec -> spec.expectStatus().isOk },
|
||||||
|
{ spec -> spec.expectHeader().contentType(MediaType.APPLICATION_JSON) },
|
||||||
|
{ spec -> spec.expectBody().jsonPath("$.name").isEqualTo(statisticsName) },
|
||||||
|
{ spec -> spec.expectBody().jsonPath("$.entries[%d].name", entryIndex).isEqualTo(entryName) },
|
||||||
|
{ spec -> spec.expectBody().jsonPath("$.entries[%d].count", entryIndex).isEqualTo(1) }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@JvmStatic
|
||||||
|
fun testDataSource(): Stream<Arguments> {
|
||||||
|
return Stream.of(
|
||||||
|
Arguments.of("obdsxml", "C00-C14", allKeys.indexOf("C00-C14")),
|
||||||
|
Arguments.of("fhirobds", "C43", allKeys.indexOf("C43")),
|
||||||
|
Arguments.of("fhirpseudonymized", "Other", allKeys.indexOf("Other"))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user