Skip to content

Commit

Permalink
fix: Handle GitHub IsMember/IsCollaborator 404s properly
Browse files Browse the repository at this point in the history
fixes jenkins-x#105

Signed-off-by: Andrew Bayer <[email protected]>
  • Loading branch information
abayer committed Apr 24, 2020
1 parent aad099b commit 9bdccb1
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 2 deletions.
2 changes: 1 addition & 1 deletion scm/driver/github/org.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ type membership struct {
func (s *organizationService) IsMember(ctx context.Context, org string, user string) (bool, *scm.Response, error) {
path := fmt.Sprintf("orgs/%s/members/%s", org, user)
res, err := s.client.do(ctx, "GET", path, nil, nil)
if err != nil {
if err != nil && res == nil {
return false, res, err
}
code := res.Status
Expand Down
46 changes: 46 additions & 0 deletions scm/driver/github/org_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,3 +237,49 @@ func TestIsAdminFalse(t *testing.T) {

assert.False(t, isAdmin)
}

func TestOrganizationService_IsMember_False(t *testing.T) {
defer gock.Off()

gock.New("https://api.github.com").
Get("/orgs/octocat/members/someuser").
Reply(404).
SetHeaders(mockHeaders)

client := NewDefault()
got, res, err := client.Organizations.IsMember(context.Background(), "octocat", "someuser")
if err != nil {
t.Error(err)
return
}

if got {
t.Errorf("Expected user to not be a member")
}

t.Run("Request", testRequest(res))
t.Run("Rate", testRate(res))
}

func TestOrganizationService_IsMember_True(t *testing.T) {
defer gock.Off()

gock.New("https://api.github.com").
Get("/orgs/octocat/members/someuser").
Reply(204).
SetHeaders(mockHeaders)

client := NewDefault()
got, res, err := client.Organizations.IsMember(context.Background(), "octocat", "someuser")
if err != nil {
t.Error(err)
return
}

if !got {
t.Errorf("Expected user to be a member")
}

t.Run("Request", testRequest(res))
t.Run("Rate", testRate(res))
}
2 changes: 1 addition & 1 deletion scm/driver/github/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ func (s *repositoryService) IsCollaborator(ctx context.Context, repo, user strin
},
}
res, err := s.client.doRequest(ctx, req, nil, nil)
if err != nil {
if err != nil && res == nil {
return false, res, err
}
code := res.Status
Expand Down
46 changes: 46 additions & 0 deletions scm/driver/github/repo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -556,3 +556,49 @@ func TestHookEvents(t *testing.T) {
}
}
}

func TestRepositoryService_IsCollaborator_False(t *testing.T) {
defer gock.Off()

gock.New("https://api.github.com").
Get("/repos/octocat/hello-world/collaborators/someuser").
Reply(404).
SetHeaders(mockHeaders)

client := NewDefault()
got, res, err := client.Repositories.IsCollaborator(context.Background(), "octocat/hello-world", "someuser")
if err != nil {
t.Error(err)
return
}

if got {
t.Errorf("Expected user to not be a collaborator")
}

t.Run("Request", testRequest(res))
t.Run("Rate", testRate(res))
}

func TestRepositoryService_IsCollaborator_True(t *testing.T) {
defer gock.Off()

gock.New("https://api.github.com").
Get("/repos/octocat/hello-world/collaborators/someuser").
Reply(204).
SetHeaders(mockHeaders)

client := NewDefault()
got, res, err := client.Repositories.IsCollaborator(context.Background(), "octocat/hello-world", "someuser")
if err != nil {
t.Error(err)
return
}

if !got {
t.Errorf("Expected user to be a collaborator")
}

t.Run("Request", testRequest(res))
t.Run("Rate", testRate(res))
}

0 comments on commit 9bdccb1

Please sign in to comment.