The assignees query fragment only requested id, login, and name but the GitHubUser struct includes a DatabaseID field. Since the field was never requested from the API, it always defaulted to Go's zero value (0) in JSON output. This adds databaseId to the fragment so the actual value is returned. Also adds ExportData test cases for assignees on both Issue and PullRequest to verify databaseId round-trips correctly through JSON serialization.
90 lines
2.3 KiB
Go
90 lines
2.3 KiB
Go
package api
|
|
|
|
import "testing"
|
|
|
|
func TestPullRequestGraphQL(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
fields []string
|
|
want string
|
|
}{
|
|
{
|
|
name: "empty",
|
|
fields: []string(nil),
|
|
want: "",
|
|
},
|
|
{
|
|
name: "simple fields",
|
|
fields: []string{"number", "title"},
|
|
want: "number,title",
|
|
},
|
|
{
|
|
name: "fields with nested structures",
|
|
fields: []string{"author", "assignees"},
|
|
want: "author{login,...on User{id,name}},assignees(first:100){nodes{id,login,name,databaseId},totalCount}",
|
|
},
|
|
{
|
|
name: "compressed query",
|
|
fields: []string{"files"},
|
|
want: "files(first: 100) {nodes {additions,deletions,path}}",
|
|
},
|
|
{
|
|
name: "invalid fields",
|
|
fields: []string{"isPinned", "stateReason", "number"},
|
|
want: "number",
|
|
},
|
|
{
|
|
name: "projectItems",
|
|
fields: []string{"projectItems"},
|
|
want: `projectItems(first:100){nodes{id, project{id,title}, status:fieldValueByName(name: "Status") { ... on ProjectV2ItemFieldSingleSelectValue{optionId,name}}},totalCount}`,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := PullRequestGraphQL(tt.fields); got != tt.want {
|
|
t.Errorf("PullRequestGraphQL() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIssueGraphQL(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
fields []string
|
|
want string
|
|
}{
|
|
{
|
|
name: "empty",
|
|
fields: []string(nil),
|
|
want: "",
|
|
},
|
|
{
|
|
name: "simple fields",
|
|
fields: []string{"number", "title"},
|
|
want: "number,title",
|
|
},
|
|
{
|
|
name: "fields with nested structures",
|
|
fields: []string{"author", "assignees"},
|
|
want: "author{login,...on User{id,name}},assignees(first:100){nodes{id,login,name,databaseId},totalCount}",
|
|
},
|
|
{
|
|
name: "compressed query",
|
|
fields: []string{"files"},
|
|
want: "files(first: 100) {nodes {additions,deletions,path}}",
|
|
},
|
|
{
|
|
name: "projectItems",
|
|
fields: []string{"projectItems"},
|
|
want: `projectItems(first:100){nodes{id, project{id,title}, status:fieldValueByName(name: "Status") { ... on ProjectV2ItemFieldSingleSelectValue{optionId,name}}},totalCount}`,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := IssueGraphQL(tt.fields); got != tt.want {
|
|
t.Errorf("IssueGraphQL() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|