package main import ( "github.com/stretchr/testify/assert" "log" "os" "testing" ) func TestValidateCommitMsg(t *testing.T) { tts := []struct { commitMsg string expErr error }{ {commitMsg: "i am wrong", expErr: errCommitMsgSyntax}, {commitMsg: "fix: i am a easy fix", expErr: nil}, {commitMsg: "feat: i am a easy feat", expErr: nil}, {commitMsg: "build: i am a easy build", expErr: nil}, {commitMsg: "chore: i am a easy chore", expErr: nil}, {commitMsg: "ci: i am a easy ci", expErr: nil}, {commitMsg: "docs: i am a easy docs", expErr: nil}, {commitMsg: "style: i am a easy style", expErr: nil}, {commitMsg: "refactor: i am a easy refactor", expErr: nil}, {commitMsg: "perf: i am a easy perf", expErr: nil}, {commitMsg: "test: i am a easy test", expErr: nil}, {commitMsg: "something: i am a easy something", expErr: errCommitMsgInvalideType}, {commitMsg: "fix(main): bla", expErr: nil}, {commitMsg: "fix(main)!: bla", expErr: nil}, {commitMsg: "fix(main)! bla", expErr: errCommitMsgSyntax}, } for _, tt := range tts { t.Run(tt.commitMsg, func(t *testing.T) { err := checkCommitMsg(tt.commitMsg) assert.Equal(t, tt.expErr, err, "should return right error") }) } } func TestGetFirstLine(t *testing.T) { msg := "I am \n a new line" newmsg, err := getFirstLine(msg) assert.Nil(t, err, "shouldnt return error") assert.Equal(t, "I am ", newmsg, "should return just first line of commit msg") } func TestGetFirstLineEmpty(t *testing.T) { msg := "" newmsg, err := getFirstLine(msg) assert.Nil(t, err, "shouldnt return error") assert.Equal(t, "", newmsg, "should return just first line of commit msg") } func TestGetCommitMessageFromFile(t *testing.T) { commitmsg := "some random commit msg" path := createCommitMessageFile(commitmsg) defer os.Remove(path) msg, err := getCommitMessageFromFile(path) assert.Nil(t, err, "should not return error") assert.Equal(t, commitmsg, msg, "commit message should be read from file") } func createCommitMessageFile(msg string) string { f, err := os.CreateTemp("", "*") if err != nil { log.Fatal(err) } defer f.Close() f.Write([]byte(msg)) return f.Name() }