Skip to content

Commit a880f3e

Browse files
committed
test: add example for beforeQuery param
Related #219
1 parent 8437357 commit a880f3e

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/* eslint-disable no-param-reassign */
2+
/* @flow */
3+
4+
import { schemaComposer, graphql } from 'graphql-compose';
5+
import { composeWithMongoose } from '../../index';
6+
import { UserModel } from '../../__mocks__/userModel';
7+
8+
beforeAll(async () => {
9+
await UserModel.base.connect();
10+
await UserModel.create({
11+
name: 'AAAAA',
12+
age: 10,
13+
});
14+
await UserModel.create({
15+
name: 'BBBBB',
16+
age: 20,
17+
});
18+
});
19+
afterAll(() => UserModel.base.disconnect());
20+
21+
const UserTC = composeWithMongoose(UserModel);
22+
23+
describe('issue #219 - Authorization using wrapResolve', () => {
24+
it('correct request', async () => {
25+
UserTC.wrapResolverResolve('findOne', (next) => (rp) => {
26+
rp.beforeQuery = async (query) => {
27+
// Choose any case or mix of them
28+
// 1) check rp.context
29+
// 2) make another query await Permission.find();
30+
// 3) modify query = query.where({ perm: 'ALLOWED', userId: context?.req?.user?.id })
31+
query = query.where({ age: { $gt: 19 } });
32+
33+
// 4) return cached data return UserCachedData[rp.args.id];
34+
if (rp?.args?.filter?.name === 'CACHED') {
35+
return { name: 'CACHED', age: 99 };
36+
}
37+
38+
// 5) just check arg value
39+
if (rp?.args?.filter?.name === 'ERROR') {
40+
throw new Error('Wrong arg!');
41+
}
42+
43+
return query.exec();
44+
};
45+
return next(rp);
46+
});
47+
schemaComposer.Query.addFields({
48+
findUser: UserTC.getResolver('findOne'),
49+
});
50+
const schema = schemaComposer.buildSchema();
51+
expect(
52+
await graphql.graphql(
53+
schema,
54+
`query {
55+
findUser(filter: { name: "AAAAA" }) {
56+
name
57+
age
58+
}
59+
}`
60+
)
61+
).toEqual({ data: { findUser: null } });
62+
63+
expect(
64+
await graphql.graphql(
65+
schema,
66+
`query {
67+
findUser(filter: { name: "BBBBB" }) {
68+
name
69+
age
70+
}
71+
}`
72+
)
73+
).toEqual({ data: { findUser: { age: 20, name: 'BBBBB' } } });
74+
75+
expect(
76+
await graphql.graphql(
77+
schema,
78+
`query {
79+
findUser(filter: { name: "CACHED" }) {
80+
name
81+
age
82+
}
83+
}`
84+
)
85+
).toEqual({ data: { findUser: { age: 99, name: 'CACHED' } } });
86+
87+
expect(
88+
await graphql.graphql(
89+
schema,
90+
`query {
91+
findUser(filter: { name: "ERROR" }) {
92+
name
93+
age
94+
}
95+
}`
96+
)
97+
).toEqual({ data: { findUser: null }, errors: [new Error('Wrong arg!')] });
98+
});
99+
});

0 commit comments

Comments
 (0)