Thanks to visit codestin.com
Credit goes to github.com

Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 14 additions & 11 deletions api/queries_projects_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,13 @@ import (
)

const (
errorProjectsV2ReadScope = "field requires one of the following scopes: ['read:project']"
errorProjectsV2UserField = "Field 'projectsV2' doesn't exist on type 'User'"
errorProjectsV2RepositoryField = "Field 'projectsV2' doesn't exist on type 'Repository'"
errorProjectsV2OrganizationField = "Field 'projectsV2' doesn't exist on type 'Organization'"
errorProjectsV2IssueField = "Field 'projectItems' doesn't exist on type 'Issue'"
errorProjectsV2PullRequestField = "Field 'projectItems' doesn't exist on type 'PullRequest'"
errorProjectsV2ReadScope = "field requires one of the following scopes: ['read:project']"
errorProjectsV2UserField = "Field 'projectsV2' doesn't exist on type 'User'"
errorProjectsV2RepositoryField = "Field 'projectsV2' doesn't exist on type 'Repository'"
errorProjectsV2OrganizationField = "Field 'projectsV2' doesn't exist on type 'Organization'"
errorProjectsV2IssueField = "Field 'projectItems' doesn't exist on type 'Issue'"
errorProjectsV2PullRequestField = "Field 'projectItems' doesn't exist on type 'PullRequest'"
errorProjectsV2ResourceNotAccessible = "Resource not accessible by"
)

type ProjectV2 struct {
Expand Down Expand Up @@ -321,18 +322,20 @@ func CurrentUserProjectsV2(client *Client, hostname string) ([]ProjectV2, error)
}

// When querying ProjectsV2 fields we generally don't want to show the user
// scope errors and field does not exist errors. ProjectsV2IgnorableError
// checks against known error strings to see if an error can be safely ignored.
// Due to the fact that the GraphQLClient can return multiple types of errors
// this uses brittle string comparison to check against the known error strings.
// scope errors, field does not exist errors, or authorization errors.
// ProjectsV2IgnorableError checks against known error strings to see if an
// error can be safely ignored. Due to the fact that the GraphQLClient can
// return multiple types of errors this uses brittle string comparison to check
// against the known error strings.
func ProjectsV2IgnorableError(err error) bool {
msg := err.Error()
if strings.Contains(msg, errorProjectsV2ReadScope) ||
strings.Contains(msg, errorProjectsV2UserField) ||
strings.Contains(msg, errorProjectsV2RepositoryField) ||
strings.Contains(msg, errorProjectsV2OrganizationField) ||
strings.Contains(msg, errorProjectsV2IssueField) ||
strings.Contains(msg, errorProjectsV2PullRequestField) {
strings.Contains(msg, errorProjectsV2PullRequestField) ||
strings.Contains(msg, errorProjectsV2ResourceNotAccessible) {
return true
}
return false
Expand Down
15 changes: 15 additions & 0 deletions api/queries_projects_v2_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,21 @@ func TestProjectsV2IgnorableError(t *testing.T) {
errMsg: "Field 'projectItems' doesn't exist on type 'PullRequest'",
expectOut: true,
},
{
name: "resource not accessible by integration",
errMsg: "Resource not accessible by integration",
expectOut: true,
},
{
name: "resource not accessible by personal access token",
errMsg: "Resource not accessible by personal access token",
expectOut: true,
},
{
name: "resource not accessible by integration with path context",
errMsg: "GraphQL: Resource not accessible by integration (repository.pullRequest.projectItems.nodes.0)",
expectOut: true,
},
{
name: "other error",
errMsg: "some other graphql error message",
Expand Down
Loading