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 14, 2022
1 parent 40de111 commit 135d592
Show file tree
Hide file tree
Showing 2 changed files with 166 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
162 changes: 162 additions & 0 deletions issues_test.go
Expand Up @@ -324,6 +324,60 @@ 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 @@ -354,6 +408,60 @@ func TestListProjectIssues(t *testing.T) {
t.Errorf("Issues.ListProjectIssues returned %+v, want %+v", issues, want)
}
}
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)
Expand Down Expand Up @@ -387,6 +495,60 @@ func TestListGroupIssues(t *testing.T) {
t.Errorf("Issues.ListGroupIssues returned %+v, want %+v", issues, want)
}
}
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)
Expand Down

0 comments on commit 135d592

Please sign in to comment.