Commit ec04b8b2 authored by Jordan Caussat's avatar Jordan Caussat

Update Jira service: change JiraTransitionID from int to string

parent a11ea797
......@@ -19,7 +19,6 @@ package gitlab
import (
"encoding/json"
"fmt"
"net/url"
"reflect"
"strconv"
"time"
......@@ -402,9 +401,7 @@ type JiraServiceProperties struct {
// UnmarshalJSON decodes the Jira Service Properties.
//
// The Gitlab API returns under some circumstances JiraIssueTransitionID
// as a string and sometimes as an integer. This function converts the
// returned value into an integer.
// This allows support of JiraIssueTransitionID for both type string (>11.9) and float64 (<11.9)
func (p *JiraServiceProperties) UnmarshalJSON(b []byte) error {
type Alias JiraServiceProperties
aux := &struct {
......@@ -419,16 +416,14 @@ func (p *JiraServiceProperties) UnmarshalJSON(b []byte) error {
}
switch id := aux.JiraIssueTransitionID.(type) {
case nil:
p.JiraIssueTransitionID = ""
case string:
converted, err := strconv.Atoi(id)
if err != nil {
return err
}
p.JiraIssueTransitionID = func(i int) *int { return &i }(converted)
p.JiraIssueTransitionID = id
case float64:
p.JiraIssueTransitionID = Int(int(id))
p.JiraIssueTransitionID = strconv.Itoa(int(id))
default:
return fmt.Errorf("failed to unmarshal JiraTransitionID of type: %s", reflect.TypeOf(id))
return fmt.Errorf("failed to unmarshal JiraTransitionID of type: %v", reflect.TypeOf(id))
}
return nil
......
......@@ -113,43 +113,60 @@ func TestGetJiraService(t *testing.T) {
mux, server, client := setup()
defer teardown(server)
mux.HandleFunc("/api/v4/projects/1/services/jira", func(w http.ResponseWriter, r *http.Request) {
mux.HandleFunc("/api/v4/projects/0/services/jira", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `{"id":1, "properties": {"jira_issue_transition_id": "2"}}`)
})
mux.HandleFunc("/api/v4/projects/2/services/jira", func(w http.ResponseWriter, r *http.Request) {
mux.HandleFunc("/api/v4/projects/1/services/jira", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `{"id":1, "properties": {"jira_issue_transition_id": 2}}`)
})
mux.HandleFunc("/api/v4/projects/3/services/jira", func(w http.ResponseWriter, r *http.Request) {
mux.HandleFunc("/api/v4/projects/2/services/jira", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `{"id":3, "properties": {"jira_issue_transition_id": "2,3"}}`)
fmt.Fprint(w, `{"id":1, "properties": {"jira_issue_transition_id": "2,3"}}`)
})
want := &JiraService{
Service: Service{ID: 1},
Properties: &JiraServiceProperties{
JiraIssueTransitionID: Int(2),
}}
service, _, err := client.Services.GetJiraService(1)
if err != nil {
t.Fatalf("Services.GetJiraService returns an error: %v", err)
}
if !reflect.DeepEqual(want, service) {
t.Errorf("Services.GetJiraService returned %+v, want %+v", service, want)
}
service, _, err = client.Services.GetJiraService(2)
if err != nil {
t.Fatalf("Services.GetJiraService returns an error: %v", err)
}
mux.HandleFunc("/api/v4/projects/3/services/jira", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `{"id":1, "properties": {}}`)
})
if !reflect.DeepEqual(want, service) {
t.Errorf("Services.GetJiraService returned %+v, want %+v", service, want)
want := []*JiraService{
&JiraService{
Service: Service{ID: 1},
Properties: &JiraServiceProperties{
JiraIssueTransitionID: "2",
},
},
&JiraService{
Service: Service{ID: 1},
Properties: &JiraServiceProperties{
JiraIssueTransitionID: "2",
},
},
&JiraService{
Service: Service{ID: 1},
Properties: &JiraServiceProperties{
JiraIssueTransitionID: "2,3",
},
},
&JiraService{
Service: Service{ID: 1},
Properties: &JiraServiceProperties{},
},
}
for testcase := 0; testcase < len(want); testcase++ {
service, _, err := client.Services.GetJiraService(testcase)
if err != nil {
t.Fatalf("Services.GetJiraService returns an error: %v", err)
}
if !reflect.DeepEqual(want[testcase], service) {
t.Errorf("Services.GetJiraService returned %+v, want %+v", service, want[testcase])
}
}
}
......@@ -167,7 +184,7 @@ func TestSetJiraService(t *testing.T) {
ProjectKey: String("as"),
Username: String("aas"),
Password: String("asd"),
JiraIssueTransitionID: String("2"),
JiraIssueTransitionID: String("2,3"),
}
_, err := client.Services.SetJiraService(1, opt)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment