Skip to content

Commit 1ade1ab

Browse files
committed
test(selections): update selection example
1 parent 02ff008 commit 1ade1ab

File tree

2 files changed

+65
-14
lines changed

2 files changed

+65
-14
lines changed

example_selection_test.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,16 @@ type (
1212
userResolver struct{ u user }
1313
)
1414

15-
func (r *userResolver) ID() graphql.ID { return graphql.ID(r.u.id) }
16-
func (r *userResolver) Name() *string { return &r.u.name }
17-
func (r *userResolver) Email() *string { return &r.u.email }
18-
func (r *userResolver) Friends(ctx context.Context) []*userResolver { return nil }
15+
func (r *userResolver) ID() graphql.ID { return graphql.ID(r.u.id) }
16+
func (r *userResolver) Name() *string { return &r.u.name }
17+
func (r *userResolver) Email() *string { return &r.u.email }
18+
func (r *userResolver) Friends(ctx context.Context) []*userResolver {
19+
// Return a couple of dummy friends (data itself not important for field selection example)
20+
return []*userResolver{
21+
{u: user{id: "F1", name: "Bob"}},
22+
{u: user{id: "F2", name: "Carol"}},
23+
}
24+
}
1925

2026
type root struct{}
2127

@@ -34,8 +40,8 @@ func Example_selectedFieldNames() {
3440
type User { id: ID! name: String email: String friends: [User!]! }
3541
`
3642
schema := graphql.MustParseSchema(s, &root{})
37-
query := `query { user(id: "U1") { id name } }`
43+
query := `query { user(id: "U1") { id name friends { id name } } }`
3844
_ = schema.Exec(context.Background(), query, "", nil)
3945
// Output:
40-
// [id name]
46+
// [id name friends friends.id friends.name]
4147
}

selection_test.go

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,35 @@ func TestFieldSelectionHelpers(t *testing.T) {
8585
expectSorted []string
8686
hasChecks map[string]bool
8787
}{
88-
{name: "enabled order", query: `query { customer { name id } }`, expectNames: []string{"name", "id"}, expectSorted: []string{"id", "name"}, hasChecks: map[string]bool{"id": true, "name": true}},
89-
{name: "one field", query: `query { customer { id } }`, expectNames: []string{"id"}, expectSorted: []string{"id"}, hasChecks: map[string]bool{"id": true, "name": false}},
90-
{name: "nested paths", query: `query { customer { items { id name category { id } } id } }`, expectNames: []string{"items", "items.id", "items.name", "items.category", "items.category.id", "id"}, expectSorted: []string{"id", "items", "items.category", "items.category.id", "items.id", "items.name"}, hasChecks: map[string]bool{"items": true, "items.id": true, "items.name": true, "items.category": true, "items.category.id": true, "id": true}},
91-
{name: "disabled", schemaOpts: []graphql.SchemaOpt{graphql.DisableFieldSelections()}, query: `query { customer { name id } }`, expectNames: []string{}, expectSorted: []string{}, hasChecks: map[string]bool{"id": false, "name": false}},
88+
{
89+
name: "enabled order",
90+
query: `query { customer { name id } }`,
91+
expectNames: []string{"name", "id"},
92+
expectSorted: []string{"id", "name"},
93+
hasChecks: map[string]bool{"id": true, "name": true},
94+
},
95+
{
96+
name: "one field",
97+
query: `query { customer { id } }`,
98+
expectNames: []string{"id"},
99+
expectSorted: []string{"id"},
100+
hasChecks: map[string]bool{"id": true, "name": false},
101+
},
102+
{
103+
name: "nested paths",
104+
query: `query { customer { items { id name category { id } } id } }`,
105+
expectNames: []string{"items", "items.id", "items.name", "items.category", "items.category.id", "id"},
106+
expectSorted: []string{"id", "items", "items.category", "items.category.id", "items.id", "items.name"},
107+
hasChecks: map[string]bool{"items": true, "items.id": true, "items.name": true, "items.category": true, "items.category.id": true, "id": true},
108+
},
109+
{
110+
name: "disabled",
111+
schemaOpts: []graphql.SchemaOpt{graphql.DisableFieldSelections()},
112+
query: `query { customer { name id } }`,
113+
expectNames: []string{},
114+
expectSorted: []string{},
115+
hasChecks: map[string]bool{"id": false, "name": false},
116+
},
92117
}
93118
for _, tt := range tests {
94119
t.Run(tt.name, func(t *testing.T) {
@@ -108,10 +133,30 @@ func TestSelectedFieldNames_FragmentsAliasesMeta(t *testing.T) {
108133
expectNames []string
109134
hasChecks map[string]bool
110135
}{
111-
{"alias ignored", `query { customer { idAlias: id name } }`, []string{"id", "name"}, map[string]bool{"id": true, "idAlias": false, "name": true}},
112-
{"fragment spread", `fragment CFields on Customer { id name } query { customer { ...CFields } }`, []string{"id", "name"}, map[string]bool{"id": true, "name": true}},
113-
{"inline fragment", `query { customer { id ... on Customer { id name } } }`, []string{"id", "name"}, map[string]bool{"id": true, "name": true}},
114-
{"meta excluded", `query { customer { id __typename name } }`, []string{"id", "name"}, map[string]bool{"id": true, "name": true, "__typename": false}},
136+
{
137+
name: "alias ignored",
138+
query: `query { customer { idAlias: id name } }`,
139+
expectNames: []string{"id", "name"},
140+
hasChecks: map[string]bool{"id": true, "idAlias": false, "name": true},
141+
},
142+
{
143+
name: "fragment spread",
144+
query: `fragment CFields on Customer { id name } query { customer { ...CFields } }`,
145+
expectNames: []string{"id", "name"},
146+
hasChecks: map[string]bool{"id": true, "name": true},
147+
},
148+
{
149+
name: "inline fragment",
150+
query: `query { customer { id ... on Customer { id name } } }`,
151+
expectNames: []string{"id", "name"},
152+
hasChecks: map[string]bool{"id": true, "name": true},
153+
},
154+
{
155+
name: "meta excluded",
156+
query: `query { customer { id __typename name } }`,
157+
expectNames: []string{"id", "name"},
158+
hasChecks: map[string]bool{"id": true, "name": true, "__typename": false},
159+
},
115160
}
116161
for _, tt := range tests {
117162
t.Run(tt.name, func(t *testing.T) {

0 commit comments

Comments
 (0)