11package validate_test
22
33import (
4+ "fmt"
45 "os"
56 "path/filepath"
67 "testing"
@@ -10,6 +11,13 @@ import (
1011 "github.com/stretchr/testify/require"
1112)
1213
14+ type hookStructure struct {
15+ inputHooks []string
16+ expectedHooks map [string ]struct {}
17+ expectedErr bool
18+ expectedErrMgs error
19+ }
20+
1321func TestGitDirs (t * testing.T ) {
1422 tt := []struct {
1523 name string
@@ -60,3 +68,85 @@ func TestCurrentWD(t *testing.T) {
6068 assert .NoError (t , err )
6169 assert .NotEmpty (t , wd )
6270}
71+
72+ func TestValidateAllowHooks (t * testing.T ) {
73+ testData := map [string ]hookStructure {
74+ "no input hooks" : {
75+ expectedErr : false ,
76+ inputHooks : []string {},
77+ expectedHooks : map [string ]struct {}{
78+ "pre-commit" : {},
79+ "prepare-commit-msg" : {},
80+ "commit-msg" : {},
81+ "post-commit" : {},
82+ "post-checkout" : {},
83+ },
84+ },
85+ "only pre-commit hook" : {
86+ expectedErr : false ,
87+ inputHooks : []string {"pre-commit" },
88+ expectedHooks : map [string ]struct {}{
89+ "pre-commit" : {},
90+ },
91+ },
92+ "invalid hook name hook" : {
93+ expectedErr : true ,
94+ inputHooks : []string {"invalid hook name" },
95+ expectedErrMgs : fmt .Errorf ("invalid hook types: invalid hook name" ),
96+ expectedHooks : nil ,
97+ },
98+ "multiple valid hooks" : {
99+ expectedErr : false ,
100+ inputHooks : []string {"pre-commit" , "commit-msg" , "post-checkout" },
101+ expectedHooks : map [string ]struct {}{
102+ "pre-commit" : {},
103+ "commit-msg" : {},
104+ "post-checkout" : {},
105+ },
106+ },
107+ "multiple invalid hooks" : {
108+ expectedErr : true ,
109+ inputHooks : []string {"invalid1" , "invalid2" },
110+ expectedErrMgs : fmt .Errorf ("invalid hook types: invalid1, invalid2" ),
111+ expectedHooks : nil ,
112+ },
113+ "mix of valid and invalid hooks" : {
114+ expectedErr : true ,
115+ inputHooks : []string {"pre-commit" , "invalid-hook" },
116+ expectedErrMgs : fmt .Errorf ("invalid hook types: invalid-hook" ),
117+ expectedHooks : nil ,
118+ },
119+ "all valid hooks explicitly provided" : {
120+ expectedErr : false ,
121+ inputHooks : []string {"pre-commit" , "prepare-commit-msg" , "commit-msg" , "post-commit" , "post-checkout" },
122+ expectedHooks : map [string ]struct {}{
123+ "pre-commit" : {},
124+ "prepare-commit-msg" : {},
125+ "commit-msg" : {},
126+ "post-commit" : {},
127+ "post-checkout" : {},
128+ },
129+ },
130+ "duplicate valid hooks" : {
131+ expectedErr : false ,
132+ inputHooks : []string {"pre-commit" , "pre-commit" },
133+ expectedHooks : map [string ]struct {}{
134+ "pre-commit" : {},
135+ },
136+ },
137+ }
138+
139+ for name , test := range testData {
140+ t .Run (name , func (t * testing.T ) {
141+ resp , err := validate .GitHooks (test .inputHooks )
142+
143+ if test .expectedErr {
144+ assert .Error (t , err )
145+ assert .EqualError (t , err , test .expectedErrMgs .Error ())
146+ } else {
147+ assert .NoError (t , err )
148+ assert .Equal (t , test .expectedHooks , resp )
149+ }
150+ })
151+ }
152+ }
0 commit comments