git-chglog/commit_parser_test.go
2018-02-10 18:11:50 +09:00

256 lines
5.1 KiB
Go

package chglog
import (
"errors"
"io/ioutil"
"path/filepath"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestCommitParserParse(t *testing.T) {
assert := assert.New(t)
assert.True(true)
mock := &mockClient{
ReturnExec: func(subcmd string, args ...string) (string, error) {
if subcmd != "log" {
return "", errors.New("")
}
bytes, _ := ioutil.ReadFile(filepath.Join("fixtures", "gitlog.txt"))
return string(bytes), nil
},
}
parser := newCommitParser(mock, &Config{
Options: &Options{
CommitFilters: map[string][]string{
"Type": []string{
"feat",
"fix",
"perf",
"refactor",
},
},
HeaderPattern: "^(\\w*)(?:\\(([\\w\\$\\.\\-\\*\\s]*)\\))?\\:\\s(.*)$",
HeaderPatternMaps: []string{
"Type",
"Scope",
"Subject",
},
IssuePrefix: []string{
"#",
"gh-",
},
RefActions: []string{
"close",
"closes",
"closed",
"fix",
"fixes",
"fixed",
"resolve",
"resolves",
"resolved",
},
MergePattern: "^Merge pull request #(\\d+) from (.*)$",
MergePatternMaps: []string{
"Ref",
"Source",
},
RevertPattern: "^Revert\\s\"([\\s\\S]*)\"\\s*This reverts commit (\\w*)\\.",
RevertPatternMaps: []string{
"Subject",
"Hash",
},
NoteKeywords: []string{
"BREAKING CHANGE",
},
},
})
commits, err := parser.Parse("HEAD")
assert.Nil(err)
assert.Equal([]*Commit{
&Commit{
Hash: &Hash{
Long: "65cf1add9735dcc4810dda3312b0792236c97c4e",
Short: "65cf1add",
},
Author: &Author{
Name: "tsuyoshi wada",
Email: "mail@example.com",
Date: time.Unix(int64(1514808000), 0),
},
Committer: &Committer{
Name: "tsuyoshi wada",
Email: "mail@example.com",
Date: time.Unix(int64(1514808000), 0),
},
Merge: nil,
Revert: nil,
Refs: []*Ref{
&Ref{
Action: "",
Ref: "123",
Source: "",
},
},
Notes: []*Note{},
Mentions: []string{},
Header: "feat(*): Add new feature #123",
Type: "feat",
Scope: "*",
Subject: "Add new feature #123",
Body: "",
},
&Commit{
Hash: &Hash{
Long: "14ef0b6d386c5432af9292eab3c8314fa3001bc7",
Short: "14ef0b6d",
},
Author: &Author{
Name: "tsuyoshi wada",
Email: "mail@example.com",
Date: time.Unix(int64(1515153600), 0),
},
Committer: &Committer{
Name: "tsuyoshi wada",
Email: "mail@example.com",
Date: time.Unix(int64(1515153600), 0),
},
Merge: &Merge{
Ref: "3",
Source: "username/branchname",
},
Revert: nil,
Refs: []*Ref{
&Ref{
Action: "",
Ref: "3",
Source: "",
},
&Ref{
Action: "Fixes",
Ref: "3",
Source: "",
},
&Ref{
Action: "Closes",
Ref: "1",
Source: "",
},
},
Notes: []*Note{
&Note{
Title: "BREAKING CHANGE",
Body: "This is breaking point message.",
},
},
Mentions: []string{},
Header: "Merge pull request #3 from username/branchname",
Type: "",
Scope: "",
Subject: "",
Body: `This is body message.
Fixes #3
Closes #1
BREAKING CHANGE: This is breaking point message.`,
},
&Commit{
Hash: &Hash{
Long: "809a8280ffd0dadb0f4e7ba9fc835e63c37d6af6",
Short: "809a8280",
},
Author: &Author{
Name: "tsuyoshi wada",
Email: "mail@example.com",
Date: time.Unix(int64(1517486400), 0),
},
Committer: &Committer{
Name: "tsuyoshi wada",
Email: "mail@example.com",
Date: time.Unix(int64(1517486400), 0),
},
Merge: nil,
Revert: nil,
Refs: []*Ref{},
Notes: []*Note{},
Mentions: []string{
"tsuyoshiwada",
"hogefuga",
"FooBarBaz",
},
Header: "fix(controller): Fix cors configure",
Type: "fix",
Scope: "controller",
Subject: "Fix cors configure",
Body: `Has mention body
@tsuyoshiwada
@hogefuga
@FooBarBaz`,
},
&Commit{
Hash: &Hash{
Long: "74824d6bd1470b901ec7123d13a76a1b8938d8d0",
Short: "74824d6b",
},
Author: &Author{
Name: "tsuyoshi wada",
Email: "mail@example.com",
Date: time.Unix(int64(1517488587), 0),
},
Committer: &Committer{
Name: "tsuyoshi wada",
Email: "mail@example.com",
Date: time.Unix(int64(1517488587), 0),
},
Merge: nil,
Revert: nil,
Refs: []*Ref{
&Ref{
Action: "Fixes",
Ref: "123",
Source: "",
},
&Ref{
Action: "Closes",
Ref: "456",
Source: "username/repository",
},
},
Notes: []*Note{
&Note{
Title: "BREAKING CHANGE",
Body: `This is multiline breaking change note.
It is treated as the body of the Note until a mention or reference appears.
We also allow blank lines :)`,
},
},
Mentions: []string{},
Header: "fix(model): Remove hoge attributes",
Type: "fix",
Scope: "model",
Subject: "Remove hoge attributes",
Body: `This mixed body message.
BREAKING CHANGE:
This is multiline breaking change note.
It is treated as the body of the Note until a mention or reference appears.
We also allow blank lines :)
Fixes #123
Closes username/repository#456`,
},
}, commits)
}