This repository was archived by the owner on Mar 20, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 535
/
Copy pathusage-test.ts
135 lines (110 loc) · 3.6 KB
/
usage-test.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import express from 'express';
import request from 'supertest';
import { expect } from 'chai';
import { describe, it } from 'mocha';
import { GraphQLSchema } from 'graphql';
import { graphqlHTTP } from '../index';
describe('Useful errors when incorrectly used', () => {
it('requires an option factory function', () => {
expect(() => {
// @ts-expect-error
graphqlHTTP();
}).to.throw('GraphQL middleware requires options.');
});
it('requires option factory function to return object', async () => {
const app = express();
app.use(
'/graphql',
// @ts-expect-error
graphqlHTTP(() => null),
);
const response = await request(app).get('/graphql?query={test}');
expect(response.status).to.equal(500);
expect(JSON.parse(response.text)).to.deep.equal({
errors: [
{
message:
'GraphQL middleware option function must return an options object or a promise which will be resolved to an options object.',
},
],
});
});
it('requires option factory function to return object or promise of object', async () => {
const app = express();
app.use(
'/graphql',
// @ts-expect-error
graphqlHTTP(() => Promise.resolve(null)),
);
const response = await request(app).get('/graphql?query={test}');
expect(response.status).to.equal(500);
expect(JSON.parse(response.text)).to.deep.equal({
errors: [
{
message:
'GraphQL middleware option function must return an options object or a promise which will be resolved to an options object.',
},
],
});
});
it('requires option factory function to return object with schema', async () => {
const app = express();
app.use(
'/graphql',
// @ts-expect-error
graphqlHTTP(() => ({})),
);
const response = await request(app).get('/graphql?query={test}');
expect(response.status).to.equal(500);
expect(JSON.parse(response.text)).to.deep.equal({
errors: [
{ message: 'GraphQL middleware options must contain a schema.' },
],
});
});
it('requires option factory function to return object or promise of object with schema', async () => {
const app = express();
app.use(
'/graphql',
// @ts-expect-error
graphqlHTTP(() => Promise.resolve({})),
);
const response = await request(app).get('/graphql?query={test}');
expect(response.status).to.equal(500);
expect(JSON.parse(response.text)).to.deep.equal({
errors: [
{ message: 'GraphQL middleware options must contain a schema.' },
],
});
});
it('validates schema before executing request', async () => {
// @ts-expect-error
const schema = new GraphQLSchema({ directives: [null] });
const app = express();
app.use(
'/graphql',
graphqlHTTP(() => Promise.resolve({ schema })),
);
const response = await request(app).get('/graphql?query={test}');
expect(response.status).to.equal(500);
expect(JSON.parse(response.text)).to.deep.equal({
errors: [
{ message: 'Query root type must be provided.' },
{ message: 'Expected directive but got: null.' },
],
});
});
it('requires a valid schema if static schema is defined in options', () => {
const options = () => ({
// @ts-expect-error
schema: new GraphQLSchema({ directives: [null] }),
});
const { schema } = options();
expect(() => {
graphqlHTTP({ schema });
}).to.throw('GraphQL schema validation failed');
expect(() => {
graphqlHTTP(options);
}).not.to.throw();
});
});