diff --git a/examples/jql/main.go b/examples/jql/main.go new file mode 100644 index 00000000..9cb05f54 --- /dev/null +++ b/examples/jql/main.go @@ -0,0 +1,42 @@ +package main + +import ( + "fmt" + + jira "github.com/andygrunwald/go-jira" +) + +func main() { + jiraClient, _ := jira.NewClient(nil, "https://issues.apache.org/jira/") + + // Running JQL query + + jql := "project = Mesos and type = Bug and Status NOT IN (Resolved)" + fmt.Printf("Usecase: Running a JQL query '%s'\n", jql) + issues, resp, err := jiraClient.Issue.Search(jql, nil) + if err != nil { + panic(err) + } + outputResponse(issues, resp) + + fmt.Println("") + fmt.Println("") + + // Running an empty JQL query to get all tickets + jql = "" + fmt.Printf("Usecase: Running an empty JQL query to get all tickets\n") + issues, resp, err = jiraClient.Issue.Search(jql, nil) + if err != nil { + panic(err) + } + outputResponse(issues, resp) +} + +func outputResponse(issues []jira.Issue, resp *jira.Response) { + fmt.Printf("Call to %s\n", resp.Request.URL) + fmt.Printf("Response Code: %d\n", resp.StatusCode) + fmt.Println("==================================") + for _, i := range issues { + fmt.Printf("%s (%s/%s): %+v\n", i.Key, i.Fields.Type.Name, i.Fields.Priority.Name, i.Fields.Summary) + } +} diff --git a/issue.go b/issue.go index 2c04888e..e958f2a8 100644 --- a/issue.go +++ b/issue.go @@ -963,7 +963,7 @@ func (s *IssueService) Search(jql string, options *SearchOptions) ([]Issue, *Res } uv := url.Values{} if jql != "" { - uv.Add("jql", url.QueryEscape(jql)) + uv.Add("jql", jql) } if options != nil { diff --git a/issue_test.go b/issue_test.go index 6c95491c..ba2526f1 100644 --- a/issue_test.go +++ b/issue_test.go @@ -598,13 +598,13 @@ func TestIssueService_Search(t *testing.T) { defer teardown() testMux.HandleFunc("/rest/api/2/search", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "GET") - testRequestURL(t, r, "/rest/api/2/search?expand=foo&jql=something&maxResults=40&startAt=1") + testRequestURL(t, r, "/rest/api/2/search?expand=foo&jql=type+%3D+Bug+and+Status+NOT+IN+%28Resolved%29&maxResults=40&startAt=1") w.WriteHeader(http.StatusOK) fmt.Fprint(w, `{"expand": "schema,names","startAt": 1,"maxResults": 40,"total": 6,"issues": [{"expand": "html","id": "10230","self": "http://kelpie9:8081/rest/api/2/issue/BULK-62","key": "BULK-62","fields": {"summary": "testing","timetracking": null,"issuetype": {"self": "http://kelpie9:8081/rest/api/2/issuetype/5","id": "5","description": "The sub-task of the issue","iconUrl": "http://kelpie9:8081/images/icons/issue_subtask.gif","name": "Sub-task","subtask": true},"customfield_10071": null}},{"expand": "html","id": "10004","self": "http://kelpie9:8081/rest/api/2/issue/BULK-47","key": "BULK-47","fields": {"summary": "Cheese v1 2.0 issue","timetracking": null,"issuetype": {"self": "http://kelpie9:8081/rest/api/2/issuetype/3","id": "3","description": "A task that needs to be done.","iconUrl": "http://kelpie9:8081/images/icons/task.gif","name": "Task","subtask": false}}}]}`) }) opt := &SearchOptions{StartAt: 1, MaxResults: 40, Expand: "foo"} - _, resp, err := testClient.Issue.Search("something", opt) + _, resp, err := testClient.Issue.Search("type = Bug and Status NOT IN (Resolved)", opt) if resp == nil { t.Errorf("Response given: %+v", resp)