8
8
"github.com/go-git/go-git/v5"
9
9
"github.com/go-git/go-git/v5/plumbing/object"
10
10
"github.com/stretchr/testify/assert"
11
+ "github.com/stretchr/testify/suite"
11
12
)
12
13
13
14
// TODO: Cleanup the larger tests which use setupRepo func into `suite` tests.
@@ -30,137 +31,105 @@ const (
30
31
twoDaysSince time.Duration = 48 * time .Hour
31
32
)
32
33
33
- func TestValidatePathsProducesErrorWithInvalidDir (t * testing.T ) {
34
- invalidPath := []string {"/does/not/exist" }
35
- err := validatePaths (invalidPath )
36
- assert .Error (t , err )
34
+ // Involves all tests which require reading/writing of a commit, this is requires the setup and teardown
35
+ // of a directory which is tracked by git.
36
+ type CommitSuite struct {
37
+ suite.Suite
38
+ Repo * git.Repository // Repo to use within the test suite.
39
+ Worktree * git.Worktree
37
40
}
38
41
39
- func TestValidatePathsProducesErrorWithNoGitDir (t * testing.T ) {
40
- gitDirNotExist := []string {"/tmp" }
41
- err := validatePaths (gitDirNotExist )
42
- assert .Error (t , err )
43
- }
42
+ func setupRepo (url string , t * testing.T ) (* git.Repository , error ) {
44
43
45
- func TestValidatePathsWithGitDir (t * testing.T ) {
46
- gitDirExists := []string {currentDir } // Current directory is tracked by git
47
- err := validatePaths (gitDirExists )
48
- assert .Nil (t , err )
49
- }
44
+ r , err := git .PlainClone (t .TempDir (), false , & git.CloneOptions {
45
+ URL : url ,
46
+ RecurseSubmodules : git .DefaultSubmoduleRecursionDepth ,
47
+ })
48
+ if err != nil {
49
+ return nil , err
50
+ }
50
51
51
- func TestGetRepositories (t * testing.T ) {
52
- gitDir := []string {currentDir }
53
- _ , err := getRepositories (gitDir )
54
- assert .Nil (t , err )
52
+ return r , nil
55
53
}
56
54
57
- func TestDoesContainAuthor (t * testing.T ) {
58
- testCommit := & object.Commit {
59
- Author : object.Signature {
60
- Name : "testUser" ,
61
-
62
- When : time .Now ().UTC (),
63
- },
55
+ // Setup before every test, whilst this might be a little inefficient for getting the repository before
56
+ // every test, we do so to ensure that our commit history is completely fresh from previous test commits.
57
+ func (suite * CommitSuite ) SetupTest () {
58
+ r , err := setupRepo (thisRepo , suite .T ())
59
+ if err != nil {
60
+ suite .FailNow ("Unable to setup CommitSuite repo: %s\n " , err )
64
61
}
65
62
66
- got := containsAuthor (testCommit , "testUser" )
67
- assert .True (t , got )
68
- }
63
+ suite .Repo = r
69
64
70
- func TestDoesNotContainAuthor (t * testing.T ) {
71
- testCommit := & object.Commit {
72
- Author : object.Signature {
73
- Name : "testUser" ,
74
-
75
- When : time .Now ().UTC (),
76
- },
65
+ w , err := r .Worktree ()
66
+ if err != nil {
67
+ suite .FailNow ("Unable to setup CommitSuite worktree: %s\n " , err )
77
68
}
78
-
79
- got := containsAuthor (testCommit , "John" )
80
- assert .False (t , got )
69
+ suite .Worktree = w
81
70
}
82
71
83
- func TestFullContainsAuthor (t * testing.T ) {
84
-
85
- assert := assert .New (t )
72
+ func (suite * CommitSuite ) TestFullContainsAuthor () {
86
73
87
- r , err := setupRepo (thisRepo , t )
88
- assert .Nil (err )
74
+ assert := assert .New (suite .T ())
89
75
90
- w , err := r .Worktree ()
76
+ w , err := suite . Repo .Worktree ()
91
77
assert .Nil (err )
92
78
93
79
_ , err = w .Commit ("TEST" , testSignature )
94
80
assert .Nil (err )
95
81
96
82
m := make (map [string ]* git.Repository , 1 )
97
- m ["today" ] = r
83
+ m ["today" ] = suite . Repo
98
84
msgs , err := getCommitMessages (m , testSignature .Author .Name , true , oneMinuteSince )
99
85
assert .Nil (err )
100
86
101
87
assert .Contains (msgs , "today" )
102
88
assert .GreaterOrEqual (2 , len (msgs )) // Our 2 commits here and any others which are within 48 hours.
103
89
104
90
}
105
- func TestFullContainsAuthorHasNoCommits (t * testing.T ) {
106
91
107
- assert := assert . New ( t )
92
+ func ( suite * CommitSuite ) TestFullContainsAuthorHasNoCommits () {
108
93
109
- r , err := setupRepo (thisRepo , t )
110
- assert .Nil (err )
94
+ assert := assert .New (suite .T ())
111
95
112
- w , err := r .Worktree ()
113
- assert .Nil (err )
114
-
115
- _ , err = w .Commit ("TEST" , testSignature )
96
+ _ , err := suite .Worktree .Commit ("TEST" , testSignature )
116
97
assert .Nil (err )
117
98
118
99
m := make (map [string ]* git.Repository , 1 )
119
- m ["today" ] = r
100
+ m ["today" ] = suite . Repo
120
101
msgs , err := getCommitMessages (m , "INVALID_COMMIT_AUTHOR" , true , oneMinuteSince )
121
102
assert .Nil (err )
122
103
123
104
assert .Contains (msgs , "today" )
124
105
assert .Equal (0 , len (msgs ["today" ]))
125
-
126
106
}
127
107
128
- func TestNoResultsForZeroSinceValue (t * testing.T ) {
129
-
130
- assert := assert .New (t )
108
+ func (suite * CommitSuite ) TestNoResultsForZeroSinceValue () {
131
109
132
- r , err := setupRepo (thisRepo , t )
133
- assert .Nil (err )
110
+ assert := assert .New (suite .T ())
134
111
135
- w , err := r .Worktree ()
136
- assert .Nil (err )
137
-
138
- _ , err = w .Commit ("TEST" , testSignature )
112
+ _ , err := suite .Worktree .Commit ("TEST" , testSignature )
139
113
assert .Nil (err )
140
114
141
115
m := make (map [string ]* git.Repository , 1 )
142
- m ["today" ] = r
116
+ m ["today" ] = suite . Repo
143
117
msgs , err := getCommitMessages (m , "" , true , zeroTime )
144
118
assert .Nil (err )
145
119
146
120
assert .Equal (0 , len (msgs ["today" ]))
147
121
148
122
}
149
- func TestResultsForMinimalSinceValue (t * testing.T ) {
150
-
151
- assert := assert .New (t )
152
123
153
- r , err := setupRepo (thisRepo , t )
154
- assert .Nil (err )
124
+ func (suite * CommitSuite ) TestResultsForMinimalSinceValue () {
155
125
156
- w , err := r .Worktree ()
157
- assert .Nil (err )
126
+ assert := assert .New (suite .T ())
158
127
159
- _ , err = w .Commit ("TEST" , testSignature )
128
+ _ , err := suite . Worktree .Commit ("TEST" , testSignature )
160
129
assert .Nil (err )
161
130
162
131
m := make (map [string ]* git.Repository , 1 )
163
- m ["today" ] = r
132
+ m ["today" ] = suite . Repo
164
133
msgs , err := getCommitMessages (m , "" , true , oneMinuteSince )
165
134
assert .Nil (err )
166
135
@@ -170,23 +139,18 @@ func TestResultsForMinimalSinceValue(t *testing.T) {
170
139
171
140
}
172
141
173
- func TestResultsForLargerSinceValue ( t * testing. T ) {
142
+ func ( suite * CommitSuite ) TestResultsForLargerSinceValue ( ) {
174
143
175
- assert := assert .New (t )
144
+ assert := assert .New (suite . T () )
176
145
177
- r , err := setupRepo ( thisRepo , t )
146
+ _ , err := suite . Worktree . Commit ( "TEST" , testSignature )
178
147
assert .Nil (err )
179
148
180
- w , err := r .Worktree ()
181
- assert .Nil (err )
182
-
183
- _ , err = w .Commit ("TEST" , testSignature )
184
- assert .Nil (err )
185
- _ , err = w .Commit ("TEST2" , testSignature )
149
+ _ , err = suite .Worktree .Commit ("TEST2" , testSignature )
186
150
assert .Nil (err )
187
151
188
152
m := make (map [string ]* git.Repository , 1 )
189
- m ["today" ] = r
153
+ m ["today" ] = suite . Repo
190
154
msgs , err := getCommitMessages (m , "" , true , twoDaysSince )
191
155
assert .Nil (err )
192
156
@@ -195,57 +159,86 @@ func TestResultsForLargerSinceValue(t *testing.T) {
195
159
196
160
}
197
161
198
- func TestShortCommitMessage ( t * testing. T ) {
162
+ func ( suite * CommitSuite ) TestShortCommitMessage ( ) {
199
163
200
- assert := assert .New (t )
201
-
202
- r , err := setupRepo (thisRepo , t )
203
- assert .Nil (err )
204
-
205
- w , err := r .Worktree ()
206
- assert .Nil (err )
164
+ assert := assert .New (suite .T ())
207
165
208
- _ , err = w .Commit ("TEST\n NOT SEEN" , testSignature )
166
+ _ , err := suite . Worktree .Commit ("TEST\n NOT SEEN" , testSignature )
209
167
assert .Nil (err )
210
168
211
169
m := make (map [string ]* git.Repository , 1 )
212
- m ["today" ] = r
170
+ m ["today" ] = suite . Repo
213
171
msgs , err := getCommitMessages (m , "" , true , oneMinuteSince )
214
172
assert .Nil (err )
215
173
216
174
assert .Equal (4 , len (msgs ["today" ][0 ])) // Length of 'TEST' = 4
217
175
}
218
176
219
- func TestLongCommitMessage ( t * testing. T ) {
177
+ func ( suite * CommitSuite ) TestLongCommitMessage ( ) {
220
178
221
- assert := assert .New (t )
179
+ assert := assert .New (suite . T () )
222
180
223
- r , err := setupRepo (thisRepo , t )
224
- assert .Nil (err )
225
-
226
- w , err := r .Worktree ()
227
- assert .Nil (err )
228
-
229
- _ , err = w .Commit ("TEST\n SEEN" , testSignature )
181
+ _ , err := suite .Worktree .Commit ("TEST\n SEEN" , testSignature )
230
182
assert .Nil (err )
231
183
232
184
m := make (map [string ]* git.Repository , 1 )
233
- m ["today" ] = r
185
+ m ["today" ] = suite . Repo
234
186
msgs , err := getCommitMessages (m , "" , false , oneMinuteSince )
235
187
assert .Nil (err )
236
188
237
189
assert .Equal ("TEST\n SEEN" , msgs ["today" ][0 ])
238
190
}
239
191
240
- func setupRepo (url string , t * testing.T ) (* git.Repository , error ) {
192
+ func TestCommitSuite (t * testing.T ) {
193
+ suite .Run (t , new (CommitSuite ))
194
+ }
241
195
242
- r , err := git .PlainClone (t .TempDir (), false , & git.CloneOptions {
243
- URL : url ,
244
- RecurseSubmodules : git .DefaultSubmoduleRecursionDepth ,
245
- })
246
- if err != nil {
247
- return nil , err
196
+ func TestValidatePathsProducesErrorWithInvalidDir (t * testing.T ) {
197
+ invalidPath := []string {"/does/not/exist" }
198
+ err := validatePaths (invalidPath )
199
+ assert .Error (t , err )
200
+ }
201
+
202
+ func TestValidatePathsProducesErrorWithNoGitDir (t * testing.T ) {
203
+ gitDirNotExist := []string {"/tmp" }
204
+ err := validatePaths (gitDirNotExist )
205
+ assert .Error (t , err )
206
+ }
207
+
208
+ func TestValidatePathsWithGitDir (t * testing.T ) {
209
+ gitDirExists := []string {currentDir } // Current directory is tracked by git
210
+ err := validatePaths (gitDirExists )
211
+ assert .Nil (t , err )
212
+ }
213
+
214
+ func TestGetRepositories (t * testing.T ) {
215
+ gitDir := []string {currentDir }
216
+ _ , err := getRepositories (gitDir )
217
+ assert .Nil (t , err )
218
+ }
219
+
220
+ func TestDoesContainAuthor (t * testing.T ) {
221
+ testCommit := & object.Commit {
222
+ Author : object.Signature {
223
+ Name : "testUser" ,
224
+
225
+ When : time .Now ().UTC (),
226
+ },
248
227
}
249
228
250
- return r , nil
229
+ got := containsAuthor (testCommit , "testUser" )
230
+ assert .True (t , got )
231
+ }
232
+
233
+ func TestDoesNotContainAuthor (t * testing.T ) {
234
+ testCommit := & object.Commit {
235
+ Author : object.Signature {
236
+ Name : "testUser" ,
237
+
238
+ When : time .Now ().UTC (),
239
+ },
240
+ }
241
+
242
+ got := containsAuthor (testCommit , "John" )
243
+ assert .False (t , got )
251
244
}
0 commit comments