2021-01-21 21:41:14 +01:00
package analyzer_test
import (
"testing"
"github.com/Nightapes/go-semantic-release/internal/analyzer"
"github.com/Nightapes/go-semantic-release/internal/shared"
"github.com/Nightapes/go-semantic-release/pkg/config"
"github.com/stretchr/testify/assert"
)
func TestConventional ( t * testing . T ) {
2021-01-23 22:49:42 +01:00
t . Parallel ( )
2021-01-21 21:41:14 +01:00
testConfigs := [ ] struct {
2021-01-23 22:49:42 +01:00
testCase string
commits [ ] shared . Commit
wantAnalyzedCommits map [ shared . Release ] [ ] shared . AnalyzedCommit
2021-01-21 21:41:14 +01:00
} {
{
testCase : "feat" ,
2021-01-23 22:49:42 +01:00
wantAnalyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
2021-01-21 21:41:14 +01:00
"minor" : {
{
Commit : shared . Commit {
Message : "feat(internal/changelog): my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
Scope : "internal/changelog" ,
ParsedMessage : "my first commit" ,
Tag : "feat" ,
TagString : "Features" ,
2021-02-16 15:25:34 +01:00
Subject : "my first commit" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock { } ,
2021-01-21 21:41:14 +01:00
Print : true ,
} ,
{
Commit : shared . Commit {
Message : "feat: no scope" ,
Author : "me" ,
Hash : "12345667" ,
} ,
Scope : "" ,
ParsedMessage : "no scope" ,
Tag : "feat" ,
TagString : "Features" ,
2021-02-16 15:25:34 +01:00
Subject : "no scope" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock { } ,
2021-01-21 21:41:14 +01:00
Print : true ,
} ,
} ,
"major" : { } ,
"patch" : { } ,
"none" : { } ,
} ,
commits : [ ] shared . Commit {
{
Message : "feat(internal/changelog): my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
{
Message : "feat: no scope" ,
Author : "me" ,
Hash : "12345667" ,
} ,
} ,
} ,
{
testCase : "feat breaking change" ,
2021-01-23 22:49:42 +01:00
wantAnalyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
2021-01-21 21:41:14 +01:00
"minor" : {
{
Commit : shared . Commit {
Message : "feat: my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
Scope : "" ,
ParsedMessage : "my first commit" ,
Tag : "feat" ,
TagString : "Features" ,
Print : true ,
2021-02-16 15:25:34 +01:00
Subject : "my first commit" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock { } ,
2021-01-21 21:41:14 +01:00
} ,
} ,
"major" : {
{
Commit : shared . Commit {
Message : "feat!: my first break" ,
Author : "me" ,
Hash : "12345668" ,
} ,
Scope : "" ,
ParsedMessage : "" ,
Tag : "feat" ,
TagString : "Features" ,
Print : true ,
ParsedBreakingChangeMessage : "my first break" ,
2021-02-16 15:25:34 +01:00
IsBreaking : true ,
Subject : "my first break" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock { } ,
2021-01-21 21:41:14 +01:00
} ,
} ,
"patch" : { } ,
"none" : { } ,
} ,
commits : [ ] shared . Commit {
{
Message : "feat: my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
{
Message : "feat!: my first break" ,
Author : "me" ,
Hash : "12345668" ,
} ,
} ,
} ,
{
testCase : "feat breaking change footer" ,
2021-01-23 22:49:42 +01:00
wantAnalyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
2021-01-21 21:41:14 +01:00
"minor" : {
{
Commit : shared . Commit {
Message : "feat: my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
Scope : "" ,
ParsedMessage : "my first commit" ,
Tag : "feat" ,
TagString : "Features" ,
Print : true ,
2021-02-16 15:25:34 +01:00
Subject : "my first commit" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock { } ,
2021-01-21 21:41:14 +01:00
} ,
} ,
"major" : {
{
Commit : shared . Commit {
Message : "feat: my first break \n\nBREAKING CHANGE: change api to v2\n" ,
Author : "me" ,
Hash : "12345668" ,
} ,
Scope : "" ,
ParsedMessage : "my first break" ,
Tag : "feat" ,
TagString : "Features" ,
Print : true ,
ParsedBreakingChangeMessage : "change api to v2" ,
2021-02-16 15:25:34 +01:00
IsBreaking : true ,
Subject : "my first break" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock {
2021-02-22 11:45:32 +01:00
"footer" : { shared . MessageBlock {
2021-02-16 15:25:34 +01:00
Label : "BREAKING CHANGE" ,
Content : "change api to v2" ,
} ,
} ,
} ,
2021-01-21 21:41:14 +01:00
} ,
{
Commit : shared . Commit {
Message : "feat!: my first break \n\nBREAKING CHANGE: hey from the change" ,
Author : "me" ,
Hash : "12345669" ,
} ,
Scope : "" ,
ParsedMessage : "my first break" ,
Tag : "feat" ,
TagString : "Features" ,
Print : true ,
ParsedBreakingChangeMessage : "hey from the change" ,
2021-02-16 15:25:34 +01:00
IsBreaking : true ,
Subject : "my first break" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock {
2021-02-22 11:45:32 +01:00
"footer" : { shared . MessageBlock {
2021-02-16 15:25:34 +01:00
Label : "BREAKING CHANGE" ,
Content : "hey from the change" ,
} ,
} ,
} ,
2021-01-21 21:41:14 +01:00
} ,
} ,
"patch" : { } ,
"none" : { } ,
} ,
2021-01-23 22:49:42 +01:00
commits : [ ] shared . Commit {
{
Message : "feat: my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
{
Message : "feat: my first break \n\nBREAKING CHANGE: change api to v2\n" ,
Author : "me" ,
Hash : "12345668" ,
} ,
{
Message : "feat!: my first break \n\nBREAKING CHANGE: hey from the change" ,
Author : "me" ,
Hash : "12345669" ,
} ,
} ,
2021-01-21 21:41:14 +01:00
} ,
{
testCase : "invalid" ,
2021-01-23 22:49:42 +01:00
wantAnalyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
2021-01-21 21:41:14 +01:00
"minor" : { } ,
"major" : { } ,
"patch" : { } ,
"none" : { } ,
} ,
commits : [ ] shared . Commit {
{
Message : "internal/changelog: my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
{
Message : "Merge feat: my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
} ,
} ,
{
testCase : "feat and build" ,
2021-01-23 22:49:42 +01:00
wantAnalyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
2021-01-21 21:41:14 +01:00
"minor" : {
{
Commit : shared . Commit {
Message : "feat: my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
Scope : "" ,
ParsedMessage : "my first commit" ,
Tag : "feat" ,
TagString : "Features" ,
Print : true ,
2021-02-16 15:25:34 +01:00
Subject : "my first commit" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock { } ,
2021-01-21 21:41:14 +01:00
} ,
} ,
"none" : {
{
Commit : shared . Commit {
Message : "build: my first build" ,
Author : "me" ,
Hash : "12345668" ,
} ,
Scope : "" ,
ParsedMessage : "my first build" ,
Tag : "build" ,
TagString : "Changes to CI/CD" ,
Print : false ,
ParsedBreakingChangeMessage : "" ,
2021-02-16 15:25:34 +01:00
Subject : "my first build" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock { } ,
2021-01-21 21:41:14 +01:00
} ,
} ,
"patch" : { } ,
"major" : { } ,
} ,
commits : [ ] shared . Commit {
{
Message : "feat: my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
{
Message : "build: my first build" ,
Author : "me" ,
Hash : "12345668" ,
} ,
} ,
} ,
2021-01-23 22:49:42 +01:00
{
testCase : "fix and build" ,
wantAnalyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
"minor" : { } ,
"none" : {
{
Commit : shared . Commit {
Message : "build: my first build" ,
Author : "me" ,
Hash : "12345668" ,
} ,
Scope : "" ,
ParsedMessage : "my first build" ,
Tag : "build" ,
TagString : "Changes to CI/CD" ,
Print : false ,
ParsedBreakingChangeMessage : "" ,
2021-02-16 15:25:34 +01:00
Subject : "my first build" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock { } ,
2021-01-23 22:49:42 +01:00
} ,
} ,
"patch" : { {
Commit : shared . Commit {
Message : "fix: my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
Scope : "" ,
ParsedMessage : "my first commit" ,
Tag : "fix" ,
TagString : "Bug fixes" ,
Print : true ,
2021-02-16 15:25:34 +01:00
Subject : "my first commit" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock { } ,
2021-01-23 22:49:42 +01:00
} } ,
"major" : { } ,
} ,
commits : [ ] shared . Commit {
{
Message : "fix: my first commit" ,
Author : "me" ,
Hash : "12345667" ,
} ,
{
Message : "build: my first build" ,
Author : "me" ,
Hash : "12345668" ,
} ,
} ,
} ,
2021-02-22 11:45:32 +01:00
}
conventional , err := analyzer . New ( "conventional" , config . AnalyzerConfig { } , config . ChangelogConfig { } )
assert . NoError ( t , err )
for _ , test := range testConfigs {
analyzedCommits := conventional . Analyze ( test . commits )
assert . Equalf ( t , test . wantAnalyzedCommits [ "major" ] , analyzedCommits [ "major" ] , "Testcase %s should have major commits" , test . testCase )
assert . Equalf ( t , test . wantAnalyzedCommits [ "minor" ] , analyzedCommits [ "minor" ] , "Testcase %s should have minor commits" , test . testCase )
assert . Equalf ( t , test . wantAnalyzedCommits [ "patch" ] , analyzedCommits [ "patch" ] , "Testcase %s should have patch commits" , test . testCase )
assert . Equalf ( t , test . wantAnalyzedCommits [ "none" ] , analyzedCommits [ "none" ] , "Testcase %s should have none commits" , test . testCase )
}
}
func TestConventional_BodyAndFooters ( t * testing . T ) {
t . Parallel ( )
testConfigs := [ ] struct {
testCase string
commits [ ] shared . Commit
expectedAnalyzedCommits map [ shared . Release ] [ ] shared . AnalyzedCommit
} {
2021-02-16 15:25:34 +01:00
{
2021-02-22 11:45:32 +01:00
testCase : "Only body, no footer" ,
commits : [ ] shared . Commit {
{
Message : "fix: squash bug for logging\n\nNow the logs will not print lines twice. The following changed:\n\n-Buffer -Stdout" ,
Author : "me" ,
Hash : "12345667" ,
} ,
} ,
expectedAnalyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
"patch" : {
{
Commit : shared . Commit {
Message : "fix: squash bug for logging\n\nNow the logs will not print lines twice. The following changed:\n\n-Buffer -Stdout" ,
Author : "me" ,
Hash : "12345667" ,
2021-02-16 15:25:34 +01:00
} ,
2021-02-22 11:45:32 +01:00
Scope : "" ,
ParsedMessage : "squash bug for logging\n\nNow the logs will not print lines twice. The following changed:\n\n-Buffer -Stdout" ,
Tag : "fix" ,
TagString : "Bug fixes" ,
Print : true ,
Subject : "squash bug for logging" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock {
"body" : {
shared . MessageBlock {
Label : "" ,
Content : "Now the logs will not print lines twice. The following changed:\n\n-Buffer -Stdout" ,
} ,
} ,
2021-02-16 15:25:34 +01:00
} ,
2021-02-22 11:45:32 +01:00
} ,
} ,
"major" : { } ,
"minor" : { } ,
"none" : { } ,
} ,
} ,
{
testCase : "Only footers, no body" ,
commits : [ ] shared . Commit {
{
Message : "fix: squash bug for logging\n\nNote: now the logs will not print lines twice.\n\nIssue: #123\nSeverity: medium" ,
Author : "me" ,
Hash : "12345667" ,
} ,
} ,
expectedAnalyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
"patch" : {
{
Commit : shared . Commit {
Message : "fix: squash bug for logging\n\nNote: now the logs will not print lines twice.\n\nIssue: #123\nSeverity: medium" ,
Author : "me" ,
Hash : "12345667" ,
2021-02-16 15:25:34 +01:00
} ,
2021-02-22 11:45:32 +01:00
Scope : "" ,
ParsedMessage : "squash bug for logging\n\nNote: now the logs will not print lines twice.\n\nIssue: #123\nSeverity: medium" ,
Tag : "fix" ,
TagString : "Bug fixes" ,
Print : true ,
Subject : "squash bug for logging" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock {
"footer" : {
shared . MessageBlock {
Label : "Note" ,
Content : "now the logs will not print lines twice." ,
} ,
shared . MessageBlock {
Label : "Issue" ,
Content : "#123" ,
} ,
shared . MessageBlock {
Label : "Severity" ,
Content : "medium" ,
} ,
} ,
2021-02-16 15:25:34 +01:00
} ,
} ,
2021-02-22 11:45:32 +01:00
} ,
2021-02-16 15:25:34 +01:00
"major" : { } ,
2021-02-22 11:45:32 +01:00
"minor" : { } ,
"none" : { } ,
2021-02-16 15:25:34 +01:00
} ,
2021-02-22 11:45:32 +01:00
} ,
{
testCase : "Body and footers" ,
2021-02-16 15:25:34 +01:00
commits : [ ] shared . Commit {
{
2021-02-22 11:45:32 +01:00
Message : "fix: squash bug for logging\n\nNow the logs will not print lines twice. The following changed:\n\n-Buffer -Stdout\n\nIssue: #123\nSeverity: medium" ,
2021-02-16 15:25:34 +01:00
Author : "me" ,
Hash : "12345667" ,
} ,
} ,
2021-02-22 11:45:32 +01:00
expectedAnalyzedCommits : map [ shared . Release ] [ ] shared . AnalyzedCommit {
"patch" : {
{
Commit : shared . Commit {
Message : "fix: squash bug for logging\n\nNow the logs will not print lines twice. The following changed:\n\n-Buffer -Stdout\n\nIssue: #123\nSeverity: medium" ,
Author : "me" ,
Hash : "12345667" ,
} ,
Scope : "" ,
ParsedMessage : "squash bug for logging\n\nNow the logs will not print lines twice. The following changed:\n\n-Buffer -Stdout\n\nIssue: #123\nSeverity: medium" ,
Tag : "fix" ,
TagString : "Bug fixes" ,
Print : true ,
Subject : "squash bug for logging" ,
MessageBlocks : map [ string ] [ ] shared . MessageBlock {
"body" : {
shared . MessageBlock {
Label : "" ,
Content : "Now the logs will not print lines twice. The following changed:\n\n-Buffer -Stdout" ,
} ,
} ,
"footer" : {
shared . MessageBlock {
Label : "Issue" ,
Content : "#123" ,
} ,
shared . MessageBlock {
Label : "Severity" ,
Content : "medium" ,
} ,
} ,
} ,
} ,
} ,
"major" : { } ,
"minor" : { } ,
"none" : { } ,
} ,
2021-02-16 15:25:34 +01:00
} ,
2021-02-22 11:45:32 +01:00
2021-01-21 21:41:14 +01:00
}
2021-02-22 11:45:32 +01:00
conventional , err := analyzer . New ( "conventional" , config . AnalyzerConfig { } , config . ChangelogConfig { } )
2021-01-21 21:41:14 +01:00
assert . NoError ( t , err )
for _ , test := range testConfigs {
analyzedCommits := conventional . Analyze ( test . commits )
2021-02-22 11:45:32 +01:00
assert . Equalf ( t , test . expectedAnalyzedCommits [ "major" ] , analyzedCommits [ "major" ] , "Testcase %s should have major commits" , test . testCase )
assert . Equalf ( t , test . expectedAnalyzedCommits [ "minor" ] , analyzedCommits [ "minor" ] , "Testcase %s should have minor commits" , test . testCase )
assert . Equalf ( t , test . expectedAnalyzedCommits [ "patch" ] , analyzedCommits [ "patch" ] , "Testcase %s should have patch commits" , test . testCase )
assert . Equalf ( t , test . expectedAnalyzedCommits [ "none" ] , analyzedCommits [ "none" ] , "Testcase %s should have none commits" , test . testCase )
2021-01-21 21:41:14 +01:00
}
}