diff --git a/build.gradle.kts b/build.gradle.kts index 43bedc4..c628bc9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,22 +1,17 @@ plugins { - id("io.spring.dependency-management") version "1.1.6" - id("org.springframework.boot") version "3.2.10" + alias(libs.plugins.kotlin.jpa) + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.kotlin.spring) + alias(libs.plugins.spring.boot) + alias(libs.plugins.spring.dependencyManagement) jacoco - - kotlin("jvm") version "2.0.20" - kotlin("plugin.jpa") version "1.9.23" - kotlin("plugin.serialization") version "2.0.20" - kotlin("plugin.spring") version "1.9.23" } group = "com.github.dannecron.demo" version = "single-version" -val ktorVersion: String by project -val springVersion: String by project -val testContainersVersion: String by project - java { sourceCompatibility = JavaVersion.VERSION_17 } @@ -26,46 +21,44 @@ repositories { } dependencies { - api("org.springframework.boot:spring-boot-starter-data-jdbc:$springVersion") + runtimeOnly(libs.micrometer.registry.prometheus) - implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.4") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.4") - implementation("io.github.optimumcode:json-schema-validator:0.2.3") - implementation("io.micrometer:micrometer-tracing-bridge-otel") - implementation("io.opentelemetry:opentelemetry-exporter-otlp") - implementation("net.logstash.logback:logstash-logback-encoder:8.0") - implementation("io.ktor:ktor-client-core:$ktorVersion") - implementation("io.ktor:ktor-client-cio:$ktorVersion") - implementation("org.flywaydb:flyway-core:9.22.3") - implementation("org.jetbrains.kotlin:kotlin-reflect:2.0.20") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3") - implementation("org.postgresql:postgresql:42.6.2") - implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0") - implementation("org.springframework:spring-aspects") - implementation("org.springframework.boot:spring-boot-starter-actuator:$springVersion") - implementation("org.springframework.boot:spring-boot-starter-mustache:$springVersion") - implementation("org.springframework.boot:spring-boot-starter-validation:$springVersion") - implementation("org.springframework.boot:spring-boot-starter-web:$springVersion") - implementation("org.springframework.kafka:spring-kafka:3.1.3") + implementation(libs.bundles.tracing) + implementation(libs.flyway.core) + implementation(libs.jackson.datatype.jsr) + implementation(libs.jackson.module.kotlin) + implementation(libs.json.schema.validator) + implementation(libs.kotlin.reflect) + implementation(libs.kotlinx.serialization.json) + implementation(libs.ktor.client.cio) + implementation(libs.ktor.client.core) + implementation(libs.logback.encoder) + implementation(libs.postgres) + implementation(libs.spring.aspects) + implementation(libs.spring.boot.starter.actuator) + implementation(libs.spring.boot.starter.jdbc) + implementation(libs.spring.boot.starter.mustache) + implementation(libs.spring.boot.starter.validation) + implementation(libs.spring.boot.starter.web) + implementation(libs.spring.doc.openapi.starter) + implementation(libs.spring.kafka) - runtimeOnly("io.micrometer:micrometer-registry-prometheus") + testImplementation(libs.kotlin.test.junit) + testImplementation(libs.mockito.kotlin) + testImplementation(libs.spring.boot.starter.test) + testImplementation(libs.spring.kafka.test) + testImplementation(libs.testcontainers) + testImplementation(libs.testcontainers.junit.jupiter) + testImplementation(libs.testcontainers.postgresql) + testImplementation(libs.ktor.client.mock) - developmentOnly("org.springframework.boot:spring-boot-devtools") - - testImplementation("org.jetbrains.kotlin:kotlin-test-junit5:2.0.20") - testImplementation("org.mockito.kotlin:mockito-kotlin:5.4.0") - testImplementation("org.springframework.boot:spring-boot-starter-test:$springVersion") - testImplementation("org.springframework.kafka:spring-kafka-test:3.1.3") - testImplementation("org.testcontainers:junit-jupiter:$testContainersVersion") - testImplementation("org.testcontainers:testcontainers:$testContainersVersion") - testImplementation("org.testcontainers:postgresql:$testContainersVersion") - testImplementation("io.ktor:ktor-client-mock:$ktorVersion") + developmentOnly(libs.spring.boot.devtools) } kotlin { compilerOptions { freeCompilerArgs.addAll("-Xjsr305=strict") - apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_7) + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_1) } } diff --git a/gradle.properties b/gradle.properties deleted file mode 100644 index cf46779..0000000 --- a/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -ktorVersion=3.0.0 -springVersion=3.2.10 -testContainersVersion=1.19.7 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..09ba780 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,50 @@ +[versions] +jackson = "2.15.4" +kotlin = "2.1.10" +ktor = "3.0.0" +spring-boot = "3.2.10" +spring-kafka = "3.1.3" +testcontainers = "1.19.7" + +[libraries] +flyway-core = { module = "org.flywaydb:flyway-core", version = "9.22.3" } +jackson-datatype-jsr = { module = "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", version.ref = "jackson" } +jackson-module-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin", version.ref = "jackson" } +json-schema-validator = { module = "io.github.optimumcode:json-schema-validator", version = "0.2.3"} +kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } +kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit5", version.ref = "kotlin" } +kotlinx-serialization-json = "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3" +ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor"} +ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor"} +ktor-client-mock = { module = "io.ktor:ktor-client-mock", version.ref = "ktor"} +logback-encoder = { module = "net.logstash.logback:logstash-logback-encoder", version = "8.0" } +micrometer-bridge-otel = { module = "io.micrometer:micrometer-tracing-bridge-otel"} +micrometer-registry-prometheus = { module = "io.micrometer:micrometer-registry-prometheus" } +mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "5.4.0" } +otel-exporter = { module = "io.opentelemetry:opentelemetry-exporter-otlp" } +postgres = { module = "org.postgresql:postgresql", version = "42.6.2" } +spring-aspects = { module = "org.springframework:spring-aspects" } +spring-boot-devtools = { module = "org.springframework.boot:spring-boot-devtools" } +spring-boot-starter-actuator = { module = "org.springframework.boot:spring-boot-starter-actuator", version.ref = "spring-boot" } +spring-boot-starter-jdbc = { module = "org.springframework.boot:spring-boot-starter-data-jdbc", version.ref = "spring-boot"} +spring-boot-starter-mustache = { module = "org.springframework.boot:spring-boot-starter-mustache", version.ref = "spring-boot" } +spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test", version.ref = "spring-boot" } +spring-boot-starter-validation = { module = "org.springframework.boot:spring-boot-starter-validation", version.ref = "spring-boot" } +spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web", version.ref = "spring-boot" } +spring-doc-openapi-starter = "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0" +spring-kafka = { module = "org.springframework.kafka:spring-kafka", version.ref = "spring-kafka"} +spring-kafka-test = { module = "org.springframework.kafka:spring-kafka-test", version.ref = "spring-kafka"} +testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers"} +testcontainers-junit-jupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers"} +testcontainers-postgresql = { module = "org.testcontainers:postgresql", version.ref = "testcontainers"} + +[bundles] +tracing = ["micrometer-bridge-otel", "otel-exporter"] + +[plugins] +kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +kotlin-jpa = { id = "org.jetbrains.kotlin.plugin.jpa", version.ref = "kotlin" } +kotlin-spring = { id = "org.jetbrains.kotlin.plugin.spring", version.ref = "kotlin" } +spring-boot = { id = "org.springframework.boot", version.ref = "spring-boot" } +spring-dependencyManagement = { id = "io.spring.dependency-management", version = "1.1.6"} diff --git a/src/test/kotlin/com/github/dannecron/demo/services/kafka/ConsumerKfkTest.kt b/src/test/kotlin/com/github/dannecron/demo/services/kafka/ConsumerKfkTest.kt index eb2b4e8..fa42291 100644 --- a/src/test/kotlin/com/github/dannecron/demo/services/kafka/ConsumerKfkTest.kt +++ b/src/test/kotlin/com/github/dannecron/demo/services/kafka/ConsumerKfkTest.kt @@ -7,6 +7,7 @@ import io.micrometer.core.instrument.MeterRegistry import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import org.mockito.kotlin.after +import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.verify import org.mockito.kotlin.whenever @@ -22,7 +23,7 @@ import org.springframework.test.annotation.DirtiesContext import org.springframework.test.context.ActiveProfiles import java.time.OffsetDateTime import java.time.format.DateTimeFormatter -import java.util.* +import java.util.UUID import kotlin.test.Test import kotlin.test.assertEquals @@ -34,10 +35,14 @@ import kotlin.test.assertEquals partitions = 1, ) @DirtiesContext -class ConsumerKfkTest( - @Autowired private val kafkaTemplate: KafkaTemplate, - @Autowired private val metricRegistry: MeterRegistry, -) { +class ConsumerKfkTest { + + @Autowired + private lateinit var kafkaTemplate: KafkaTemplate + + @Autowired + private lateinit var metricRegistry: MeterRegistry + @MockBean private lateinit var cityService: CityService @@ -54,7 +59,7 @@ class ConsumerKfkTest( deletedAt = null, ) - whenever(cityService.create(cityCreateDto)) doReturn City( + whenever(cityService.create(any())) doReturn City( id = 123, guid = cityGuid, name = cityName,