1 package io.github.aloussase.changelog.parser
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
10 class MarkdownChangelogParserTests {
13 fun givenEmptyFileWhenParseIsInvokedThenReturnEmptyChangelog() {
15 val parser = MarkdownChangelogParser()
17 val result = parser.parse(input)
19 assertThat(result.isSuccess, equalTo(true))
20 assertThat(result.getOrThrow().entries, emptyIterable())
24 @ValueSource(strings = ["# Changelog", "# CHANGELOG"])
25 fun givenDocumentContainingOnlyHeaderWhenParseIsInvokedThenReturnEmptyChangelog(doc: String) {
26 val parser = MarkdownChangelogParser()
28 val result = parser.parse(doc)
30 assertThat(result.isSuccess, equalTo(true))
31 assertThat(result.getOrThrow().entries, emptyIterable())
35 fun givenDocumentContainingSingleEntryWithNoCommitsWhenParseisInvokedThenReturnChangelogWithThatEntryAndNoCommits() {
36 val doc = "# Changelog\n\n## [0.1.1]"
37 val parser = MarkdownChangelogParser()
39 val result = parser.parse(doc)
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())
48 fun givenDocumentContainingSingleEntryWithCommitsWhenParseIsInvokedThenReturnChangelogWithSingleEntryAndCommits() {
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() {
66 val parser = MarkdownChangelogParser()
68 val result = parser.parse(doc)
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"))
85 fun givenDocumentWithInvalidReleaseVersionWhenParseIsInvokedThenExceptionShouldBeThrown(releaseVersion: String) {
88 val parser = MarkdownChangelogParser()
90 val result = parser.parse(doc)
92 assertThat(result.isFailure, equalTo(true))
93 assertThat(result.exceptionOrNull()?.message, containsString("Expected a valid release version"))
94 assertThat(result.exceptionOrNull()?.message, containsString(releaseVersion))
98 @ValueSource(strings = ["LOYMAR 123", "", "@@@"])
99 fun givenDocumentWithInvalidCommitBranchWhenParseIsInvokedThenFailureShouldBeReturned(branchName: String) {
101 val parser = MarkdownChangelogParser()
103 val result = parser.parse(doc)
105 assertThat(result.isFailure, equalTo(true))
106 assertThat(result.exceptionOrNull()?.message, containsString(branchName))
107 assertThat(result.exceptionOrNull()?.message, containsString("Expected a valid commit"))