From f3033f4149366578ea6a825713a0779bde7b47c0 Mon Sep 17 00:00:00 2001 From: Piotr Krzeminski Date: Mon, 24 Feb 2025 08:12:04 +0100 Subject: [PATCH 1/2] test(server): add tests for Maven metadata building --- .../mavenbinding/MavenMetadataBuilding.kt | 8 +- .../mavenbinding/MavenMetadataBuildingTest.kt | 94 +++++++++++++++++++ 2 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 maven-binding-builder/src/test/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuildingTest.kt diff --git a/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuilding.kt b/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuilding.kt index 5330be207..7c8306b85 100644 --- a/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuilding.kt +++ b/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuilding.kt @@ -2,11 +2,15 @@ package io.github.typesafegithub.workflows.mavenbinding import io.github.typesafegithub.workflows.actionbindinggenerator.domain.ActionCoords import io.github.typesafegithub.workflows.shared.internal.fetchAvailableVersions +import io.github.typesafegithub.workflows.shared.internal.model.Version import java.time.format.DateTimeFormatter -internal suspend fun ActionCoords.buildMavenMetadataFile(githubToken: String): String? { +internal suspend fun ActionCoords.buildMavenMetadataFile( + githubToken: String, + fetchAvailableVersions: suspend (owner: String, name: String, githubToken: String?) -> List = ::fetchAvailableVersions, +): String? { val availableMajorVersions = - fetchAvailableVersions(owner = owner, name = name, githubToken = githubToken) + fetchAvailableVersions(owner, name, githubToken) .filter { it.isMajorVersion() } val newest = availableMajorVersions.maxOrNull() ?: return null val lastUpdated = diff --git a/maven-binding-builder/src/test/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuildingTest.kt b/maven-binding-builder/src/test/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuildingTest.kt new file mode 100644 index 000000000..2fe123f25 --- /dev/null +++ b/maven-binding-builder/src/test/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuildingTest.kt @@ -0,0 +1,94 @@ +package io.github.typesafegithub.workflows.mavenbinding + +import io.github.typesafegithub.workflows.actionbindinggenerator.domain.ActionCoords +import io.github.typesafegithub.workflows.shared.internal.model.Version +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.nulls.shouldBeNull +import io.kotest.matchers.shouldBe +import java.time.ZonedDateTime + +class MavenMetadataBuildingTest : + FunSpec({ + val actionCoords = + ActionCoords( + owner = "owner", + name = "name", + version = "irrelevant", + ) + + test("various kinds of versions available") { + // Given + val fetchAvailableVersions: suspend (String, String, String?) -> List = { owner, name, _ -> + listOf( + Version(version = "v3-beta", dateProvider = { ZonedDateTime.parse("2024-07-01T00:00:00Z") }), + Version(version = "v2", dateProvider = { ZonedDateTime.parse("2024-05-01T00:00:00Z") }), + Version(version = "v1", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }), + Version(version = "v1.1", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }), + Version(version = "v1.1.0", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }), + Version(version = "v1.0.1", dateProvider = { ZonedDateTime.parse("2024-03-05T00:00:00Z") }), + Version(version = "v1.0", dateProvider = { ZonedDateTime.parse("2024-03-01T00:00:00Z") }), + Version(version = "v1.0.0", dateProvider = { ZonedDateTime.parse("2024-03-01T00:00:00Z") }), + ) + } + + val xml = + actionCoords.buildMavenMetadataFile( + githubToken = "SOME_TOKEN", + fetchAvailableVersions = fetchAvailableVersions, + ) + + xml shouldBe + """ + + + owner + name + + v2 + v2 + + v2 + v1 + + 20240501000000 + + + """.trimIndent() + } + + test("no major versions") { + // Given + val fetchAvailableVersions: suspend (String, String, String?) -> List = { owner, name, _ -> + listOf( + Version(version = "v1.1", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }), + Version(version = "v1.1.0", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }), + Version(version = "v1.0.1", dateProvider = { ZonedDateTime.parse("2024-03-05T00:00:00Z") }), + Version(version = "v1.0", dateProvider = { ZonedDateTime.parse("2024-03-01T00:00:00Z") }), + Version(version = "v1.0.0", dateProvider = { ZonedDateTime.parse("2024-03-01T00:00:00Z") }), + ) + } + + val xml = + actionCoords.buildMavenMetadataFile( + githubToken = "SOME_TOKEN", + fetchAvailableVersions = fetchAvailableVersions, + ) + + xml.shouldBeNull() + } + + test("no versions available") { + // Given + val fetchAvailableVersions: suspend (String, String, String?) -> List = { owner, name, _ -> + emptyList() + } + + val xml = + actionCoords.buildMavenMetadataFile( + githubToken = "SOME_TOKEN", + fetchAvailableVersions = fetchAvailableVersions, + ) + + xml.shouldBeNull() + } + }) From 76a758909200041477568509d65fe7071a14d38b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Krzemi=C5=84ski?= <3110813+krzema12@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:05:08 +0100 Subject: [PATCH 2/2] Remove names for unused params MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Björn Kautler --- .../workflows/mavenbinding/MavenMetadataBuildingTest.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/maven-binding-builder/src/test/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuildingTest.kt b/maven-binding-builder/src/test/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuildingTest.kt index 2fe123f25..3b4eea469 100644 --- a/maven-binding-builder/src/test/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuildingTest.kt +++ b/maven-binding-builder/src/test/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuildingTest.kt @@ -18,7 +18,7 @@ class MavenMetadataBuildingTest : test("various kinds of versions available") { // Given - val fetchAvailableVersions: suspend (String, String, String?) -> List = { owner, name, _ -> + val fetchAvailableVersions: suspend (String, String, String?) -> List = { _, _, _ -> listOf( Version(version = "v3-beta", dateProvider = { ZonedDateTime.parse("2024-07-01T00:00:00Z") }), Version(version = "v2", dateProvider = { ZonedDateTime.parse("2024-05-01T00:00:00Z") }), @@ -58,7 +58,7 @@ class MavenMetadataBuildingTest : test("no major versions") { // Given - val fetchAvailableVersions: suspend (String, String, String?) -> List = { owner, name, _ -> + val fetchAvailableVersions: suspend (String, String, String?) -> List = { _, _, _ -> listOf( Version(version = "v1.1", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }), Version(version = "v1.1.0", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }), @@ -79,7 +79,7 @@ class MavenMetadataBuildingTest : test("no versions available") { // Given - val fetchAvailableVersions: suspend (String, String, String?) -> List = { owner, name, _ -> + val fetchAvailableVersions: suspend (String, String, String?) -> List = { _, _, _ -> emptyList() }