-
Notifications
You must be signed in to change notification settings - Fork 33
/
extract-resolvers-from-schema.spec.ts
68 lines (66 loc) · 1.8 KB
/
extract-resolvers-from-schema.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { extractResolversFromSchema } from '../src';
import { makeExecutableSchema } from '@graphql-toolkit/schema';
import gql from 'graphql-tag';
describe('extractResolversFromSchema', () => {
it('should extract correct resolvers from a schema with correct type mapping', async () => {
const schema = makeExecutableSchema({
typeDefs: gql`
type Query {
foo: String
}
`,
resolvers: {
Query: {
foo: () => 'FOO',
},
},
});
const fieldResolvers = extractResolversFromSchema(schema);
expect((fieldResolvers.Query['foo'].resolve as Function)()).toBe('FOO');
});
it('should extract correct resolvers from a schema with selectedTypeDefs', async () => {
const schema = makeExecutableSchema({
typeDefs: gql`
type TypeA {
id: ID
fieldA: String
}
type TypeB {
id: ID
fieldB: String
}
type Query {
typeA: TypeA
typeB: TypeB
}
`,
resolvers: {
Query: {
typeA: () => ({ id: '0' }),
typeB: () => ({ id: '1' }),
},
TypeA: {
fieldA: ({ id }) => 'fieldAOf' + id,
},
TypeB: {
fieldB: ({ id }) => 'fieldBOf' + id,
},
},
});
const TypeBResolvers = extractResolversFromSchema(schema, {
selectedTypeDefs: gql`
type TypeB {
id: ID
fieldB: String
}
type Query {
typeB: TypeB
}
`,
});
expect(TypeBResolvers['Query']['typeA']).toBeFalsy();
expect(TypeBResolvers['TypeA']).toBeFalsy();
expect(TypeBResolvers['Query']['typeB'].resolve().id).toBe('1');
expect(TypeBResolvers['TypeB']['fieldB'].resolve({ id: '1' })).toBe('fieldBOf1');
});
});