Changeset View
Changeset View
Standalone View
Standalone View
js_modules/dagit/src/testing/ApolloTestProvider.tsx
import {ApolloClient, ApolloProvider} from '@apollo/client'; | import {ApolloClient, ApolloProvider} from '@apollo/client'; | ||||
import {SchemaLink} from '@apollo/client/link/schema'; | import {SchemaLink} from '@apollo/client/link/schema'; | ||||
import {mergeResolvers} from '@graphql-tools/merge'; | import {mergeResolvers} from '@graphql-tools/merge'; | ||||
import {addMocksToSchema} from '@graphql-tools/mock'; | import {addMocksToSchema} from '@graphql-tools/mock'; | ||||
import {makeExecutableSchema} from '@graphql-tools/schema'; | import {makeExecutableSchema} from '@graphql-tools/schema'; | ||||
import {loader} from 'graphql.macro'; | import {loader} from 'graphql.macro'; | ||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import {AppCache} from 'src/AppCache'; | import {AppCache} from 'src/AppCache'; | ||||
import {defaultMocks} from 'src/testing/defaultMocks'; | import {defaultMocks} from 'src/testing/defaultMocks'; | ||||
interface Props { | interface Props { | ||||
children: React.ReactNode; | children: React.ReactNode; | ||||
mocks?: any; | mocks?: any; | ||||
} | } | ||||
const typeDefs = loader('../schema.graphql'); | |||||
export const ApolloTestProvider = (props: Props) => { | export const ApolloTestProvider = (props: Props) => { | ||||
const {children, mocks} = props; | const {children, mocks} = props; | ||||
const client = React.useMemo(() => { | const client = React.useMemo(() => { | ||||
// The loader has to live here instead of the module level, otherwise we can end | // The loader has to live here instead of the module level, otherwise we can end | ||||
// up with nondeterministic behavior when querying/caching. | // up with nondeterministic behavior when querying/caching. | ||||
const schemaDefinition = loader('../schema.graphql'); | |||||
const schema = makeExecutableSchema({typeDefs: schemaDefinition}); | const schema = makeExecutableSchema({typeDefs}); | ||||
const withMerge = mergeResolvers([defaultMocks, mocks]); | const withMerge = mergeResolvers([defaultMocks, mocks]); | ||||
const withMocks = addMocksToSchema({schema, mocks: withMerge}); | const withMocks = addMocksToSchema({schema, mocks: withMerge}); | ||||
return new ApolloClient({ | return new ApolloClient({ | ||||
cache: AppCache, | cache: AppCache, | ||||
link: new SchemaLink({schema: withMocks}), | link: new SchemaLink({schema: withMocks}), | ||||
}); | }); | ||||
}, [mocks]); | }, [mocks]); | ||||
return <ApolloProvider client={client}>{children}</ApolloProvider>; | return <ApolloProvider client={client}>{children}</ApolloProvider>; | ||||
}; | }; |