Skip to content
This repository was archived by the owner on Jun 1, 2022. It is now read-only.

Commit 27c6e8d

Browse files
author
toshikazu.ohashi
committed
Add project variable command test
1 parent 3cc405b commit 27c6e8d

File tree

2 files changed

+179
-6
lines changed

2 files changed

+179
-6
lines changed

commands/project_variable_test.go

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
package commands
2+
3+
import (
4+
"testing"
5+
6+
"github.com/lighttiger2505/lab/git"
7+
lab "github.com/lighttiger2505/lab/gitlab"
8+
"github.com/lighttiger2505/lab/ui"
9+
gitlab "github.com/xanzy/go-gitlab"
10+
)
11+
12+
var mockInit = func() error {
13+
return nil
14+
}
15+
16+
var mockCurrentRemote = func() (*git.RemoteInfo, error) {
17+
return &git.RemoteInfo{
18+
Domain: "domain",
19+
NameSpace: "namespace",
20+
Repository: "repository",
21+
}, nil
22+
}
23+
24+
func TestProjectVariableCommand_Run_List(t *testing.T) {
25+
// Mocking interfaceis
26+
sampleProjectVariables := []*gitlab.ProjectVariable{
27+
&gitlab.ProjectVariable{Key: "foo", Value: "bar"},
28+
&gitlab.ProjectVariable{Key: "hoge", Value: "soge"},
29+
}
30+
mockClient := &lab.MockProjectVariableClient{
31+
MockGetVariables: func(repositoryName string) ([]*gitlab.ProjectVariable, error) {
32+
return sampleProjectVariables, nil
33+
},
34+
}
35+
mockProvider := &lab.MockProvider{
36+
MockInit: mockInit,
37+
MockGetCurrentRemote: mockCurrentRemote,
38+
MockGetProjectVariableClient: func(remote *git.RemoteInfo) (lab.ProjectVariable, error) {
39+
return mockClient, nil
40+
},
41+
}
42+
mockUI := ui.NewMockUi()
43+
c := ProjectVariableCommand{
44+
UI: mockUI,
45+
Provider: mockProvider,
46+
}
47+
48+
// Do command
49+
args := []string{""}
50+
if code := c.Run(args); code != 0 {
51+
t.Fatalf("wrong exit code. errors: \n%s", mockUI.ErrorWriter.String())
52+
}
53+
54+
// Assertion
55+
got := mockUI.Writer.String()
56+
want := "foo bar\nhoge soge\n"
57+
58+
if got != want {
59+
t.Fatalf("bad output value \nwant %#v \ngot %#v", want, got)
60+
}
61+
}
62+
63+
func TestProjectVariableCommand_Run_Create(t *testing.T) {
64+
// Mocking interfaceis
65+
sampleProjectVariable := &gitlab.ProjectVariable{Key: "foo", Value: "bar"}
66+
mockClient := &lab.MockProjectVariableClient{
67+
MockCreateVariable: func(repositoryName string, opt *gitlab.CreateVariableOptions) (*gitlab.ProjectVariable, error) {
68+
return sampleProjectVariable, nil
69+
},
70+
}
71+
mockProvider := &lab.MockProvider{
72+
MockInit: mockInit,
73+
MockGetCurrentRemote: mockCurrentRemote,
74+
MockGetProjectVariableClient: func(remote *git.RemoteInfo) (lab.ProjectVariable, error) {
75+
return mockClient, nil
76+
},
77+
}
78+
mockUI := ui.NewMockUi()
79+
c := ProjectVariableCommand{
80+
UI: mockUI,
81+
Provider: mockProvider,
82+
}
83+
84+
// Do command
85+
args := []string{"-a", "foo", "bar"}
86+
if code := c.Run(args); code != 0 {
87+
t.Fatalf("wrong exit code. errors: \n%s", mockUI.ErrorWriter.String())
88+
}
89+
90+
// Assertion
91+
got := mockUI.Writer.String()
92+
want := ""
93+
94+
if got != want {
95+
t.Fatalf("bad output value \nwant %#v \ngot %#v", want, got)
96+
}
97+
}
98+
99+
func TestProjectVariableCommand_Run_Update(t *testing.T) {
100+
// Mocking interfaceis
101+
sampleProjectVariable := &gitlab.ProjectVariable{Key: "foo", Value: "bar"}
102+
mockClient := &lab.MockProjectVariableClient{
103+
MockUpdateVariable: func(repositoryName string, key string, opt *gitlab.UpdateVariableOptions) (*gitlab.ProjectVariable, error) {
104+
return sampleProjectVariable, nil
105+
},
106+
}
107+
mockProvider := &lab.MockProvider{
108+
MockInit: mockInit,
109+
MockGetCurrentRemote: mockCurrentRemote,
110+
MockGetProjectVariableClient: func(remote *git.RemoteInfo) (lab.ProjectVariable, error) {
111+
return mockClient, nil
112+
},
113+
}
114+
mockUI := ui.NewMockUi()
115+
c := ProjectVariableCommand{
116+
UI: mockUI,
117+
Provider: mockProvider,
118+
}
119+
120+
// Do command
121+
args := []string{"-u", "foo", "bar"}
122+
if code := c.Run(args); code != 0 {
123+
t.Fatalf("wrong exit code. errors: \n%s", mockUI.ErrorWriter.String())
124+
}
125+
126+
// Assertion
127+
got := mockUI.Writer.String()
128+
want := ""
129+
130+
if got != want {
131+
t.Fatalf("bad output value \nwant %#v \ngot %#v", want, got)
132+
}
133+
}
134+
135+
func TestProjectVariableCommand_Run_Remove(t *testing.T) {
136+
// Mocking interfaceis
137+
mockClient := &lab.MockProjectVariableClient{
138+
MockRemoveVariable: func(repositoryName string, key string) error {
139+
return nil
140+
},
141+
}
142+
mockProvider := &lab.MockProvider{
143+
MockInit: mockInit,
144+
MockGetCurrentRemote: mockCurrentRemote,
145+
MockGetProjectVariableClient: func(remote *git.RemoteInfo) (lab.ProjectVariable, error) {
146+
return mockClient, nil
147+
},
148+
}
149+
mockUI := ui.NewMockUi()
150+
c := ProjectVariableCommand{
151+
UI: mockUI,
152+
Provider: mockProvider,
153+
}
154+
155+
// Do command
156+
args := []string{"-d", "foo"}
157+
if code := c.Run(args); code != 0 {
158+
t.Fatalf("wrong exit code. errors: \n%s", mockUI.ErrorWriter.String())
159+
}
160+
161+
// Assertion
162+
got := mockUI.Writer.String()
163+
want := ""
164+
165+
if got != want {
166+
t.Fatalf("bad output value \nwant %#v \ngot %#v", want, got)
167+
}
168+
}

gitlab/gitlab.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,13 @@ func ParceRepositoryFullName(webURL string) string {
195195

196196
type MockProvider struct {
197197
Provider
198-
MockInit func() error
199-
MockGetSpecificRemote func(namespace, project string) *git.RemoteInfo
200-
MockGetCurrentRemote func() (*git.RemoteInfo, error)
201-
MockGetClient func(remote *git.RemoteInfo) (Client, error)
202-
MockGetIssueClient func(remote *git.RemoteInfo) (Issue, error)
203-
MockGetMergeRequestClient func(remote *git.RemoteInfo) (MergeRequest, error)
198+
MockInit func() error
199+
MockGetSpecificRemote func(namespace, project string) *git.RemoteInfo
200+
MockGetCurrentRemote func() (*git.RemoteInfo, error)
201+
MockGetClient func(remote *git.RemoteInfo) (Client, error)
202+
MockGetIssueClient func(remote *git.RemoteInfo) (Issue, error)
203+
MockGetMergeRequestClient func(remote *git.RemoteInfo) (MergeRequest, error)
204+
MockGetProjectVariableClient func(remote *git.RemoteInfo) (ProjectVariable, error)
204205
}
205206

206207
func (m *MockProvider) Init() error {
@@ -222,3 +223,7 @@ func (m *MockProvider) GetIssueClient(remote *git.RemoteInfo) (Issue, error) {
222223
func (m *MockProvider) GetMergeRequestClient(remote *git.RemoteInfo) (MergeRequest, error) {
223224
return m.MockGetMergeRequestClient(remote)
224225
}
226+
227+
func (m *MockProvider) GetProjectVariableClient(remote *git.RemoteInfo) (ProjectVariable, error) {
228+
return m.MockGetProjectVariableClient(remote)
229+
}

0 commit comments

Comments
 (0)