Skip to content

Commit bb270d4

Browse files
krzema12Vampire
andauthored
test(server): add tests for Maven metadata building (#1837)
Related to #1611. We're going to make some changes in the function, so let's add some safety net to prevent regressions + a way to see how the modified function behaves. --------- Co-authored-by: Björn Kautler <[email protected]>
1 parent dd4182e commit bb270d4

File tree

2 files changed

+100
-2
lines changed

2 files changed

+100
-2
lines changed

maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/MavenMetadataBuilding.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ package io.github.typesafegithub.workflows.mavenbinding
22

33
import io.github.typesafegithub.workflows.actionbindinggenerator.domain.ActionCoords
44
import io.github.typesafegithub.workflows.shared.internal.fetchAvailableVersions
5+
import io.github.typesafegithub.workflows.shared.internal.model.Version
56
import java.time.format.DateTimeFormatter
67

7-
internal suspend fun ActionCoords.buildMavenMetadataFile(githubToken: String): String? {
8+
internal suspend fun ActionCoords.buildMavenMetadataFile(
9+
githubToken: String,
10+
fetchAvailableVersions: suspend (owner: String, name: String, githubToken: String?) -> List<Version> = ::fetchAvailableVersions,
11+
): String? {
812
val availableMajorVersions =
9-
fetchAvailableVersions(owner = owner, name = name, githubToken = githubToken)
13+
fetchAvailableVersions(owner, name, githubToken)
1014
.filter { it.isMajorVersion() }
1115
val newest = availableMajorVersions.maxOrNull() ?: return null
1216
val lastUpdated =
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package io.github.typesafegithub.workflows.mavenbinding
2+
3+
import io.github.typesafegithub.workflows.actionbindinggenerator.domain.ActionCoords
4+
import io.github.typesafegithub.workflows.shared.internal.model.Version
5+
import io.kotest.core.spec.style.FunSpec
6+
import io.kotest.matchers.nulls.shouldBeNull
7+
import io.kotest.matchers.shouldBe
8+
import java.time.ZonedDateTime
9+
10+
class MavenMetadataBuildingTest :
11+
FunSpec({
12+
val actionCoords =
13+
ActionCoords(
14+
owner = "owner",
15+
name = "name",
16+
version = "irrelevant",
17+
)
18+
19+
test("various kinds of versions available") {
20+
// Given
21+
val fetchAvailableVersions: suspend (String, String, String?) -> List<Version> = { _, _, _ ->
22+
listOf(
23+
Version(version = "v3-beta", dateProvider = { ZonedDateTime.parse("2024-07-01T00:00:00Z") }),
24+
Version(version = "v2", dateProvider = { ZonedDateTime.parse("2024-05-01T00:00:00Z") }),
25+
Version(version = "v1", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }),
26+
Version(version = "v1.1", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }),
27+
Version(version = "v1.1.0", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }),
28+
Version(version = "v1.0.1", dateProvider = { ZonedDateTime.parse("2024-03-05T00:00:00Z") }),
29+
Version(version = "v1.0", dateProvider = { ZonedDateTime.parse("2024-03-01T00:00:00Z") }),
30+
Version(version = "v1.0.0", dateProvider = { ZonedDateTime.parse("2024-03-01T00:00:00Z") }),
31+
)
32+
}
33+
34+
val xml =
35+
actionCoords.buildMavenMetadataFile(
36+
githubToken = "SOME_TOKEN",
37+
fetchAvailableVersions = fetchAvailableVersions,
38+
)
39+
40+
xml shouldBe
41+
"""
42+
<?xml version="1.0" encoding="UTF-8"?>
43+
<metadata>
44+
<groupId>owner</groupId>
45+
<artifactId>name</artifactId>
46+
<versioning>
47+
<latest>v2</latest>
48+
<release>v2</release>
49+
<versions>
50+
<version>v2</version>
51+
<version>v1</version>
52+
</versions>
53+
<lastUpdated>20240501000000</lastUpdated>
54+
</versioning>
55+
</metadata>
56+
""".trimIndent()
57+
}
58+
59+
test("no major versions") {
60+
// Given
61+
val fetchAvailableVersions: suspend (String, String, String?) -> List<Version> = { _, _, _ ->
62+
listOf(
63+
Version(version = "v1.1", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }),
64+
Version(version = "v1.1.0", dateProvider = { ZonedDateTime.parse("2024-03-07T00:00:00Z") }),
65+
Version(version = "v1.0.1", dateProvider = { ZonedDateTime.parse("2024-03-05T00:00:00Z") }),
66+
Version(version = "v1.0", dateProvider = { ZonedDateTime.parse("2024-03-01T00:00:00Z") }),
67+
Version(version = "v1.0.0", dateProvider = { ZonedDateTime.parse("2024-03-01T00:00:00Z") }),
68+
)
69+
}
70+
71+
val xml =
72+
actionCoords.buildMavenMetadataFile(
73+
githubToken = "SOME_TOKEN",
74+
fetchAvailableVersions = fetchAvailableVersions,
75+
)
76+
77+
xml.shouldBeNull()
78+
}
79+
80+
test("no versions available") {
81+
// Given
82+
val fetchAvailableVersions: suspend (String, String, String?) -> List<Version> = { _, _, _ ->
83+
emptyList()
84+
}
85+
86+
val xml =
87+
actionCoords.buildMavenMetadataFile(
88+
githubToken = "SOME_TOKEN",
89+
fetchAvailableVersions = fetchAvailableVersions,
90+
)
91+
92+
xml.shouldBeNull()
93+
}
94+
})

0 commit comments

Comments
 (0)