Clean up, test, and document ContextType and ClientGetter options (#77)

## Summary:
ContextType is in use at Khan as a part of our ka-context system; it
basically just lets you configure the type to pass as the `ctx` argument
to genqlient helpers (or say to omit such an argument).  ClientGetter I
wrote thinking we might use it; then we didn't (because we have a few
different clients we may use) but it's not much code and may be helpful
to others.  In this commit I clean up, document, and add tests for both
options.

The cleanup is mainly for ClientGetter, which was kind of broken before
because it was a Go snippet but couldn't specify imports.  I was
thinking maybe you want to be able to write `ctx.Something()`, but I
just don't see how to make it work, so I made it a function of context,
which is probably the better idea anyway.

Additionally, I improved the documentation for both, and added tests for
those and several other config options that weren't completely tested.

Fixes #5.

Issue: https://github.com/Khan/genqlient/issues/5

## Test plan:
make check


Author: benjaminjkraft

Reviewers: dnerdy, aberkan, MiguelCastillo

Required Reviewers: 

Approved By: dnerdy

Checks:  Test (1.17),  Test (1.16),  Test (1.15),  Test (1.14),  Test (1.13),  Lint,  Test (1.17),  Test (1.16),  Test (1.15),  Test (1.14),  Test (1.13),  Lint

Pull Request URL: https://github.com/Khan/genqlient/pull/77
This commit is contained in:
Ben Kraft
2021-09-07 09:58:49 -07:00
committed by GitHub
parent f3e601353c
commit 6c86eed770
46 changed files with 835 additions and 73 deletions
@@ -872,8 +872,10 @@ type ComplexInlineFragmentsRootTopic struct {
func ComplexInlineFragments(
client graphql.Client,
) (*ComplexInlineFragmentsResponse, error) {
var err error
var retval ComplexInlineFragmentsResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"ComplexInlineFragments",
`
@@ -23,8 +23,10 @@ func convertTimezone(
"tz": tz,
}
var err error
var retval convertTimezoneResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"convertTimezone",
`
@@ -15,8 +15,10 @@ type EmptyInterfaceResponse struct {
func EmptyInterface(
client graphql.Client,
) (*EmptyInterfaceResponse, error) {
var err error
var retval EmptyInterfaceResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"EmptyInterface",
`
@@ -46,8 +46,10 @@ func InputEnumQuery(
"role": role,
}
var err error
var retval InputEnumQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"InputEnumQuery",
`
@@ -64,8 +64,10 @@ func InputObjectQuery(
"query": query,
}
var err error
var retval InputObjectQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"InputObjectQuery",
`
@@ -333,8 +333,10 @@ type InterfaceListFieldWithPointerTopicChildrenVideo struct {
func InterfaceListField(
client graphql.Client,
) (*InterfaceListFieldResponse, error) {
var err error
var retval InterfaceListFieldResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"InterfaceListField",
`
@@ -343,8 +343,10 @@ type InterfaceListOfListOfListsFieldWithPointerVideo struct {
func InterfaceListOfListOfListsField(
client graphql.Client,
) (*InterfaceListOfListOfListsFieldResponse, error) {
var err error
var retval InterfaceListOfListOfListsFieldResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"InterfaceListOfListOfListsField",
`
@@ -334,8 +334,10 @@ type InterfaceNestingRootTopicChildrenVideo struct {
func InterfaceNesting(
client graphql.Client,
) (*InterfaceNestingResponse, error) {
var err error
var retval InterfaceNestingResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"InterfaceNesting",
`
@@ -430,8 +430,10 @@ type InterfaceNoFragmentsQueryWithPointerVideo struct {
func InterfaceNoFragmentsQuery(
client graphql.Client,
) (*InterfaceNoFragmentsQueryResponse, error) {
var err error
var retval InterfaceNoFragmentsQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"InterfaceNoFragmentsQuery",
`
@@ -35,8 +35,10 @@ func ListInputQuery(
"names": names,
}
var err error
var retval ListInputQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"ListInputQuery",
`
@@ -14,8 +14,10 @@ type ListOfListsOfListsResponse struct {
func ListOfListsOfLists(
client graphql.Client,
) (*ListOfListsOfListsResponse, error) {
var err error
var retval ListOfListsOfListsResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"ListOfListsOfLists",
`
@@ -103,8 +103,10 @@ func OmitEmptyQuery(
variables["tz"] = tz
}
var err error
var retval OmitEmptyQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"OmitEmptyQuery",
`
@@ -91,8 +91,10 @@ func PointersQuery(
"tz": tz,
}
var err error
var retval PointersQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"PointersQuery",
`
@@ -91,8 +91,10 @@ func PointersQuery(
"tz": tz,
}
var err error
var retval PointersQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"PointersQuery",
`
@@ -45,8 +45,10 @@ func GetPokemonSiblings(
"input": input,
}
var err error
var retval GetPokemonSiblingsResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"GetPokemonSiblings",
`
@@ -34,8 +34,10 @@ type QueryWithAliasUser struct {
func QueryWithAlias(
client graphql.Client,
) (*QueryWithAliasResponse, error) {
var err error
var retval QueryWithAliasResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"QueryWithAlias",
`
@@ -34,8 +34,10 @@ type QueryWithDoubleAliasUser struct {
func QueryWithDoubleAlias(
client graphql.Client,
) (*QueryWithDoubleAliasResponse, error) {
var err error
var retval QueryWithDoubleAliasResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"QueryWithDoubleAlias",
`
@@ -53,8 +53,10 @@ const (
func QueryWithEnums(
client graphql.Client,
) (*QueryWithEnumsResponse, error) {
var err error
var retval QueryWithEnumsResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"QueryWithEnums",
`
@@ -29,8 +29,10 @@ type QueryWithSlicesUser struct {
func QueryWithSlices(
client graphql.Client,
) (*QueryWithSlicesResponse, error) {
var err error
var retval QueryWithSlicesResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"QueryWithSlices",
`
@@ -32,8 +32,10 @@ type QueryWithStructsUserAuthMethodsAuthMethod struct {
func QueryWithStructs(
client graphql.Client,
) (*QueryWithStructsResponse, error) {
var err error
var retval QueryWithStructsResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"QueryWithStructs",
`
@@ -163,8 +163,10 @@ func (v *SimpleInlineFragmentResponse) UnmarshalJSON(b []byte) error {
func SimpleInlineFragment(
client graphql.Client,
) (*SimpleInlineFragmentResponse, error) {
var err error
var retval SimpleInlineFragmentResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"SimpleInlineFragment",
`
@@ -35,8 +35,10 @@ func SimpleInputQuery(
"name": name,
}
var err error
var retval SimpleInputQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"SimpleInputQuery",
`
@@ -36,8 +36,10 @@ func SimpleMutation(
"name": name,
}
var err error
var retval SimpleMutationResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"SimpleMutation",
`
@@ -30,8 +30,10 @@ type SimpleQueryUser struct {
func SimpleQuery(
client graphql.Client,
) (*SimpleQueryResponse, error) {
var err error
var retval SimpleQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"SimpleQuery",
`
@@ -31,8 +31,10 @@ type TypeNameQueryUser struct {
func TypeNameQuery(
client graphql.Client,
) (*TypeNameQueryResponse, error) {
var err error
var retval TypeNameQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"TypeNameQuery",
`
@@ -111,8 +111,10 @@ func (v *UnionNoFragmentsQueryResponse) UnmarshalJSON(b []byte) error {
func UnionNoFragmentsQuery(
client graphql.Client,
) (*UnionNoFragmentsQueryResponse, error) {
var err error
var retval UnionNoFragmentsQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"UnionNoFragmentsQuery",
`
@@ -53,8 +53,10 @@ type UsesEnumTwiceQueryResponse struct {
func UsesEnumTwiceQuery(
client graphql.Client,
) (*UsesEnumTwiceQueryResponse, error) {
var err error
var retval UsesEnumTwiceQueryResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"UsesEnumTwiceQuery",
`
@@ -64,8 +64,10 @@ func unexported(
"query": query,
}
var err error
var retval unexportedResponse
err := client.MakeRequest(
err = client.MakeRequest(
nil,
"unexported",
`
@@ -0,0 +1,56 @@
package queries
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"context"
"github.com/Khan/genqlient/internal/testutil"
)
// SimpleQueryResponse is returned by SimpleQuery on success.
type SimpleQueryResponse struct {
// user looks up a user by some stuff.
//
// See UserQueryInput for what stuff is supported.
// If query is null, returns the current user.
User SimpleQueryUser `json:"user"`
}
// SimpleQueryUser includes the requested fields of the GraphQL type User.
// The GraphQL type's documentation follows.
//
// A User is a user!
type SimpleQueryUser struct {
// id is the user's ID.
//
// It is stable, unique, and opaque, like all good IDs.
Id string `json:"id"`
}
func SimpleQuery(
ctx context.Context,
) (*SimpleQueryResponse, error) {
var err error
client, err := testutil.GetClientFromContext(ctx)
if err != nil {
return nil, err
}
var retval SimpleQueryResponse
err = client.MakeRequest(
ctx,
"SimpleQuery",
`
query SimpleQuery {
user {
id
}
}
`,
&retval,
nil,
)
return &retval, err
}
@@ -0,0 +1,54 @@
package queries
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"github.com/Khan/genqlient/internal/testutil"
)
// SimpleQueryResponse is returned by SimpleQuery on success.
type SimpleQueryResponse struct {
// user looks up a user by some stuff.
//
// See UserQueryInput for what stuff is supported.
// If query is null, returns the current user.
User SimpleQueryUser `json:"user"`
}
// SimpleQueryUser includes the requested fields of the GraphQL type User.
// The GraphQL type's documentation follows.
//
// A User is a user!
type SimpleQueryUser struct {
// id is the user's ID.
//
// It is stable, unique, and opaque, like all good IDs.
Id string `json:"id"`
}
func SimpleQuery(
ctx testutil.MyContext,
) (*SimpleQueryResponse, error) {
var err error
client, err := testutil.GetClientFromMyContext(ctx)
if err != nil {
return nil, err
}
var retval SimpleQueryResponse
err = client.MakeRequest(
ctx,
"SimpleQuery",
`
query SimpleQuery {
user {
id
}
}
`,
&retval,
nil,
)
return &retval, err
}
@@ -0,0 +1,52 @@
package queries
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"github.com/Khan/genqlient/internal/testutil"
)
// SimpleQueryResponse is returned by SimpleQuery on success.
type SimpleQueryResponse struct {
// user looks up a user by some stuff.
//
// See UserQueryInput for what stuff is supported.
// If query is null, returns the current user.
User SimpleQueryUser `json:"user"`
}
// SimpleQueryUser includes the requested fields of the GraphQL type User.
// The GraphQL type's documentation follows.
//
// A User is a user!
type SimpleQueryUser struct {
// id is the user's ID.
//
// It is stable, unique, and opaque, like all good IDs.
Id string `json:"id"`
}
func SimpleQuery() (*SimpleQueryResponse, error) {
var err error
client, err := testutil.GetClientFromNowhere()
if err != nil {
return nil, err
}
var retval SimpleQueryResponse
err = client.MakeRequest(
nil,
"SimpleQuery",
`
query SimpleQuery {
user {
id
}
}
`,
&retval,
nil,
)
return &retval, err
}
@@ -0,0 +1,52 @@
package queries
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"github.com/Khan/genqlient/graphql"
"github.com/Khan/genqlient/internal/testutil"
)
// SimpleQueryResponse is returned by SimpleQuery on success.
type SimpleQueryResponse struct {
// user looks up a user by some stuff.
//
// See UserQueryInput for what stuff is supported.
// If query is null, returns the current user.
User SimpleQueryUser `json:"user"`
}
// SimpleQueryUser includes the requested fields of the GraphQL type User.
// The GraphQL type's documentation follows.
//
// A User is a user!
type SimpleQueryUser struct {
// id is the user's ID.
//
// It is stable, unique, and opaque, like all good IDs.
Id string `json:"id"`
}
func SimpleQuery(
ctx testutil.MyContext,
client graphql.Client,
) (*SimpleQueryResponse, error) {
var err error
var retval SimpleQueryResponse
err = client.MakeRequest(
ctx,
"SimpleQuery",
`
query SimpleQuery {
user {
id
}
}
`,
&retval,
nil,
)
return &retval, err
}
@@ -0,0 +1,53 @@
package queries
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"context"
"github.com/Khan/genqlient/graphql"
)
// SimpleQueryResponse is returned by SimpleQuery on success.
type SimpleQueryResponse struct {
// user looks up a user by some stuff.
//
// See UserQueryInput for what stuff is supported.
// If query is null, returns the current user.
User SimpleQueryUser `json:"user"`
}
// SimpleQueryUser includes the requested fields of the GraphQL type User.
// The GraphQL type's documentation follows.
//
// A User is a user!
type SimpleQueryUser struct {
// id is the user's ID.
//
// It is stable, unique, and opaque, like all good IDs.
Id string `json:"id"`
}
func SimpleQuery(
ctx context.Context,
client graphql.Client,
) (*SimpleQueryResponse, error) {
var err error
var retval SimpleQueryResponse
err = client.MakeRequest(
ctx,
"SimpleQuery",
`
query SimpleQuery {
user {
id
}
}
`,
&retval,
nil,
)
return &retval, err
}
@@ -0,0 +1,53 @@
package queries
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"context"
"github.com/Khan/genqlient/graphql"
)
// SimpleQueryResponse is returned by SimpleQuery on success.
type SimpleQueryResponse struct {
// user looks up a user by some stuff.
//
// See UserQueryInput for what stuff is supported.
// If query is null, returns the current user.
User SimpleQueryUser `json:"user"`
}
// SimpleQueryUser includes the requested fields of the GraphQL type User.
// The GraphQL type's documentation follows.
//
// A User is a user!
type SimpleQueryUser struct {
// id is the user's ID.
//
// It is stable, unique, and opaque, like all good IDs.
Id string `json:"id"`
}
func SimpleQuery(
ctx context.Context,
client graphql.Client,
) (*SimpleQueryResponse, error) {
var err error
var retval SimpleQueryResponse
err = client.MakeRequest(
ctx,
"SimpleQuery",
`
query SimpleQuery {
user {
id
}
}
`,
&retval,
nil,
)
return &retval, err
}
@@ -0,0 +1,9 @@
{
"operations": [
{
"operationName": "SimpleQuery",
"query": "\nquery SimpleQuery {\n\tuser {\n\t\tid\n\t}\n}\n",
"sourceLocation": "SimpleQuery.graphql"
}
]
}
@@ -0,0 +1,50 @@
package queries
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"github.com/Khan/genqlient/graphql"
)
// SimpleQueryResponse is returned by SimpleQuery on success.
type SimpleQueryResponse struct {
// user looks up a user by some stuff.
//
// See UserQueryInput for what stuff is supported.
// If query is null, returns the current user.
User SimpleQueryUser `json:"user"`
}
// SimpleQueryUser includes the requested fields of the GraphQL type User.
// The GraphQL type's documentation follows.
//
// A User is a user!
type SimpleQueryUser struct {
// id is the user's ID.
//
// It is stable, unique, and opaque, like all good IDs.
Id string `json:"id"`
}
func SimpleQuery(
client graphql.Client,
) (*SimpleQueryResponse, error) {
var err error
var retval SimpleQueryResponse
err = client.MakeRequest(
nil,
"SimpleQuery",
`
query SimpleQuery {
user {
id
}
}
`,
&retval,
nil,
)
return &retval, err
}
@@ -0,0 +1,53 @@
package mypkg
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"context"
"github.com/Khan/genqlient/graphql"
)
// SimpleQueryResponse is returned by SimpleQuery on success.
type SimpleQueryResponse struct {
// user looks up a user by some stuff.
//
// See UserQueryInput for what stuff is supported.
// If query is null, returns the current user.
User SimpleQueryUser `json:"user"`
}
// SimpleQueryUser includes the requested fields of the GraphQL type User.
// The GraphQL type's documentation follows.
//
// A User is a user!
type SimpleQueryUser struct {
// id is the user's ID.
//
// It is stable, unique, and opaque, like all good IDs.
Id string `json:"id"`
}
func SimpleQuery(
ctx context.Context,
client graphql.Client,
) (*SimpleQueryResponse, error) {
var err error
var retval SimpleQueryResponse
err = client.MakeRequest(
ctx,
"SimpleQuery",
`
query SimpleQuery {
user {
id
}
}
`,
&retval,
nil,
)
return &retval, err
}
@@ -0,0 +1,53 @@
package mypkg
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"context"
"github.com/Khan/genqlient/graphql"
)
// SimpleQueryResponse is returned by SimpleQuery on success.
type SimpleQueryResponse struct {
// user looks up a user by some stuff.
//
// See UserQueryInput for what stuff is supported.
// If query is null, returns the current user.
User SimpleQueryUser `json:"user"`
}
// SimpleQueryUser includes the requested fields of the GraphQL type User.
// The GraphQL type's documentation follows.
//
// A User is a user!
type SimpleQueryUser struct {
// id is the user's ID.
//
// It is stable, unique, and opaque, like all good IDs.
Id string `json:"id"`
}
func SimpleQuery(
ctx context.Context,
client graphql.Client,
) (*SimpleQueryResponse, error) {
var err error
var retval SimpleQueryResponse
err = client.MakeRequest(
ctx,
"SimpleQuery",
`
query SimpleQuery {
user {
id
}
}
`,
&retval,
nil,
)
return &retval, err
}
@@ -0,0 +1,53 @@
package mypkg
// Code generated by github.com/Khan/genqlient, DO NOT EDIT.
import (
"context"
"github.com/Khan/genqlient/graphql"
)
// SimpleQueryResponse is returned by SimpleQuery on success.
type SimpleQueryResponse struct {
// user looks up a user by some stuff.
//
// See UserQueryInput for what stuff is supported.
// If query is null, returns the current user.
User SimpleQueryUser `json:"user"`
}
// SimpleQueryUser includes the requested fields of the GraphQL type User.
// The GraphQL type's documentation follows.
//
// A User is a user!
type SimpleQueryUser struct {
// id is the user's ID.
//
// It is stable, unique, and opaque, like all good IDs.
Id string `json:"id"`
}
func SimpleQuery(
ctx context.Context,
client graphql.Client,
) (*SimpleQueryResponse, error) {
var err error
var retval SimpleQueryResponse
err = client.MakeRequest(
ctx,
"SimpleQuery",
`
query SimpleQuery {
user {
id
}
}
`,
&retval,
nil,
)
return &retval, err
}