From 7b1d7c5dc9d93a4bb7b4304d8902398d965a137a Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Sun, 17 Aug 2025 15:01:53 +0200 Subject: [PATCH] basic test for builds --- .../kotlin/alfred/web/core/build/Builds.kt | 21 +++----- .../alfred/web/core/build/BuildsTest.kt | 52 +++++++++++++++++++ .../home-1/builds/maximum.properties | 12 +++++ .../home-1/builds/minimal.properties | 3 ++ 4 files changed, 74 insertions(+), 14 deletions(-) create mode 100644 src/test/kotlin/alfred/web/core/build/BuildsTest.kt create mode 100644 src/test/resources/home-1/builds/maximum.properties create mode 100644 src/test/resources/home-1/builds/minimal.properties diff --git a/src/main/kotlin/alfred/web/core/build/Builds.kt b/src/main/kotlin/alfred/web/core/build/Builds.kt index c36b155..9daff05 100644 --- a/src/main/kotlin/alfred/web/core/build/Builds.kt +++ b/src/main/kotlin/alfred/web/core/build/Builds.kt @@ -7,18 +7,11 @@ import org.springframework.beans.factory.annotation.Value import org.springframework.http.HttpStatus import org.springframework.stereotype.Service import org.springframework.web.bind.annotation.ResponseStatus -import java.lang.RuntimeException import java.nio.file.Files.createFile import java.nio.file.Paths import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.* -import kotlin.collections.associate -import kotlin.collections.filter -import kotlin.io.inputStream -import kotlin.jvm.java -import kotlin.text.toLong -import kotlin.text.uppercase @Service class Builds( @@ -65,9 +58,9 @@ class Builds( private fun Properties.toBuildConfig(env: Map) = BuildConfig( - user = getProperty("user"), - workspace = getProperty("workspace"), - apikey = getProperty("apikey") ?: "", + user = getProperty("user") ?: throw MissingProperty("user"), + workspace = getProperty("workspace") ?: throw MissingProperty("workspace"), + apikey = getProperty("apikey") ?: throw MissingProperty("apikey"), script = getProperty("script"), gitRepo = getProperty("git.repo.url"), gitCloneTimeout = getProperty("git.close.timeout")?.toLong() ?: 30L, @@ -75,10 +68,10 @@ private fun Properties.toBuildConfig(env: Map) = ) @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Unknown Build Id") -class UnknownBuild(val build: BuildId) : RuntimeException() { - override fun toString() = - "unknown build: $build" -} +class UnknownBuild(build: BuildId) : RuntimeException("unknown build: $build") + +@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR, reason = "Missing Build property") +class MissingProperty(key: String) : RuntimeException("missing property $key") data class BuildConfig( val user: String, diff --git a/src/test/kotlin/alfred/web/core/build/BuildsTest.kt b/src/test/kotlin/alfred/web/core/build/BuildsTest.kt new file mode 100644 index 0000000..15cef2f --- /dev/null +++ b/src/test/kotlin/alfred/web/core/build/BuildsTest.kt @@ -0,0 +1,52 @@ +package alfred.web.core.build + +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows +import java.nio.file.Paths +import kotlin.test.assertEquals + +class BuildsTest { + + @Test + fun `reads minimal build config`() { + val cfg = builds().buildConfig("minimal") + + assertEquals("Gandalf", cfg.user) + assertEquals("Mellon", cfg.apikey) + assertEquals("/tmp", cfg.workspace) + assertEquals(30L, cfg.gitCloneTimeout, "Default value for clone timeout expected") + assertEquals(0, cfg.env.count(), "No env entries expected") + } + + @Test + fun `unknown builds are reported`() { + val builds = builds() + + assertThrows { + builds.buildConfig("unknown") + } + } + + @Test + fun `reads maximum build config`() { + val cfg = builds().buildConfig("maximum") + + assertEquals("Merri", cfg.user) + assertEquals("Shire", cfg.apikey) + assertEquals("/tmp/far-away", cfg.workspace) + assertEquals("echo Breakfast", cfg.script) + assertEquals("https://something.nowhere", cfg.gitRepo) + assertEquals(10, cfg.gitCloneTimeout) + assertEquals(1, cfg.env.count()) + assertEquals("env1-value", cfg.env["ENV1"]) + } + + private fun builds() = + Builds( + Paths.get("") + .toAbsolutePath() + .resolve("src/test/resources/home-1") + .toString() + ) + +} diff --git a/src/test/resources/home-1/builds/maximum.properties b/src/test/resources/home-1/builds/maximum.properties new file mode 100644 index 0000000..dd6df38 --- /dev/null +++ b/src/test/resources/home-1/builds/maximum.properties @@ -0,0 +1,12 @@ +user=Merri +workspace=/tmp/far-away +apikey=Shire + +script=echo Breakfast + +git.repo.url=https://something.nowhere +git.close.timeout=10 + +ignored=true + +ENV1=env1-value diff --git a/src/test/resources/home-1/builds/minimal.properties b/src/test/resources/home-1/builds/minimal.properties new file mode 100644 index 0000000..b4c49fb --- /dev/null +++ b/src/test/resources/home-1/builds/minimal.properties @@ -0,0 +1,3 @@ +user=Gandalf +workspace=/tmp +apikey=Mellon