1 package io.github.aloussase.changelog.parser
3 import org.hamcrest.MatcherAssert.assertThat
4 import org.hamcrest.Matchers.emptyIterable
5 import org.hamcrest.Matchers.equalTo
6 import org.hamcrest.collection.IsCollectionWithSize.hasSize
7 import org.junit.jupiter.api.Test
8 import org.junit.jupiter.params.ParameterizedTest
9 import org.junit.jupiter.params.provider.ValueSource
11 class MarkdownChangelogParserTests {
14 fun givenEmptyFileWhenParseIsInvokedThenReturnEmptyChangelog() {
16 val parser = MarkdownChangelogParser()
18 val result = parser.parse(input)
20 assertThat(result.isSuccess, equalTo(true))
21 assertThat(result.getOrThrow().entries, emptyIterable())
25 @ValueSource(strings = ["# Changelog", "# CHANGELOG"])
26 fun givenDocumentContainingOnlyHeaderWhenParseIsInvokedThenReturnEmptyChangelog(doc: String) {
27 val parser = MarkdownChangelogParser()
29 val result = parser.parse(doc)
31 assertThat(result.isSuccess, equalTo(true))
32 assertThat(result.getOrThrow().entries, emptyIterable())
36 fun givenDocumentContainingSingleEntryWithNoCommitsWhenParseisInvokedThenReturnChangelogWithThatEntryAndNoCommits() {
37 val doc = "# Changelog\n\n## LOYMAR-123"
38 val parser = MarkdownChangelogParser()
40 val result = parser.parse(doc)
42 assertThat(result.isSuccess, equalTo(true))
43 assertThat(result.getOrThrow().entries, hasSize(1))
44 assertThat(result.getOrThrow().entries.first().branchName, equalTo("LOYMAR-123"))
45 assertThat(result.getOrThrow().entries.first().commits, emptyIterable())
49 fun givenDocumentContainingSingleEntryWithCommitsWhenParseIsInvokedThenReturnChangelogWithSingleEntryAndCommits() {
50 val doc = "# Changelog\n\n## LOYMAR-123\n- first commit\n- second commit"
51 val parser = MarkdownChangelogParser()
53 val result = parser.parse(doc)
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"))
63 fun givenDocumentWithTwoEntriesWhenParseIsInvokedThenReturnChangelogWithTwoEntries() {
64 val doc = "# Changelog\n\n## LOYMAR-123\n- first commit\n- second commit\n\n## LOYMAR-456\n- third commit"
65 val parser = MarkdownChangelogParser()
67 val result = parser.parse(doc)
69 assertThat(result.isSuccess, equalTo(true))
70 assertThat(result.getOrThrow().entries, hasSize(2))
71 assertThat(result.getOrThrow().entries[0].commits, hasSize(2))
72 assertThat(result.getOrThrow().entries[1].commits, hasSize(1))
73 assertThat(result.getOrThrow().entries[1].commits[0].message, equalTo("third commit"))