Skip to content

Commit 12ae027

Browse files
committed
repo_reference: add unit tests
1 parent 35818b0 commit 12ae027

File tree

3 files changed

+215
-78
lines changed

3 files changed

+215
-78
lines changed

repo_reference.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func (r *Repository) ShowRefVerify(ref string, opts ...ShowRefVerifyOptions) (st
5858
return strings.Split(string(stdout), " ")[0], nil
5959
}
6060

61-
// HasBranch returns true if given branch exists in the repository.
61+
// HasReference returns true if given reference exists in the repository.
6262
func (r *Repository) HasReference(ref string, opts ...ShowRefVerifyOptions) bool {
6363
_, err := r.ShowRefVerify(ref, opts...)
6464
return err == nil
@@ -125,8 +125,8 @@ func (r *Repository) ShowRef(opts ...ShowRefOptions) ([]*Reference, error) {
125125
if opt.Tags {
126126
cmd.AddArgs("--tags")
127127
}
128+
cmd.AddArgs("--")
128129
if len(opt.Patterns) > 0 {
129-
cmd.AddArgs("--")
130130
cmd.AddArgs(opt.Patterns...)
131131
}
132132

repo_reference_test.go

+179
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
package git
2+
3+
import (
4+
"strconv"
5+
"testing"
6+
"time"
7+
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestRefShortName(t *testing.T) {
12+
tests := []struct {
13+
ref string
14+
expVal string
15+
}{
16+
{
17+
ref: "refs/heads/master",
18+
expVal: "master",
19+
},
20+
{
21+
ref: "refs/tags/v1.0.0",
22+
expVal: "v1.0.0",
23+
},
24+
{
25+
ref: "refs/pull/98",
26+
expVal: "refs/pull/98",
27+
},
28+
}
29+
for _, test := range tests {
30+
t.Run("", func(t *testing.T) {
31+
assert.Equal(t, test.expVal, RefShortName(test.ref))
32+
})
33+
}
34+
}
35+
36+
func TestRepository_HasReference(t *testing.T) {
37+
tests := []struct {
38+
ref string
39+
opt ShowRefVerifyOptions
40+
expVal bool
41+
}{
42+
{
43+
ref: RefsHeads + "master",
44+
expVal: true,
45+
},
46+
{
47+
ref: "master",
48+
expVal: false,
49+
},
50+
}
51+
for _, test := range tests {
52+
t.Run("", func(t *testing.T) {
53+
assert.Equal(t, test.expVal, testrepo.HasReference(test.ref, test.opt))
54+
})
55+
}
56+
}
57+
58+
func TestRepository_SymbolicRef(t *testing.T) {
59+
r, cleanup, err := setupTempRepo()
60+
if err != nil {
61+
t.Fatal(err)
62+
}
63+
defer cleanup()
64+
65+
// Get HEAD
66+
ref, err := r.SymbolicRef()
67+
if err != nil {
68+
t.Fatal(err)
69+
}
70+
assert.Equal(t, RefsHeads+"master", ref)
71+
72+
// Set a symbolic reference
73+
_, err = r.SymbolicRef(SymbolicRefOptions{
74+
Name: "TEST-REF",
75+
Ref: RefsHeads + "develop",
76+
})
77+
if err != nil {
78+
t.Fatal(err)
79+
}
80+
81+
// Get the symbolic reference we just set
82+
ref, err = r.SymbolicRef(SymbolicRefOptions{
83+
Name: "TEST-REF",
84+
})
85+
if err != nil {
86+
t.Fatal(err)
87+
}
88+
assert.Equal(t, RefsHeads+"develop", ref)
89+
}
90+
91+
func TestRepository_ShowRef(t *testing.T) {
92+
tests := []struct {
93+
opt ShowRefOptions
94+
expRefs []*Reference
95+
}{
96+
{
97+
opt: ShowRefOptions{
98+
Heads: true,
99+
Patterns: []string{"release-1.0"},
100+
},
101+
expRefs: []*Reference{
102+
{
103+
ID: "0eedd79eba4394bbef888c804e899731644367fe",
104+
Refspec: "refs/heads/release-1.0",
105+
},
106+
},
107+
},
108+
{
109+
opt: ShowRefOptions{
110+
Tags: true,
111+
Patterns: []string{"v1.0.0"},
112+
},
113+
expRefs: []*Reference{
114+
{
115+
ID: "0eedd79eba4394bbef888c804e899731644367fe",
116+
Refspec: "refs/tags/v1.0.0",
117+
},
118+
},
119+
},
120+
}
121+
for _, test := range tests {
122+
t.Run("", func(t *testing.T) {
123+
refs, err := testrepo.ShowRef(test.opt)
124+
if err != nil {
125+
t.Fatal(err)
126+
}
127+
128+
assert.Equal(t, test.expRefs, refs)
129+
})
130+
}
131+
}
132+
133+
func TestRepository_DeleteBranch(t *testing.T) {
134+
r, cleanup, err := setupTempRepo()
135+
if err != nil {
136+
t.Fatal(err)
137+
}
138+
defer cleanup()
139+
140+
tests := []struct {
141+
opt DeleteBranchOptions
142+
}{
143+
{
144+
opt: DeleteBranchOptions{
145+
Force: false,
146+
},
147+
},
148+
{
149+
opt: DeleteBranchOptions{
150+
Force: true,
151+
},
152+
},
153+
}
154+
for _, test := range tests {
155+
t.Run("", func(t *testing.T) {
156+
branch := strconv.Itoa(int(time.Now().UnixNano()))
157+
err := r.Checkout(branch, CheckoutOptions{
158+
BaseBranch: "master",
159+
})
160+
if err != nil {
161+
t.Fatal(err)
162+
}
163+
164+
assert.True(t, r.HasReference(RefsHeads+branch))
165+
166+
err = r.Checkout("master")
167+
if err != nil {
168+
t.Fatal(err)
169+
}
170+
171+
err = r.DeleteBranch(branch, test.opt)
172+
if err != nil {
173+
t.Fatal(err)
174+
}
175+
176+
assert.False(t, r.HasReference(RefsHeads+branch))
177+
})
178+
}
179+
}

0 commit comments

Comments
 (0)