Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(issues): iteration field, search by iteration #1505

Merged
merged 1 commit into from Jul 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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