diff --git a/github/sub_issue.go b/github/sub_issue.go index ae966dade19..f56980f89a3 100644 --- a/github/sub_issue.go +++ b/github/sub_issue.go @@ -138,3 +138,24 @@ func (s *SubIssueService) Reprioritize(ctx context.Context, owner, repo string, return si, resp, nil } + +// GetParentIssue gets the parent issue of a sub-issue. +// +// GitHub API docs: https://docs.github.com/rest/issues/sub-issues?apiVersion=2022-11-28#get-parent-issue +// +//meta:operation GET /repos/{owner}/{repo}/issues/{issue_number}/parent +func (s *SubIssueService) GetParentIssue(ctx context.Context, owner, repo string, subIssueNumber int64) (*Issue, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/%v/parent", owner, repo, subIssueNumber) + req, err := s.client.NewRequest(ctx, "GET", u, nil) + if err != nil { + return nil, nil, err + } + + var parentIssue *Issue + resp, err := s.client.Do(req, &parentIssue) + if err != nil { + return nil, resp, err + } + + return parentIssue, resp, nil +} diff --git a/github/sub_issue_test.go b/github/sub_issue_test.go index fd3c2784f52..faeea077d6e 100644 --- a/github/sub_issue_test.go +++ b/github/sub_issue_test.go @@ -156,3 +156,33 @@ func TestSubIssuesService_Reprioritize(t *testing.T) { return resp, err }) } + +func TestSubIssuesService_GetParentIssue(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/repos/o/r/issues/42/parent", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `{"id":1, "number":1}`) + }) + + ctx := t.Context() + got, _, err := client.SubIssue.GetParentIssue(ctx, "o", "r", 42) + if err != nil { + t.Errorf("SubIssues.GetParentIssue returned error: %v", err) + } + + want := &Issue{Number: Ptr(1), ID: Ptr(int64(1))} + if !cmp.Equal(got, want) { + t.Errorf("SubIssues.GetParentIssue = %+v, want %+v", got, want) + } + + const methodName = "GetParentIssue" + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.SubIssue.GetParentIssue(ctx, "o", "r", 42) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +}