Skip to content

Commit ba9c07e

Browse files
committed
refactor: cleanup code and test
1 parent f2d7b3c commit ba9c07e

File tree

2 files changed

+99
-123
lines changed

2 files changed

+99
-123
lines changed

src/main/kotlin/git/semver/plugin/semver/VersionFinder.kt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -141,18 +141,9 @@ class VersionFinder(private val settings: SemverSettings, private val tags: Map<
141141

142142
private fun getCombinedParentVersion(parentSemVersions: List<MutableSemVersion>): MutableSemVersion {
143143
return when {
144-
parentSemVersions.isEmpty() -> {
145-
versionZero()
146-
}
147-
148-
parentSemVersions.size == 1 -> {
149-
parentSemVersions[0]
150-
}
151-
152-
else -> {
153-
parentSemVersions.max()
154-
.mergeChanges(parentSemVersions)
155-
}
144+
parentSemVersions.isEmpty() -> versionZero()
145+
parentSemVersions.size == 1 -> parentSemVersions[0]
146+
else -> parentSemVersions.max().mergeChanges(parentSemVersions)
156147
}
157148
}
158149

src/test/kotlin/git/semver/plugin/semver/SemVersionFinderTest.kt

Lines changed: 96 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@ package git.semver.plugin.semver
22

33
import git.semver.plugin.scm.Commit
44
import git.semver.plugin.scm.Tag
5+
import org.assertj.core.api.Assertions.assertThat
6+
import org.junit.jupiter.params.ParameterizedTest
7+
import org.junit.jupiter.params.provider.Arguments
8+
import org.junit.jupiter.params.provider.MethodSource
59
import kotlin.test.Test
610
import kotlin.test.assertEquals
711

12+
private const val FIFTH = "0000005"
13+
private const val FOURTH = "0000004"
14+
private const val THIRD = "0000003"
15+
private const val SECOND = "0000002"
16+
private const val FIRST = "0000001"
17+
private const val ZERO = "0000000"
18+
819
class SemVersionFinderTest {
9-
companion object {
1020

11-
private const val FIFTH = "0000005"
12-
private const val FOURTH = "0000004"
13-
private const val THIRD = "0000003"
14-
private const val SECOND = "0000002"
15-
private const val FIRST = "0000001"
16-
private const val ZERO = "0000000"
17-
}
1821

1922
@Test
2023
fun release_and_pre_release_tags() {
@@ -254,46 +257,9 @@ class SemVersionFinderTest {
254257
assertEquals("1.0.1-RC.3+001", version.toInfoVersionString())
255258
}
256259

257-
@Test
258-
fun `test update from commit pre-release dirty`() {
259-
assertEquals("1.1.1-Beta.3+001", getVersionFromTagAndPreAndCommitDirty("v1.1.0", "1.1.1-Beta.2", "Commit 1"))
260-
assertEquals("2.2.4-Alpha+001", getVersionFromTagAndPreAndCommitDirty("v2.2.2", "2.2.3-Alpha", "Commit 1"))
261-
assertEquals("2.2.3-Alpha.2+001", getVersionFromTagAndPreAndCommitDirty("v2.2.2", "2.2.3-Alpha.1", "fix: bug"))
262-
assertEquals("2.2.3-Beta.4+001", getVersionFromTagAndPreAndCommitDirty("v2.2.2", "2.2.3-Beta.3", "fix: bug"))
263-
assertEquals(
264-
"3.0.0-Beta.2+001",
265-
getVersionFromTagAndPreAndCommitDirty("v2.2.2", "3.0.0-Beta.1", "refactor!: drop some support")
266-
)
267-
assertEquals(
268-
"3.0.0-Beta.1+001",
269-
getVersionFromTagAndPreAndCommitDirty("v2.2.2", "2.2.3-Beta.1", "refactor!: drop some support")
270-
)
271-
assertEquals(
272-
"3.0.0-Beta.2+001",
273-
getVersionFromTagAndPreAndCommitDirty(
274-
"v2.2.2",
275-
"3.0.0-Beta.1",
276-
"feat: new api\r\n\r\nA message\r\n\r\nBREAKING CHANGE: drop support"
277-
)
278-
)
279-
assertEquals(
280-
"3.0.0-Beta.1+001",
281-
getVersionFromTagAndPreAndCommitDirty(
282-
"v2.2.2",
283-
"2.2.3-Beta.1",
284-
"feat: new api\r\n\r\nA message\r\n\r\nBREAKING CHANGE: drop support"
285-
)
286-
)
287-
assertEquals("2.3.0-NEXT.2+001", getVersionFromTagAndPreAndCommitDirty("v2.2.2", "2.3.0-NEXT.1", "feat: new"))
288-
assertEquals("2.3.0-NEXT.1+001", getVersionFromTagAndPreAndCommitDirty("v2.2.2", "2.2.3-NEXT.1", "feat: new"))
289-
assertEquals(
290-
"2.3.0-SNAPSHOT+002",
291-
getVersionFromTagAndPreAndCommitDirty("v2.2.2", "1.0.0-IGNORED", "feat: new")
292-
)
293-
assertEquals("2.3.0-NEXT+001", getVersionFromTagAndPreAndCommitDirty("v2.2.2", "2.2.3-NEXT", "feat: new"))
294-
}
295-
296-
private fun getVersionFromTagAndPreAndCommitDirty(tagName: String, preRelease: String, commit: String): String {
260+
@ParameterizedTest
261+
@MethodSource("test update from commit pre-release dirt testcases")
262+
fun `test update from commit pre-release dirty`(expectedVersion: String, tagName: String, preRelease: String, commit: String) {
297263
val commits = listOf(
298264
FIRST to "release tagged",
299265
SECOND to "pre-release tagged",
@@ -304,74 +270,93 @@ class SemVersionFinderTest {
304270
Tag(preRelease, SECOND)
305271
)
306272

307-
return getVersion(tags, asCommits(commits.reversed()).first(), true).toInfoVersionString()
273+
val actual = getVersion(tags, asCommits(commits.reversed()).first(), true).toInfoVersionString()
274+
275+
assertThat(actual).isEqualTo(expectedVersion)
308276
}
309277

310-
@Test
311-
fun `test update from commit`() {
312-
assertEquals("1.1.1-SNAPSHOT+003", getVersionFromTagAndCommits("v1.1.0", "Commit 1", "Commit 2", "Commit 3"))
313-
assertEquals("1.2.1-SNAPSHOT+003", getVersionFromTagAndCommits("v1.2", "Commit 1", "Commit 2", "Commit 3"))
314-
assertEquals("2.2.3-SNAPSHOT+001", getVersionFromTagAndCommits("v2.2.2", "Commit 1"))
315-
assertEquals("0.3.0-SNAPSHOT+001", getVersionFromTagAndCommits("v0.2.2", "feat!: Version 0 not updating major on breaking change"))
316-
assertEquals("3.0.0-SNAPSHOT+001", getVersionFromTagAndCommits("v2.2.2", "refactor!: drop some support"))
317-
assertEquals(
318-
"3.0.0-SNAPSHOT+001",
319-
getVersionFromTagAndCommits(
278+
279+
@ParameterizedTest
280+
@MethodSource("test update from commit testcases")
281+
fun `test update from commit`(expectedVersion: String, tagName: String, commits: Array<String>) {
282+
assertThat(getVersionFromTagAndCommits(tagName, *commits)).isEqualTo(expectedVersion)
283+
}
284+
285+
companion object {
286+
@JvmStatic
287+
fun `test update from commit pre-release dirt testcases`() = listOf(
288+
Arguments.of("1.1.1-Beta.3+001", "v1.1.0", "1.1.1-Beta.2", "Commit 1"),
289+
Arguments.of("2.2.4-Alpha+001", "v2.2.2", "2.2.3-Alpha", "Commit 1"),
290+
Arguments.of("2.2.3-Alpha.2+001", "v2.2.2", "2.2.3-Alpha.1", "fix: bug"),
291+
Arguments.of("2.2.3-Beta.4+001", "v2.2.2", "2.2.3-Beta.3", "fix: bug"),
292+
Arguments.of("3.0.0-Beta.2+001", "v2.2.2", "3.0.0-Beta.1", "refactor!: drop some support"),
293+
Arguments.of("3.0.0-Beta.1+001", "v2.2.2", "2.2.3-Beta.1", "refactor!: drop some support"),
294+
Arguments.of(
295+
"3.0.0-Beta.2+001",
320296
"v2.2.2",
321-
"feat: new api\r\n\r\nReplacing the old API\r\n\r\nBREAKING CHANGE: drop support"
322-
)
323-
)
324-
assertEquals("2.3.0-SNAPSHOT+001", getVersionFromTagAndCommits("v2.2.2", "feat: new"))
325-
assertEquals("2.2.3-SNAPSHOT+001", getVersionFromTagAndCommits("v2.2.2", "fix: bug"))
326-
assertEquals("1.0.1-SNAPSHOT+002", getVersionFromTagAndCommits("v1.0.0", "fix: bug", "fix: bug"))
327-
328-
assertEquals("3.0.0", getVersionFromTagAndCommits("v2.2.2", "refactor!: drop some support", "release: 3.0.0"))
329-
assertEquals("2.2.3", getVersionFromTagAndCommits("v2.2.2", "fix: bug", "release: 2.2.3"))
330-
assertEquals("1.0.2", getVersionFromTagAndCommits("v1.0.0", "fix: bug", "fix: bug", "release: 1.0.2"))
331-
assertEquals(
332-
"1.0.3-SNAPSHOT+002",
333-
getVersionFromTagAndCommits("v1.0.0", "fix: bug", "fix: bug", "release: 1.0.2", "fix: bug", "fix: bug")
334-
)
335-
assertEquals("2.3.0", getVersionFromTagAndCommits("v2.2.2", "feat: wow", "release: 2.3.0"))
336-
assertEquals("3.0.0", getVersionFromTagAndCommits("v2.2.2", "feat!: WOW", "release: 3.0.0"))
337-
assertEquals(
338-
"2.2.4-SNAPSHOT+001",
339-
getVersionFromTagAndCommits("v2.2.2", "fix: bug", "release: 2.2.3", "fix: bug")
340-
)
341-
assertEquals(
342-
"2.3.1-SNAPSHOT+001",
343-
getVersionFromTagAndCommits("v2.2.2", "feat: new", "release: 2.3.0", "fix: bug")
344-
)
345-
assertEquals(
346-
"3.0.1-SNAPSHOT+001",
347-
getVersionFromTagAndCommits("v2.2.2", "feat!: WOW", "release: 3.0.0", "fix: bug")
348-
)
349-
assertEquals(
350-
"2.3.0-SNAPSHOT+001",
351-
getVersionFromTagAndCommits("v2.2.2", "fix: bug", "release: 2.2.3", "feat: new")
352-
)
353-
assertEquals(
354-
"2.4.0-SNAPSHOT+001",
355-
getVersionFromTagAndCommits("v2.2.2", "feat: new", "release: 2.3.0", "feat: new")
356-
)
357-
assertEquals(
358-
"3.1.0-SNAPSHOT+001",
359-
getVersionFromTagAndCommits("v2.2.2", "feat!: WOW", "release: 3.0.0", "feat: new")
360-
)
361-
assertEquals(
362-
"3.0.0-SNAPSHOT+001",
363-
getVersionFromTagAndCommits("v2.2.2", "fix: bug", "release: 2.2.3", "feat!: WOW")
364-
)
365-
assertEquals(
366-
"3.0.0-SNAPSHOT+001",
367-
getVersionFromTagAndCommits("v2.2.2", "feat: new", "release: 2.3.0", "feat!: WOW")
368-
)
369-
assertEquals(
370-
"4.0.0-SNAPSHOT+001",
371-
getVersionFromTagAndCommits("v2.2.2", "feat!: WOW", "release: 3.0.0", "feat!: WOW")
297+
"3.0.0-Beta.1",
298+
"feat: new api\r\n\r\nA message\r\n\r\nBREAKING CHANGE: drop support"
299+
),
300+
Arguments.of(
301+
"3.0.0-Beta.1+001",
302+
"v2.2.2",
303+
"2.2.3-Beta.1",
304+
"feat: new api\r\n\r\nA message\r\n\r\nBREAKING CHANGE: drop support"
305+
),
306+
Arguments.of("2.3.0-NEXT.2+001", "v2.2.2", "2.3.0-NEXT.1", "feat: new"),
307+
Arguments.of("2.3.0-NEXT.1+001", "v2.2.2", "2.2.3-NEXT.1", "feat: new"),
308+
Arguments.of("2.3.0-SNAPSHOT+002", "v2.2.2", "1.0.0-IGNORED", "feat: new"),
309+
Arguments.of("2.3.0-NEXT+001", "v2.2.2", "2.2.3-NEXT", "feat: new")
310+
)
311+
312+
@JvmStatic
313+
fun `test update from commit testcases`() = listOf(
314+
Arguments.of("1.1.1-SNAPSHOT+003", "v1.1.0", arrayOf("Commit 1", "Commit 2", "Commit 3")),
315+
Arguments.of("1.2.1-SNAPSHOT+003", "v1.2", arrayOf("Commit 1", "Commit 2", "Commit 3")),
316+
Arguments.of("2.2.3-SNAPSHOT+001", "v2.2.2", arrayOf("Commit 1")),
317+
Arguments.of(
318+
"0.3.0-SNAPSHOT+001",
319+
"v0.2.2",
320+
arrayOf("feat!: Version 0 not updating major on breaking change")
321+
),
322+
Arguments.of(
323+
"0.2.3-SNAPSHOT+001",
324+
"v0.2.2",
325+
arrayOf("fix!: Version 0 not updating major on breaking change")
326+
),
327+
Arguments.of("3.0.0-SNAPSHOT+001", "v2.2.2", arrayOf("refactor!: drop some support")),
328+
Arguments.of(
329+
"3.0.0-SNAPSHOT+001",
330+
"v2.2.2", arrayOf(
331+
"feat: new api\r\n\r\nReplacing the old API\r\n\r\nBREAKING CHANGE: drop support"
332+
)
333+
),
334+
Arguments.of("2.3.0-SNAPSHOT+001", "v2.2.2", arrayOf("feat: new")),
335+
Arguments.of("2.2.3-SNAPSHOT+001", "v2.2.2", arrayOf("fix: bug")),
336+
Arguments.of("1.0.1-SNAPSHOT+002", "v1.0.0", arrayOf("fix: bug", "fix: bug")),
337+
338+
Arguments.of("3.0.0", "v2.2.2", arrayOf("refactor!: drop some support", "release: 3.0.0")),
339+
Arguments.of("2.2.3", "v2.2.2", arrayOf("fix: bug", "release: 2.2.3")),
340+
Arguments.of("1.0.2", "v1.0.0", arrayOf("fix: bug", "fix: bug", "release: 1.0.2")),
341+
Arguments.of(
342+
"1.0.3-SNAPSHOT+002",
343+
"v1.0.0",
344+
arrayOf("fix: bug", "fix: bug", "release: 1.0.2", "fix: bug", "fix: bug")
345+
),
346+
Arguments.of("2.3.0", "v2.2.2", arrayOf("feat: wow", "release: 2.3.0")),
347+
Arguments.of("3.0.0", "v2.2.2", arrayOf("feat!: WOW", "release: 3.0.0")),
348+
Arguments.of("2.2.4-SNAPSHOT+001", "v2.2.2", arrayOf("fix: bug", "release: 2.2.3", "fix: bug")),
349+
Arguments.of("2.3.1-SNAPSHOT+001", "v2.2.2", arrayOf("feat: new", "release: 2.3.0", "fix: bug")),
350+
Arguments.of("3.0.1-SNAPSHOT+001", "v2.2.2", arrayOf("feat!: WOW", "release: 3.0.0", "fix: bug")),
351+
Arguments.of("2.3.0-SNAPSHOT+001", "v2.2.2", arrayOf("fix: bug", "release: 2.2.3", "feat: new")),
352+
Arguments.of("2.4.0-SNAPSHOT+001", "v2.2.2", arrayOf("feat: new", "release: 2.3.0", "feat: new")),
353+
Arguments.of("3.1.0-SNAPSHOT+001", "v2.2.2", arrayOf("feat!: WOW", "release: 3.0.0", "feat: new")),
354+
Arguments.of("3.0.0-SNAPSHOT+001", "v2.2.2", arrayOf("fix: bug", "release: 2.2.3", "feat!: WOW")),
355+
Arguments.of("3.0.0-SNAPSHOT+001", "v2.2.2", arrayOf("feat: new", "release: 2.3.0", "feat!: WOW")),
356+
Arguments.of("4.0.0-SNAPSHOT+001", "v2.2.2", arrayOf("feat!: WOW", "release: 3.0.0", "feat!: WOW")),
372357
)
373358
}
374-
359+
375360
private fun getVersionFromTagAndCommits(tagName: String, vararg commits: String): String {
376361
val commitList =
377362
commits.mapIndexed { idx, it -> "000%02x".format(idx) to it }.reversed() + Pair(FIRST, "release: $tagName")

0 commit comments

Comments
 (0)