]> git.frustrated-labs.net Git - gradle-changelog-plugin.git/blob
e9c6dc82af7950bd5e40a0afd4747d8d7375f132
[gradle-changelog-plugin.git] /
1 package io.github.aloussase.changelog.parser
2
3 import org.hamcrest.MatcherAssert.assertThat
4 import org.hamcrest.Matchers.*
5 import org.hamcrest.collection.IsCollectionWithSize.hasSize
6 import org.junit.jupiter.api.Test
7 import org.junit.jupiter.params.ParameterizedTest
8 import org.junit.jupiter.params.provider.ValueSource
9
10 class MarkdownChangelogParserTests {
11
12     @Test
13     fun givenEmptyFileWhenParseIsInvokedThenReturnEmptyChangelog() {
14         val input = ""
15         val parser = MarkdownChangelogParser()
16
17         val result = parser.parse(input)
18
19         assertThat(result.isSuccess, equalTo(true))
20         assertThat(result.getOrThrow().entries, emptyIterable())
21     }
22
23     @ParameterizedTest
24     @ValueSource(strings = ["# Changelog", "# CHANGELOG"])
25     fun givenDocumentContainingOnlyHeaderWhenParseIsInvokedThenReturnEmptyChangelog(doc: String) {
26         val parser = MarkdownChangelogParser()
27
28         val result = parser.parse(doc)
29
30         assertThat(result.isSuccess, equalTo(true))
31         assertThat(result.getOrThrow().entries, emptyIterable())
32     }
33
34     @Test
35     fun givenDocumentContainingSingleEntryWithNoCommitsWhenParseisInvokedThenReturnChangelogWithThatEntryAndNoCommits() {
36         val doc = "# Changelog\n\n## [0.1.1]"
37         val parser = MarkdownChangelogParser()
38
39         val result = parser.parse(doc)
40
41         assertThat(result.isSuccess, equalTo(true))
42         assertThat(result.getOrThrow().entries, hasSize(1))
43         assertThat(result.getOrThrow().entries.first().release, equalTo("0.1.1"))
44         assertThat(result.getOrThrow().entries.first().commits, emptyIterable())
45     }
46
47     @Test
48     fun givenDocumentContainingSingleEntryWithCommitsWhenParseIsInvokedThenReturnChangelogWithSingleEntryAndCommits() {
49         val doc =
50             "# Changelog\n\n## [0.1.1]\n- LOYMAR-123: first commit ([email protected])\n- LOYMAR-123: second commit ([email protected])"
51         val parser = MarkdownChangelogParser()
52
53         val result = parser.parse(doc)
54
55         assertThat(result.isSuccess, equalTo(true))
56         assertThat(result.getOrThrow().entries, hasSize(1))
57         assertThat(result.getOrThrow().entries[0].commits, hasSize(2))
58         assertThat(result.getOrThrow().entries[0].commits[0].message, equalTo("first commit"))
59         assertThat(result.getOrThrow().entries[0].commits[1].message, equalTo("second commit"))
60     }
61
62     @Test
63     fun givenDocumentWithTwoEntriesWhenParseIsInvokedThenReturnChangelogWithTwoEntries() {
64         val doc =
65             "# Changelog\n\n## [0.1.1]\n- LOYMAR-123: first commit ([email protected])\n\n## [0.1.0]\n- LOYMAR-123: third commit ([email protected])"
66         val parser = MarkdownChangelogParser()
67
68         val result = parser.parse(doc)
69
70         assertThat(result.isSuccess, equalTo(true))
71         assertThat(result.getOrThrow().entries, hasSize(2))
72         assertThat(result.getOrThrow().entries[0].commits, hasSize(1))
73         assertThat(result.getOrThrow().entries[1].commits, hasSize(1))
74         assertThat(result.getOrThrow().entries[1].commits[0].message, equalTo("third commit"))
75     }
76
77     @ParameterizedTest
78     @ValueSource(
79         strings = [
80             "LOYMAR-123",
81             "0.1.x",
82             ""
83         ]
84     )
85     fun givenDocumentWithInvalidReleaseVersionWhenParseIsInvokedThenExceptionShouldBeThrown(releaseVersion: String) {
86         val doc =
87             "# Changelog\n\n## $releaseVersion\n- LOYMAR-123: first commit ([email protected])\n\n## [0.1.0]\n- LOYMAR-123: third commit ([email protected])"
88         val parser = MarkdownChangelogParser()
89
90         val result = parser.parse(doc)
91
92         assertThat(result.isFailure, equalTo(true))
93         assertThat(result.exceptionOrNull()?.message, containsString("Expected a valid release version"))
94         assertThat(result.exceptionOrNull()?.message, containsString(releaseVersion))
95     }
96
97     @ParameterizedTest
98     @ValueSource(strings = ["LOYMAR 123", "", "@@@"])
99     fun givenDocumentWithInvalidCommitBranchWhenParseIsInvokedThenFailureShouldBeReturned(branchName: String) {
100         val doc = "# Changelog\n\n## [1.1.1]\n- $branchName: first commit ([email protected])"
101         val parser = MarkdownChangelogParser()
102
103         val result = parser.parse(doc)
104
105         assertThat(result.isFailure, equalTo(true))
106         assertThat(result.exceptionOrNull()?.message, containsString(branchName))
107         assertThat(result.exceptionOrNull()?.message, containsString("Expected a valid commit"))
108     }
109
110 }