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..3b4eea469 --- /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 = { _, _, _ -> + 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 = { _, _, _ -> + 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 = { _, _, _ -> + emptyList() + } + + val xml = + actionCoords.buildMavenMetadataFile( + githubToken = "SOME_TOKEN", + fetchAvailableVersions = fetchAvailableVersions, + ) + + xml.shouldBeNull() + } + })