Skip to content

Commit 6568d26

Browse files
BouwdieSander van Harmelen
authored and
Sander van Harmelen
committed
xanzy#142 Add Jira service (xanzy#231)
1 parent 93f2d52 commit 6568d26

File tree

2 files changed

+140
-0
lines changed

2 files changed

+140
-0
lines changed

services.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,3 +315,88 @@ func (s *ServicesService) DeleteSlackService(pid interface{}, options ...OptionF
315315

316316
return s.client.Do(req, nil)
317317
}
318+
319+
// JiraService represents Jira service settings.
320+
type JiraService struct {
321+
Service
322+
Properties *JiraServiceProperties `json:"properties"`
323+
}
324+
325+
// JiraServiceProperties represents Jira specific properties.
326+
type JiraServiceProperties struct {
327+
Url *string `url:"url,omitempty" json:"url,omitempty"`
328+
ProjectKey *string `url:"project_key,omitempty" json:"project_key,omitempty" `
329+
Username *string `url:"username,omitempty" json:"username,omitempty" `
330+
Password *string `url:"password,omitempty" json:"password,omitempty" `
331+
IssueTransitionId *string `url:"jira_issue_transition_id,omitempty" json:"jira_issue_transition_id,omitempty"`
332+
}
333+
334+
// GetJiraService gets Jira service settings for a project.
335+
//
336+
// GitLab API docs:
337+
// https://docs.gitlab.com/ce/api/services.html#get-jira-service-settings
338+
func (s *ServicesService) GetJiraService(pid interface{}, options ...OptionFunc) (*JiraService, *Response, error) {
339+
project, err := parseID(pid)
340+
if err != nil {
341+
return nil, nil, err
342+
}
343+
u := fmt.Sprintf("projects/%s/services/jira", url.QueryEscape(project))
344+
345+
req, err := s.client.NewRequest("GET", u, nil, options)
346+
if err != nil {
347+
return nil, nil, err
348+
}
349+
350+
svc := new(JiraService)
351+
resp, err := s.client.Do(req, svc)
352+
if err != nil {
353+
return nil, resp, err
354+
}
355+
356+
return svc, resp, err
357+
}
358+
359+
// SetJiraServiceOptions represents the available SetJiraService()
360+
// options.
361+
//
362+
// GitLab API docs:
363+
// https://docs.gitlab.com/ce/api/services.html#edit-jira-service
364+
type SetJiraServiceOptions JiraServiceProperties
365+
366+
// SetJiraService sets Jira service for a project
367+
//
368+
// GitLab API docs:
369+
// https://docs.gitlab.com/ce/api/services.html#edit-jira-service
370+
func (s *ServicesService) SetJiraService(pid interface{}, opt *SetJiraServiceOptions, options ...OptionFunc) (*Response, error) {
371+
project, err := parseID(pid)
372+
if err != nil {
373+
return nil, err
374+
}
375+
u := fmt.Sprintf("projects/%s/services/jira", url.QueryEscape(project))
376+
377+
req, err := s.client.NewRequest("PUT", u, opt, options)
378+
if err != nil {
379+
return nil, err
380+
}
381+
382+
return s.client.Do(req, nil)
383+
}
384+
385+
// DeleteJiraService deletes Jira service for project.
386+
//
387+
// GitLab API docs:
388+
// https://docs.gitlab.com/ce/api/services.html#delete-jira-service
389+
func (s *ServicesService) DeleteJiraService(pid interface{}, options ...OptionFunc) (*Response, error) {
390+
project, err := parseID(pid)
391+
if err != nil {
392+
return nil, err
393+
}
394+
u := fmt.Sprintf("projects/%s/services/jira", url.QueryEscape(project))
395+
396+
req, err := s.client.NewRequest("DELETE", u, nil, options)
397+
if err != nil {
398+
return nil, err
399+
}
400+
401+
return s.client.Do(req, nil)
402+
}

services_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,58 @@ func TestDeleteSlackService(t *testing.T) {
108108
t.Fatalf("Services.DeleteSlackService returns an error: %v", err)
109109
}
110110
}
111+
112+
func TestGetJiraService(t *testing.T) {
113+
mux, server, client := setup()
114+
defer teardown(server)
115+
116+
mux.HandleFunc("/projects/1/services/jira", func(w http.ResponseWriter, r *http.Request) {
117+
testMethod(t, r, "GET")
118+
fmt.Fprint(w, `{"id":1}`)
119+
})
120+
want := &JiraService{Service: Service{ID: 1}}
121+
122+
service, _, err := client.Services.GetJiraService(1)
123+
if err != nil {
124+
t.Fatalf("Services.GetJiraService returns an error: %v", err)
125+
}
126+
if !reflect.DeepEqual(want, service) {
127+
t.Errorf("Services.GetJiraService returned %+v, want %+v", service, want)
128+
}
129+
}
130+
131+
func TestSetJiraService(t *testing.T) {
132+
mux, server, client := setup()
133+
defer teardown(server)
134+
135+
mux.HandleFunc("/projects/1/services/jira", func(w http.ResponseWriter, r *http.Request) {
136+
testMethod(t, r, "PUT")
137+
})
138+
139+
opt := &SetJiraServiceOptions{
140+
Url: String("asd"),
141+
ProjectKey: String("as"),
142+
Username: String("aas"),
143+
Password: String("asd"),
144+
IssueTransitionId: String("asd"),
145+
}
146+
147+
_, err := client.Services.SetJiraService(1, opt)
148+
if err != nil {
149+
t.Fatalf("Services.SetJiraService returns an error: %v", err)
150+
}
151+
}
152+
153+
func TestDeleteJiraService(t *testing.T) {
154+
mux, server, client := setup()
155+
defer teardown(server)
156+
157+
mux.HandleFunc("/projects/1/services/jira", func(w http.ResponseWriter, r *http.Request) {
158+
testMethod(t, r, "DELETE")
159+
})
160+
161+
_, err := client.Services.DeleteJiraService(1)
162+
if err != nil {
163+
t.Fatalf("Services.DeleteJiraService returns an error: %v", err)
164+
}
165+
}

0 commit comments

Comments
 (0)