diff --git a/build.gradle.kts b/build.gradle.kts index af12396..1590a21 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,7 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - plugins { id("org.springframework.boot") version "3.2.4" id("io.spring.dependency-management") version "1.1.4" + jacoco kotlin("jvm") version "2.0.20" kotlin("plugin.jpa") version "1.9.23" kotlin("plugin.serialization") version "2.0.20" @@ -34,13 +33,22 @@ dependencies { testImplementation("org.springframework.boot:spring-boot-starter-test") } -tasks.withType { - kotlinOptions { - freeCompilerArgs += "-Xjsr305=strict" - jvmTarget = "17" +kotlin { + compilerOptions { + freeCompilerArgs.addAll("-Xjsr305=strict") + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_7) } } tasks.withType { useJUnitPlatform() } + +tasks.test { + finalizedBy(tasks.jacocoTestReport) // report is always generated after tests run +} + +tasks.jacocoTestReport { + dependsOn(tasks.test) // tests are required to run before generating the report +} + diff --git a/src/main/kotlin/com/example/demo/controllers/GreetingController.kt b/src/main/kotlin/com/example/demo/controllers/GreetingController.kt index 6adb4ea..c1ccdf6 100644 --- a/src/main/kotlin/com/example/demo/controllers/GreetingController.kt +++ b/src/main/kotlin/com/example/demo/controllers/GreetingController.kt @@ -2,6 +2,7 @@ package com.example.demo.controllers import com.example.demo.provider.html.renderProductTable import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.ResponseBody import org.springframework.web.bind.annotation.RestController @RestController @@ -11,7 +12,8 @@ class GreetingController { return "Hello World!" } - @GetMapping("/example/html") + @GetMapping(value = ["/example/html"], produces = ["text/html"]) + @ResponseBody fun exampleHtml(): String { return renderProductTable() } diff --git a/src/test/kotlin/com/example/demo/controllers/GreetingControllerTest.kt b/src/test/kotlin/com/example/demo/controllers/GreetingControllerTest.kt new file mode 100644 index 0000000..919267d --- /dev/null +++ b/src/test/kotlin/com/example/demo/controllers/GreetingControllerTest.kt @@ -0,0 +1,30 @@ +package com.example.demo.controllers + +import org.hamcrest.core.StringContains +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get +import org.springframework.test.web.servlet.result.MockMvcResultMatchers.content +import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status +import kotlin.test.Test + +@WebMvcTest(GreetingController::class) +class GreetingControllerTest(@Autowired val mockMvc: MockMvc) { + + @Test + fun greetings_shouldSeeGreetingMessage() { + mockMvc.perform(get("/greeting")) + .andExpect(status().isOk) + .andExpect(content().contentType("text/plain;charset=UTF-8")) + .andExpect(content().string("Hello World!")) + } + + @Test + fun exampleHtml_shouldSeeRenderedHtml() { + mockMvc.perform(get("/example/html")) + .andExpect(status().isOk) + .andExpect(content().contentType("text/html;charset=UTF-8")) + .andExpect(content().string(StringContains("Product"))) + } +}