Skip to content

Commit b79343a

Browse files
committed
test: split github issues tests and move them to dedicated folder
1 parent 723ae7c commit b79343a

File tree

4 files changed

+198
-175
lines changed

4 files changed

+198
-175
lines changed

src/__tests__/github-issues-test.js

Lines changed: 0 additions & 175 deletions
This file was deleted.
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/* @flow */
2+
3+
import mongoose from 'mongoose';
4+
import { schemaComposer, graphql } from 'graphql-compose';
5+
import { composeWithMongoose } from '../../index';
6+
7+
// May require additional time for downloading MongoDB binaries
8+
jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000;
9+
10+
describe('issue #78 - Mongoose and Discriminators', () => {
11+
const options = { discriminatorKey: 'kind' };
12+
13+
const eventSchema = new mongoose.Schema({ refId: String }, options);
14+
const Event = mongoose.model('GenericEvent', eventSchema);
15+
16+
const clickedLinkSchema = new mongoose.Schema({ url: String }, options);
17+
const ClickedLinkEvent = Event.discriminator('ClickedLinkEvent', clickedLinkSchema);
18+
19+
const EventTC = composeWithMongoose(Event);
20+
const ClickedLinkEventTC = composeWithMongoose(ClickedLinkEvent);
21+
22+
it('creating Types from models', () => {
23+
expect(EventTC.getFieldNames()).toEqual(['refId', '_id', 'kind']);
24+
expect(ClickedLinkEventTC.getFieldNames()).toEqual(['url', '_id', 'refId', 'kind']);
25+
});
26+
27+
it('manually override resolver output type for findMany', async () => {
28+
const EventDescriminatorType = new graphql.GraphQLUnionType({
29+
name: 'EventDescriminator',
30+
types: [EventTC.getType(), ClickedLinkEventTC.getType()],
31+
resolveType: value => {
32+
if (value.kind === 'ClickedLinkEvent') {
33+
return ClickedLinkEventTC.getType();
34+
}
35+
return EventTC.getType();
36+
},
37+
});
38+
39+
EventTC.getResolver('findMany').setType(new graphql.GraphQLList(EventDescriminatorType));
40+
41+
// let's check graphql response
42+
43+
await Event.create({ refId: 'aaa' });
44+
await Event.create({ refId: 'bbb' });
45+
await ClickedLinkEvent.create({ refId: 'ccc', url: 'url1' });
46+
await ClickedLinkEvent.create({ refId: 'ddd', url: 'url2' });
47+
48+
schemaComposer.rootQuery().addFields({
49+
eventFindMany: EventTC.getResolver('findMany'),
50+
});
51+
const schema = schemaComposer.buildSchema();
52+
53+
const res = await graphql.graphql(
54+
schema,
55+
`{
56+
eventFindMany {
57+
__typename
58+
... on GenericEvent {
59+
refId
60+
}
61+
... on ClickedLinkEvent {
62+
refId
63+
url
64+
}
65+
}
66+
}`
67+
);
68+
69+
expect(res).toEqual({
70+
data: {
71+
eventFindMany: [
72+
{ __typename: 'GenericEvent', refId: 'aaa' },
73+
{ __typename: 'GenericEvent', refId: 'bbb' },
74+
{ __typename: 'ClickedLinkEvent', refId: 'ccc', url: 'url1' },
75+
{ __typename: 'ClickedLinkEvent', refId: 'ddd', url: 'url2' },
76+
],
77+
},
78+
});
79+
});
80+
});
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/* @flow */
2+
3+
import { schemaComposer, graphql } from 'graphql-compose';
4+
import { composeWithMongoose } from '../../index';
5+
import { UserModel } from '../../__mocks__/userModel';
6+
7+
// May require additional time for downloading MongoDB binaries
8+
jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000;
9+
10+
beforeAll(() => UserModel.base.connect());
11+
afterAll(() => UserModel.base.disconnect());
12+
13+
const UserTC = composeWithMongoose(UserModel);
14+
schemaComposer.rootQuery().addFields({
15+
users: UserTC.getResolver('findMany'),
16+
});
17+
18+
describe('issue #92 - How to verify the fields?', () => {
19+
UserTC.wrapResolverResolve('createOne', next => rp => {
20+
if (rp.args.record.age < 21) throw new Error('You are too young');
21+
if (rp.args.record.age > 60) throw new Error('You are too old');
22+
return next(rp);
23+
});
24+
25+
schemaComposer.rootMutation().addFields({
26+
addUser: UserTC.getResolver('createOne'),
27+
});
28+
const schema = schemaComposer.buildSchema();
29+
30+
it('correct request', async () => {
31+
const result: any = await graphql.graphql(
32+
schema,
33+
`
34+
mutation {
35+
addUser(record: { name: "User1", age: 30 }) {
36+
record {
37+
name
38+
age
39+
}
40+
}
41+
}
42+
`
43+
);
44+
expect(result).toEqual({ data: { addUser: { record: { age: 30, name: 'User1' } } } });
45+
});
46+
47+
it('wrong request', async () => {
48+
const result: any = await graphql.graphql(
49+
schema,
50+
`
51+
mutation {
52+
addUser(record: { name: "User1", age: 10 }) {
53+
record {
54+
name
55+
age
56+
}
57+
}
58+
}
59+
`
60+
);
61+
expect(result).toEqual({ data: { addUser: null }, errors: expect.anything() });
62+
expect(result.errors[0].message).toBe('You are too young');
63+
});
64+
});
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/* @flow */
2+
3+
import { schemaComposer, graphql } from 'graphql-compose';
4+
import { composeWithMongoose } from '../../index';
5+
import { UserModel } from '../../__mocks__/userModel';
6+
7+
// May require additional time for downloading MongoDB binaries
8+
jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000;
9+
10+
beforeAll(() => UserModel.base.connect());
11+
afterAll(() => UserModel.base.disconnect());
12+
13+
const UserTC = composeWithMongoose(UserModel);
14+
schemaComposer.rootQuery().addFields({
15+
users: UserTC.getResolver('findMany'),
16+
});
17+
18+
describe('issue #93', () => {
19+
it('$or, $and operator for filtering', async () => {
20+
schemaComposer.rootQuery().addFields({
21+
users: UserTC.getResolver('findMany'),
22+
});
23+
const schema = schemaComposer.buildSchema();
24+
await UserModel.create({
25+
_id: '100000000000000000000301',
26+
name: 'User301',
27+
age: 301,
28+
});
29+
await UserModel.create({
30+
_id: '100000000000000000000302',
31+
name: 'User302',
32+
age: 302,
33+
gender: 'male',
34+
});
35+
await UserModel.create({
36+
_id: '100000000000000000000303',
37+
name: 'User303',
38+
age: 302,
39+
gender: 'female',
40+
});
41+
42+
const res = await graphql.graphql(
43+
schema,
44+
`
45+
{
46+
users(filter: { OR: [{ age: 301 }, { AND: [{ gender: male }, { age: 302 }] }] }) {
47+
name
48+
}
49+
}
50+
`
51+
);
52+
expect(res).toEqual({ data: { users: [{ name: 'User301' }, { name: 'User302' }] } });
53+
});
54+
});

0 commit comments

Comments
 (0)