From 6f83310cde200624cf177653f1ab5cba7859bd9b Mon Sep 17 00:00:00 2001 From: Lachlan Cooper Date: Mon, 9 Oct 2023 14:44:31 +1100 Subject: [PATCH 1/3] Support options for GetCodeownersErrors --- github/repos_codeowners.go | 15 ++++++++++++++- github/repos_codeowners_test.go | 6 +++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/github/repos_codeowners.go b/github/repos_codeowners.go index 835d56e164c..1c3f78abd9b 100644 --- a/github/repos_codeowners.go +++ b/github/repos_codeowners.go @@ -10,6 +10,14 @@ import ( "fmt" ) +// GetCodeownersErrorsOptions specifies the optional parameters to the +// RepositoriesService.GetCodeownersErrors method. +type GetCodeownersErrorsOptions struct { + // A branch, tag or commit name used to determine which version of the CODEOWNERS file to use. + // Default: the repository's default branch (e.g. main). + Ref string `url:"ref,omitempty"` +} + // CodeownersErrors represents a list of syntax errors detected in the CODEOWNERS file. type CodeownersErrors struct { Errors []*CodeownersError `json:"errors"` @@ -29,8 +37,13 @@ type CodeownersError struct { // GetCodeownersErrors lists any syntax errors that are detected in the CODEOWNERS file. // // GitHub API docs: https://docs.github.com/en/rest/repos/repos#list-codeowners-errors -func (s *RepositoriesService) GetCodeownersErrors(ctx context.Context, owner, repo string) (*CodeownersErrors, *Response, error) { +func (s *RepositoriesService) GetCodeownersErrors(ctx context.Context, owner, repo string, opts *GetCodeownersErrorsOptions) (*CodeownersErrors, *Response, error) { u := fmt.Sprintf("repos/%v/%v/codeowners/errors", owner, repo) + u, err := addOptions(u, opts) + if err != nil { + return nil, nil, err + } + req, err := s.client.NewRequest("GET", u, nil) if err != nil { return nil, nil, err diff --git a/github/repos_codeowners_test.go b/github/repos_codeowners_test.go index 62c58c5b192..cdeee4e3317 100644 --- a/github/repos_codeowners_test.go +++ b/github/repos_codeowners_test.go @@ -38,7 +38,7 @@ func TestRepositoriesService_GetCodeownersErrors(t *testing.T) { }) ctx := context.Background() - codeownersErrors, _, err := client.Repositories.GetCodeownersErrors(ctx, "o", "r") + codeownersErrors, _, err := client.Repositories.GetCodeownersErrors(ctx, "o", "r", nil) if err != nil { t.Errorf("Repositories.GetCodeownersErrors returned error: %v", err) } @@ -62,12 +62,12 @@ func TestRepositoriesService_GetCodeownersErrors(t *testing.T) { const methodName = "GetCodeownersErrors" testBadOptions(t, methodName, func() (err error) { - _, _, err = client.Repositories.GetCodeownersErrors(ctx, "\n", "\n") + _, _, err = client.Repositories.GetCodeownersErrors(ctx, "\n", "\n", nil) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Repositories.GetCodeownersErrors(ctx, "o", "r") + got, resp, err := client.Repositories.GetCodeownersErrors(ctx, "o", "r", nil) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } From 0b6bb0523692e15083dbd26aaa1fe240e9ad4c24 Mon Sep 17 00:00:00 2001 From: Lachlan Cooper Date: Mon, 9 Oct 2023 14:59:59 +1100 Subject: [PATCH 2/3] Improve test coverage --- github/repos_codeowners_test.go | 64 ++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/github/repos_codeowners_test.go b/github/repos_codeowners_test.go index cdeee4e3317..fa5f6677eb3 100644 --- a/github/repos_codeowners_test.go +++ b/github/repos_codeowners_test.go @@ -14,7 +14,7 @@ import ( "github.com/google/go-cmp/cmp" ) -func TestRepositoriesService_GetCodeownersErrors(t *testing.T) { +func TestRepositoriesService_GetCodeownersErrors_noRef(t *testing.T) { client, mux, _, teardown := setup() defer teardown() @@ -75,6 +75,68 @@ func TestRepositoriesService_GetCodeownersErrors(t *testing.T) { }) } +func TestRepositoriesService_GetCodeownersErrors_specificRef(t *testing.T) { + client, mux, _, teardown := setup() + defer teardown() + + mux.HandleFunc("/repos/o/r/codeowners/errors", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + testHeader(t, r, "Accept", mediaTypeV3) + fmt.Fprint(w, `{ + "errors": [ + { + "line": 1, + "column": 1, + "kind": "Invalid pattern", + "source": "***/*.rb @monalisa", + "suggestion": "Did you mean **/*.rb?", + "message": "Invalid pattern on line 3: Did you mean **/*.rb?\n\n ***/*.rb @monalisa\n ^", + "path": ".github/CODEOWNERS" + } + ] + } + `) + }) + + opts := &GetCodeownersErrorsOptions{Ref: "mybranch"} + ctx := context.Background() + codeownersErrors, _, err := client.Repositories.GetCodeownersErrors(ctx, "o", "r", opts) + if err != nil { + t.Errorf("Repositories.GetCodeownersErrors returned error: %v", err) + } + + want := &CodeownersErrors{ + Errors: []*CodeownersError{ + { + Line: 1, + Column: 1, + Kind: "Invalid pattern", + Source: "***/*.rb @monalisa", + Suggestion: String("Did you mean **/*.rb?"), + Message: "Invalid pattern on line 3: Did you mean **/*.rb?\n\n ***/*.rb @monalisa\n ^", + Path: ".github/CODEOWNERS", + }, + }, + } + if !cmp.Equal(codeownersErrors, want) { + t.Errorf("Repositories.GetCodeownersErrors returned %+v, want %+v", codeownersErrors, want) + } + + const methodName = "GetCodeownersErrors" + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Repositories.GetCodeownersErrors(ctx, "\n", "\n", opts) + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Repositories.GetCodeownersErrors(ctx, "o", "r", opts) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +} + func TestCodeownersErrors_Marshal(t *testing.T) { testJSONMarshal(t, &CodeownersErrors{}, "{}") From 456ef858fffff164252d69ce98a59588f2fe3526 Mon Sep 17 00:00:00 2001 From: Lachlan Cooper Date: Tue, 10 Oct 2023 08:22:25 +1100 Subject: [PATCH 3/3] Test form values --- github/repos_codeowners_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/github/repos_codeowners_test.go b/github/repos_codeowners_test.go index fa5f6677eb3..84f0ee462bb 100644 --- a/github/repos_codeowners_test.go +++ b/github/repos_codeowners_test.go @@ -82,6 +82,7 @@ func TestRepositoriesService_GetCodeownersErrors_specificRef(t *testing.T) { mux.HandleFunc("/repos/o/r/codeowners/errors", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "GET") testHeader(t, r, "Accept", mediaTypeV3) + testFormValues(t, r, values{"ref": "mybranch"}) fmt.Fprint(w, `{ "errors": [ {