Skip to content

Commit cf67e75

Browse files
authored
refactor: integration tests to CommitSuite (#9)
These longer tests now run the setup before each test to ensure that they have a fresh cloned repository each time
1 parent 7144cc0 commit cf67e75

File tree

1 file changed

+105
-112
lines changed

1 file changed

+105
-112
lines changed

today_test.go

+105-112
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/go-git/go-git/v5"
99
"github.com/go-git/go-git/v5/plumbing/object"
1010
"github.com/stretchr/testify/assert"
11+
"github.com/stretchr/testify/suite"
1112
)
1213

1314
// TODO: Cleanup the larger tests which use setupRepo func into `suite` tests.
@@ -30,137 +31,105 @@ const (
3031
twoDaysSince time.Duration = 48 * time.Hour
3132
)
3233

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
3740
}
3841

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) {
4443

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+
}
5051

51-
func TestGetRepositories(t *testing.T) {
52-
gitDir := []string{currentDir}
53-
_, err := getRepositories(gitDir)
54-
assert.Nil(t, err)
52+
return r, nil
5553
}
5654

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)
6461
}
6562

66-
got := containsAuthor(testCommit, "testUser")
67-
assert.True(t, got)
68-
}
63+
suite.Repo = r
6964

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)
7768
}
78-
79-
got := containsAuthor(testCommit, "John")
80-
assert.False(t, got)
69+
suite.Worktree = w
8170
}
8271

83-
func TestFullContainsAuthor(t *testing.T) {
84-
85-
assert := assert.New(t)
72+
func (suite *CommitSuite) TestFullContainsAuthor() {
8673

87-
r, err := setupRepo(thisRepo, t)
88-
assert.Nil(err)
74+
assert := assert.New(suite.T())
8975

90-
w, err := r.Worktree()
76+
w, err := suite.Repo.Worktree()
9177
assert.Nil(err)
9278

9379
_, err = w.Commit("TEST", testSignature)
9480
assert.Nil(err)
9581

9682
m := make(map[string]*git.Repository, 1)
97-
m["today"] = r
83+
m["today"] = suite.Repo
9884
msgs, err := getCommitMessages(m, testSignature.Author.Name, true, oneMinuteSince)
9985
assert.Nil(err)
10086

10187
assert.Contains(msgs, "today")
10288
assert.GreaterOrEqual(2, len(msgs)) // Our 2 commits here and any others which are within 48 hours.
10389

10490
}
105-
func TestFullContainsAuthorHasNoCommits(t *testing.T) {
10691

107-
assert := assert.New(t)
92+
func (suite *CommitSuite) TestFullContainsAuthorHasNoCommits() {
10893

109-
r, err := setupRepo(thisRepo, t)
110-
assert.Nil(err)
94+
assert := assert.New(suite.T())
11195

112-
w, err := r.Worktree()
113-
assert.Nil(err)
114-
115-
_, err = w.Commit("TEST", testSignature)
96+
_, err := suite.Worktree.Commit("TEST", testSignature)
11697
assert.Nil(err)
11798

11899
m := make(map[string]*git.Repository, 1)
119-
m["today"] = r
100+
m["today"] = suite.Repo
120101
msgs, err := getCommitMessages(m, "INVALID_COMMIT_AUTHOR", true, oneMinuteSince)
121102
assert.Nil(err)
122103

123104
assert.Contains(msgs, "today")
124105
assert.Equal(0, len(msgs["today"]))
125-
126106
}
127107

128-
func TestNoResultsForZeroSinceValue(t *testing.T) {
129-
130-
assert := assert.New(t)
108+
func (suite *CommitSuite) TestNoResultsForZeroSinceValue() {
131109

132-
r, err := setupRepo(thisRepo, t)
133-
assert.Nil(err)
110+
assert := assert.New(suite.T())
134111

135-
w, err := r.Worktree()
136-
assert.Nil(err)
137-
138-
_, err = w.Commit("TEST", testSignature)
112+
_, err := suite.Worktree.Commit("TEST", testSignature)
139113
assert.Nil(err)
140114

141115
m := make(map[string]*git.Repository, 1)
142-
m["today"] = r
116+
m["today"] = suite.Repo
143117
msgs, err := getCommitMessages(m, "", true, zeroTime)
144118
assert.Nil(err)
145119

146120
assert.Equal(0, len(msgs["today"]))
147121

148122
}
149-
func TestResultsForMinimalSinceValue(t *testing.T) {
150-
151-
assert := assert.New(t)
152123

153-
r, err := setupRepo(thisRepo, t)
154-
assert.Nil(err)
124+
func (suite *CommitSuite) TestResultsForMinimalSinceValue() {
155125

156-
w, err := r.Worktree()
157-
assert.Nil(err)
126+
assert := assert.New(suite.T())
158127

159-
_, err = w.Commit("TEST", testSignature)
128+
_, err := suite.Worktree.Commit("TEST", testSignature)
160129
assert.Nil(err)
161130

162131
m := make(map[string]*git.Repository, 1)
163-
m["today"] = r
132+
m["today"] = suite.Repo
164133
msgs, err := getCommitMessages(m, "", true, oneMinuteSince)
165134
assert.Nil(err)
166135

@@ -170,23 +139,18 @@ func TestResultsForMinimalSinceValue(t *testing.T) {
170139

171140
}
172141

173-
func TestResultsForLargerSinceValue(t *testing.T) {
142+
func (suite *CommitSuite) TestResultsForLargerSinceValue() {
174143

175-
assert := assert.New(t)
144+
assert := assert.New(suite.T())
176145

177-
r, err := setupRepo(thisRepo, t)
146+
_, err := suite.Worktree.Commit("TEST", testSignature)
178147
assert.Nil(err)
179148

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)
186150
assert.Nil(err)
187151

188152
m := make(map[string]*git.Repository, 1)
189-
m["today"] = r
153+
m["today"] = suite.Repo
190154
msgs, err := getCommitMessages(m, "", true, twoDaysSince)
191155
assert.Nil(err)
192156

@@ -195,57 +159,86 @@ func TestResultsForLargerSinceValue(t *testing.T) {
195159

196160
}
197161

198-
func TestShortCommitMessage(t *testing.T) {
162+
func (suite *CommitSuite) TestShortCommitMessage() {
199163

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())
207165

208-
_, err = w.Commit("TEST\nNOT SEEN", testSignature)
166+
_, err := suite.Worktree.Commit("TEST\nNOT SEEN", testSignature)
209167
assert.Nil(err)
210168

211169
m := make(map[string]*git.Repository, 1)
212-
m["today"] = r
170+
m["today"] = suite.Repo
213171
msgs, err := getCommitMessages(m, "", true, oneMinuteSince)
214172
assert.Nil(err)
215173

216174
assert.Equal(4, len(msgs["today"][0])) // Length of 'TEST' = 4
217175
}
218176

219-
func TestLongCommitMessage(t *testing.T) {
177+
func (suite *CommitSuite) TestLongCommitMessage() {
220178

221-
assert := assert.New(t)
179+
assert := assert.New(suite.T())
222180

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\nSEEN", testSignature)
181+
_, err := suite.Worktree.Commit("TEST\nSEEN", testSignature)
230182
assert.Nil(err)
231183

232184
m := make(map[string]*git.Repository, 1)
233-
m["today"] = r
185+
m["today"] = suite.Repo
234186
msgs, err := getCommitMessages(m, "", false, oneMinuteSince)
235187
assert.Nil(err)
236188

237189
assert.Equal("TEST\nSEEN", msgs["today"][0])
238190
}
239191

240-
func setupRepo(url string, t *testing.T) (*git.Repository, error) {
192+
func TestCommitSuite(t *testing.T) {
193+
suite.Run(t, new(CommitSuite))
194+
}
241195

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+
},
248227
}
249228

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)
251244
}

0 commit comments

Comments
 (0)