2019-07-21 15:07:13 +02:00
package changelog_test
import (
"testing"
"github.com/Nightapes/go-semantic-release/internal/analyzer"
"github.com/Nightapes/go-semantic-release/internal/changelog"
"github.com/Nightapes/go-semantic-release/internal/shared"
"github.com/Nightapes/go-semantic-release/pkg/config"
"github.com/stretchr/testify/assert"
"time"
)
func TestChangelog ( t * testing . T ) {
templateConfig := shared . ChangelogTemplateConfig {
CommitURL : "https://commit.url" ,
CompareURL : "https://compare.url" ,
Hash : "hash" ,
Version : "1.0.0" ,
}
testConfigs := [ ] struct {
testCase string
2019-08-11 18:27:52 +02:00
analyzedCommits map [ shared . Release ] [ ] shared . AnalyzedCommit
2019-07-21 15:07:13 +02:00
result * shared . GeneratedChangelog
hasError bool
} {
{
testCase : "feat" ,
2019-08-11 18:27:52 +02:00
analyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
"minor" : [ ] shared . AnalyzedCommit {
shared . AnalyzedCommit {
Commit : shared . Commit {
2019-07-21 15:07:13 +02:00
Message : "feat(test): my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
Scope : "internal/changelog" ,
ParsedMessage : "my first commit" ,
Tag : "feat" ,
TagString : "Features" ,
Print : true ,
} ,
} ,
} ,
result : & shared . GeneratedChangelog {
Title : "v1.0.0 (2019-07-19)" ,
Content : "# v1.0.0 (2019-07-19)\n\n ### Features\n* **`internal/changelog`** my first commit ([1234566](https://commit.url)) \n\n " ,
} ,
hasError : false ,
} ,
{
testCase : "feat breaking change" ,
2019-08-11 18:27:52 +02:00
analyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
"minor" : [ ] shared . AnalyzedCommit {
shared . AnalyzedCommit {
Commit : shared . Commit {
2019-07-21 15:07:13 +02:00
Message : "feat(test): my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
Scope : "internal/changelog" ,
ParsedMessage : "my first commit" ,
Tag : "feat" ,
TagString : "Features" ,
Print : true ,
} ,
2019-08-11 18:27:52 +02:00
shared . AnalyzedCommit {
Commit : shared . Commit {
2019-07-21 15:07:13 +02:00
Message : "feat(test): my first break: BREAKING CHANGE: change api to v2" ,
Author : "me" ,
Hash : "12345668" ,
} ,
Scope : "internal/changelog" ,
ParsedMessage : "my first break" ,
Tag : "feat" ,
TagString : "Features" ,
Print : true ,
ParsedBreakingChangeMessage : "change api to v2" ,
} ,
} ,
} ,
result : & shared . GeneratedChangelog {
Title : "v1.0.0 (2019-07-19)" ,
Content : "# v1.0.0 (2019-07-19)\n\n## BREAKING CHANGES\n\n* **`internal/changelog`** change api to v2 \nintroduced by commit: \nmy first break ([1234566](https://commit.url)) \n\n ### Features\n* **`internal/changelog`** my first commit ([1234566](https://commit.url)) \n\n " ,
} ,
hasError : false ,
} ,
}
cl := changelog . New ( & config . ReleaseConfig { } , [ ] analyzer . Rule {
{
Tag : "feat" ,
TagString : "Features" ,
Release : "minor" ,
Changelog : true ,
} ,
{
Tag : "fix" ,
TagString : "Bug fixes" ,
Release : "patch" ,
Changelog : true ,
} ,
{
Tag : "build" ,
TagString : "Build" ,
Release : "none" ,
Changelog : false ,
} ,
} , time . Date ( 2019 , 7 , 19 , 0 , 0 , 0 , 0 , time . UTC ) )
for _ , config := range testConfigs {
generatedChangelog , err := cl . GenerateChanglog ( templateConfig , config . analyzedCommits )
assert . Equalf ( t , config . hasError , err != nil , "Testcase %s should have error: %t -> %s" , config . testCase , config . hasError , err )
assert . Equalf ( t , config . result , generatedChangelog , "Testcase %s should have generated changelog" , config . testCase )
}
}