add test-library and ktlint

This commit is contained in:
Michael Hoennig
2026-06-09 13:24:05 +02:00
parent 7b01aaa9a2
commit 923048781b
5 changed files with 75 additions and 5 deletions
+17
View File
@@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins { plugins {
id("org.springframework.boot") version "3.3.4" id("org.springframework.boot") version "3.3.4"
id("io.spring.dependency-management") version "1.1.6" id("io.spring.dependency-management") version "1.1.6"
id("org.jlleitschuh.gradle.ktlint") version "12.1.1"
kotlin("jvm") version "1.9.25" kotlin("jvm") version "1.9.25"
kotlin("plugin.spring") version "1.9.25" kotlin("plugin.spring") version "1.9.25"
} }
@@ -26,6 +27,22 @@ dependencies {
implementation("info.picocli:picocli-spring-boot-starter:4.7.6") implementation("info.picocli:picocli-spring-boot-starter:4.7.6")
testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.boot:spring-boot-starter-test")
// Kotest
testImplementation("io.kotest:kotest-runner-junit5:5.9.1")
testImplementation("io.kotest:kotest-assertions-core:5.9.1")
testImplementation("io.kotest.extensions:kotest-extensions-spring:1.3.0")
// MockK
testImplementation("io.mockk:mockk:1.13.11")
testImplementation("com.ninja-squad:springmockk:4.0.2")
// WireMock
testImplementation("org.wiremock.integrations:wiremock-spring-boot:3.1.0")
// Testcontainers (versions managed by Spring Boot BOM)
testImplementation("org.springframework.boot:spring-boot-testcontainers")
testImplementation("org.testcontainers:testcontainers")
} }
tasks.withType<KotlinCompile> { tasks.withType<KotlinCompile> {
@@ -1,22 +1,32 @@
package de.hoennig.gittally package de.hoennig.gittally
import org.springframework.boot.CommandLineRunner import org.springframework.boot.CommandLineRunner
import org.springframework.boot.ExitCodeGenerator
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication import org.springframework.boot.runApplication
import org.springframework.stereotype.Component
import picocli.CommandLine import picocli.CommandLine
import picocli.CommandLine.IFactory import picocli.CommandLine.IFactory
import kotlin.system.exitProcess import kotlin.system.exitProcess
@SpringBootApplication @SpringBootApplication
class GitTallyApplication( class GitTallyApplication
@Component
class CliRunner(
private val factory: IFactory, private val factory: IFactory,
private val rootCommand: GitTallyCommand, private val rootCommand: GitTallyCommand,
) : CommandLineRunner { ) : CommandLineRunner, ExitCodeGenerator {
private var exitCode = 0
override fun run(vararg args: String) { override fun run(vararg args: String) {
exitProcess(CommandLine(rootCommand, factory).execute(*args)) exitCode = CommandLine(rootCommand, factory).execute(*args)
} }
override fun getExitCode() = exitCode
} }
fun main(args: Array<String>) { fun main(args: Array<String>) {
runApplication<GitTallyApplication>(*args) exitProcess(SpringApplication.exit(runApplication<GitTallyApplication>(*args)))
} }
@@ -11,7 +11,6 @@ import picocli.CommandLine.Option
mixinStandardHelpOptions = true, mixinStandardHelpOptions = true,
) )
class ConfigPrintCommand : Runnable { class ConfigPrintCommand : Runnable {
@Option(names = ["--full"], description = ["Include all defaults"]) @Option(names = ["--full"], description = ["Include all defaults"])
var full: Boolean = false var full: Boolean = false
@@ -0,0 +1,36 @@
package de.hoennig.gittally
import de.hoennig.gittally.commands.ConfigPrintCommand
import de.hoennig.gittally.commands.InitCommand
import de.hoennig.gittally.commands.ServerCommand
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.shouldNotBe
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
@SpringBootTest
class ApplicationContextTest : FunSpec() {
@Autowired
lateinit var rootCommand: GitTallyCommand
@Autowired
lateinit var initCommand: InitCommand
@Autowired
lateinit var serverCommand: ServerCommand
@Autowired
lateinit var configPrintCommand: ConfigPrintCommand
init {
test("application context loads") {
rootCommand shouldNotBe null
}
test("all subcommands are wired") {
initCommand shouldNotBe null
serverCommand shouldNotBe null
configPrintCommand shouldNotBe null
}
}
}
@@ -0,0 +1,8 @@
package de.hoennig.gittally
import io.kotest.core.config.AbstractProjectConfig
import io.kotest.extensions.spring.SpringExtension
object KotestProjectConfig : AbstractProjectConfig() {
override fun extensions() = listOf(SpringExtension)
}