Skip to content

Commit

Permalink
feat(issues): iteration field, search by iteration
Browse files Browse the repository at this point in the history
Add missing Iteration field to Issue struct and support searching by
iteration ID.

Add tests for new features.
  • Loading branch information
lizalc committed Jul 15, 2022
1 parent 40de111 commit 702e1be
Show file tree
Hide file tree
Showing 2 changed files with 170 additions and 0 deletions.
4 changes: 4 additions & 0 deletions issues.go
Expand Up @@ -120,6 +120,7 @@ type Issue struct {
MergeRequestCount int `json:"merge_requests_count"`
EpicIssueID int `json:"epic_issue_id"`
Epic *Epic `json:"epic"`
Iteration *GroupIteration `json:"iteration"`
TaskCompletionStatus *TasksCompletionStatus `json:"task_completion_status"`
}

Expand Down Expand Up @@ -232,6 +233,7 @@ type ListIssuesOptions struct {
UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
Confidential *bool `url:"confidential,omitempty" json:"confidential,omitempty"`
IssueType *string `url:"issue_type,omitempty" json:"issue_type,omitempty"`
IterationID *int `url:"iteration_id,omitempty" json:"iteration_id,omitempty"`
}

// ListIssues gets all issues created by authenticated user. This function
Expand Down Expand Up @@ -284,6 +286,7 @@ type ListGroupIssuesOptions struct {
UpdatedAfter *time.Time `url:"updated_after,omitempty" json:"updated_after,omitempty"`
UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
IssueType *string `url:"issue_type,omitempty" json:"issue_type,omitempty"`
IterationID *int `url:"iteration_id,omitempty" json:"iteration_id,omitempty"`
}

// ListGroupIssues gets a list of group issues. This function accepts
Expand Down Expand Up @@ -343,6 +346,7 @@ type ListProjectIssuesOptions struct {
UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
Confidential *bool `url:"confidential,omitempty" json:"confidential,omitempty"`
IssueType *string `url:"issue_type,omitempty" json:"issue_type,omitempty"`
IterationID *int `url:"iteration_id,omitempty" json:"iteration_id,omitempty"`
}

// ListProjectIssues gets a list of project issues. This function accepts
Expand Down
166 changes: 166 additions & 0 deletions issues_test.go
Expand Up @@ -324,6 +324,62 @@ func TestListIssuesSearchInDescription(t *testing.T) {
t.Errorf("Issues.ListIssues returned %+v, want %+v", issues, want)
}
}

func TestListIssuesSearchByIterationID(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/issues", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
testURL(t, r, "/api/v4/issues?iteration_id=90")
fmt.Fprint(w, `
[
{
"id": 1,
"title": "A Test Issue Title",
"description": "This is the description for the issue",
"iteration": {
"id":90,
"iid":4,
"sequence":2,
"group_id":162,
"state":2,
"web_url":"https://gitlab.com/groups/my-group/-/iterations/90"
}
}
]`,
)
})

listProjectIssue := &ListIssuesOptions{
IterationID: Int(90),
}

issues, _, err := client.Issues.ListIssues(listProjectIssue)

if err != nil {
log.Fatal(err)
}

want := []*Issue{{
ID: 1,
Title: "A Test Issue Title",
Description: "This is the description for the issue",
Iteration: &GroupIteration{
ID: 90,
IID: 4,
Sequence: 2,
GroupID: 162,
State: 2,
WebURL: "https://gitlab.com/groups/my-group/-/iterations/90",
},
}}

if !reflect.DeepEqual(want, issues) {
t.Errorf("Issues.ListIssues returned %+v, want %+v", issues, want)
}
}

func TestListProjectIssues(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)
Expand Down Expand Up @@ -355,6 +411,61 @@ func TestListProjectIssues(t *testing.T) {
}
}

func TestListProjectIssuesSearchByIterationID(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/projects/1/issues", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
testURL(t, r, "/api/v4/projects/1/issues?iteration_id=90")
fmt.Fprint(w, `
[
{
"id": 1,
"title": "A Test Issue Title",
"description": "This is the description for the issue",
"iteration": {
"id":90,
"iid":4,
"sequence":2,
"group_id":162,
"state":2,
"web_url":"https://gitlab.com/groups/my-group/-/iterations/90"
}
}
]`,
)
})

listProjectIssue := &ListProjectIssuesOptions{
IterationID: Int(90),
}

issues, _, err := client.Issues.ListProjectIssues(1 ,listProjectIssue)

if err != nil {
log.Fatal(err)
}

want := []*Issue{{
ID: 1,
Title: "A Test Issue Title",
Description: "This is the description for the issue",
Iteration: &GroupIteration{
ID: 90,
IID: 4,
Sequence: 2,
GroupID: 162,
State: 2,
WebURL: "https://gitlab.com/groups/my-group/-/iterations/90",
},
}}

if !reflect.DeepEqual(want, issues) {
t.Errorf("Issues.ListIssues returned %+v, want %+v", issues, want)
}
}

func TestListGroupIssues(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)
Expand Down Expand Up @@ -388,6 +499,61 @@ func TestListGroupIssues(t *testing.T) {
}
}

func TestListGroupIssuesSearchByIterationID(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/groups/1/issues", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
testURL(t, r, "/api/v4/groups/1/issues?iteration_id=90")
fmt.Fprint(w, `
[
{
"id": 1,
"title": "A Test Issue Title",
"description": "This is the description for the issue",
"iteration": {
"id":90,
"iid":4,
"sequence":2,
"group_id":162,
"state":2,
"web_url":"https://gitlab.com/groups/my-group/-/iterations/90"
}
}
]`,
)
})

listProjectIssue := &ListGroupIssuesOptions{
IterationID: Int(90),
}

issues, _, err := client.Issues.ListGroupIssues(1, listProjectIssue)

if err != nil {
log.Fatal(err)
}

want := []*Issue{{
ID: 1,
Title: "A Test Issue Title",
Description: "This is the description for the issue",
Iteration: &GroupIteration{
ID: 90,
IID: 4,
Sequence: 2,
GroupID: 162,
State: 2,
WebURL: "https://gitlab.com/groups/my-group/-/iterations/90",
},
}}

if !reflect.DeepEqual(want, issues) {
t.Errorf("Issues.ListIssues returned %+v, want %+v", issues, want)
}
}

func TestCreateIssue(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)
Expand Down

0 comments on commit 702e1be

Please sign in to comment.