Skip to content

Commit

Permalink
Add GetCodeownersErrors to RepositoriesService (#2408)
Browse files Browse the repository at this point in the history
Fixes: #2405 .
  • Loading branch information
cbrgm committed Jul 16, 2022
1 parent 645b457 commit 3a432d6
Show file tree
Hide file tree
Showing 4 changed files with 174 additions and 0 deletions.
8 changes: 8 additions & 0 deletions github/github-accessors.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions github/github-accessors_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

46 changes: 46 additions & 0 deletions github/repos_codeowners.go
@@ -0,0 +1,46 @@
// Copyright 2022 The go-github AUTHORS. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package github

import (
"context"
"fmt"
)

// CodeownersErrors represents a list of syntax errors detected in the CODEOWNERS file.
type CodeownersErrors struct {
Errors []*CodeownersError `json:"errors"`
}

// CodeownersError represents a syntax error detected in the CODEOWNERS file.
type CodeownersError struct {
Line int `json:"line"`
Column int `json:"column"`
Kind string `json:"kind"`
Source string `json:"source"`
Suggestion *string `json:"suggestion,omitempty"`
Message string `json:"message"`
Path string `json:"path"`
}

// 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) {
u := fmt.Sprintf("repos/%v/%v/codeowners/errors", owner, repo)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

codeownersErrors := &CodeownersErrors{}
resp, err := s.client.Do(ctx, req, codeownersErrors)
if err != nil {
return nil, resp, err
}

return codeownersErrors, resp, nil
}
110 changes: 110 additions & 0 deletions github/repos_codeowners_test.go
@@ -0,0 +1,110 @@
// Copyright 2022 The go-github AUTHORS. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package github

import (
"context"
"fmt"
"net/http"
"testing"

"github.com/google/go-cmp/cmp"
)

func TestRepositoriesService_GetCodeownersErrors(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"
}
]
}
`)
})

ctx := context.Background()
codeownersErrors, _, err := client.Repositories.GetCodeownersErrors(ctx, "o", "r")
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")
return err
})

testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Repositories.GetCodeownersErrors(ctx, "o", "r")
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}

func TestCodeownersErrors_Marshal(t *testing.T) {
testJSONMarshal(t, &CodeownersErrors{}, "{}")

u := &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",
},
},
}

want := `{
"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"
}
]
}
`
testJSONMarshal(t, u, want)
}

0 comments on commit 3a432d6

Please sign in to comment.