Skip to content

Commit 08014f4

Browse files
committed
refactor resolvers: change gqType on TypeComposer
1 parent dd2c9a2 commit 08014f4

33 files changed

+352
-358
lines changed

.eslintignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
lib/*
2+
es/*

src/__mocks__/userModel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ UserSchema.virtual('nameVirtual').get(function () { // eslint-disable-line
9393
});
9494

9595

96-
const UserModel = mongoose.model('UserModel', UserSchema);
96+
const UserModel = mongoose.model('User', UserSchema);
9797

9898
export {
9999
UserSchema,

src/__tests__/fieldConverter-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import {
2727
GraphQLDate,
2828
GraphQLBuffer,
2929
GraphQLGeneric,
30-
} from '../../../graphql-compose/src/type';
30+
} from 'graphql-compose';
3131

3232
/*
3333
Object.prototype.getClassName = function getClassName() {

src/__tests__/modelConverter-test.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
import { expect } from 'chai';
44
import { UserModel } from '../__mocks__/userModel.js';
55
import { mongooseModelToTypeComposer as mm2tc } from '../modelConverter';
6-
7-
import TypeComposer from 'graphql-compose/lib/typeComposer';
8-
import InputTypeComposer from 'graphql-compose/lib/inputTypeComposer';
6+
import { TypeComposer, InputTypeComposer } from 'graphql-compose';
97

108

119
describe('modelConverter', () => {

src/modelConverter.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import type {
1717
export function mongooseModelToTypeComposer(
1818
model: MongooseModelT,
1919
opts: typeConverterOpts = {}
20-
): GraphQLObjectType {
20+
): TypeComposer {
2121
const name: string = (opts && opts.name) || model.modelName;
2222

2323
const type = convertModelToGraphQL(model, name);
@@ -31,6 +31,8 @@ export function mongooseModelToTypeComposer(
3131
prepareFields(typeComposer, opts.fields);
3232
}
3333

34+
typeComposer.setRecordIdFn((source) => `${source._id}`);
35+
3436
createInputType(typeComposer, opts.inputType);
3537

3638
if (!opts.hasOwnProperty('resolvers') || opts.resolvers !== false) {
@@ -112,7 +114,7 @@ export function createResolvers(
112114
const createResolverFn = resolvers[resolverName];
113115
const resolver = createResolverFn(
114116
model,
115-
typeComposer.getType(),
117+
typeComposer,
116118
opts[resolverName] || {}
117119
);
118120
typeComposer.setResolver(resolver);

src/resolvers/__tests__/count-test.js

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@
33
import { expect } from 'chai';
44
import { UserModel } from '../../__mocks__/userModel.js';
55
import count from '../count';
6-
import Resolver from 'graphql-compose/lib/resolver/resolver';
7-
import { GraphQLObjectType, GraphQLInt } from 'graphql';
6+
import { Resolver } from 'graphql-compose';
7+
import { mongooseModelToTypeComposer } from '../../modelConverter';
8+
import { GraphQLInt } from 'graphql';
89

9-
const UserType = new GraphQLObjectType({
10-
name: 'MockUserType',
11-
});
10+
const UserTypeComposer = mongooseModelToTypeComposer(UserModel);
1211

1312
describe('count() ->', () => {
1413
let user1;
@@ -42,30 +41,30 @@ describe('count() ->', () => {
4241
});
4342

4443
it('should return Resolver object', () => {
45-
const resolver = count(UserModel, UserType);
44+
const resolver = count(UserModel, UserTypeComposer);
4645
expect(resolver).to.be.instanceof(Resolver);
4746
});
4847

4948
describe('Resolver.args', () => {
5049
it('should have `filter` arg', () => {
51-
const resolver = count(UserModel, UserType);
50+
const resolver = count(UserModel, UserTypeComposer);
5251
expect(resolver.hasArg('filter')).to.be.true;
5352
});
5453
});
5554

5655
describe('Resolver.resolve():Promise', () => {
5756
it('should be fulfilled promise', async () => {
58-
const result = count(UserModel, UserType).resolve({});
57+
const result = count(UserModel, UserTypeComposer).resolve({});
5958
await expect(result).be.fulfilled;
6059
});
6160

6261
it('should return total number of documents in collection if args is empty', async () => {
63-
const result = await count(UserModel, UserType).resolve({ args: {} });
62+
const result = await count(UserModel, UserTypeComposer).resolve({ args: {} });
6463
expect(result).to.equal(2);
6564
});
6665

6766
it('should return number of document by filter data', async () => {
68-
const result = await count(UserModel, UserType).resolve(
67+
const result = await count(UserModel, UserTypeComposer).resolve(
6968
{ args: { filter: { gender: 'male' } } }
7069
);
7170
expect(result).to.equal(1);
@@ -74,7 +73,7 @@ describe('count() ->', () => {
7473

7574
describe('Resolver.getOutputType()', () => {
7675
it('should return GraphQLInt type', () => {
77-
const outputType = count(UserModel, UserType).getOutputType();
76+
const outputType = count(UserModel, UserTypeComposer).getOutputType();
7877
expect(outputType).to.equal(GraphQLInt);
7978
});
8079
});

src/resolvers/__tests__/createOne-test.js

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@
33
import { expect } from 'chai';
44
import { UserModel } from '../../__mocks__/userModel.js';
55
import createOne from '../createOne';
6-
import Resolver from 'graphql-compose/lib/resolver/resolver';
7-
import TypeComposer from 'graphql-compose/lib/typeComposer';
8-
import { convertModelToGraphQL } from '../../fieldsConverter';
6+
import { Resolver, TypeComposer } from 'graphql-compose';
7+
import { mongooseModelToTypeComposer } from '../../modelConverter';
98
import GraphQLMongoID from '../../types/mongoid';
109
import { GraphQLNonNull } from 'graphql';
1110

12-
const UserType = convertModelToGraphQL(UserModel, 'User');
11+
const UserTypeComposer = mongooseModelToTypeComposer(UserModel);
1312

1413
describe('createOne() ->', () => {
1514
before('clear UserModel collection', (done) => {
@@ -19,13 +18,13 @@ describe('createOne() ->', () => {
1918
});
2019

2120
it('should return Resolver object', () => {
22-
const resolver = createOne(UserModel, UserType);
21+
const resolver = createOne(UserModel, UserTypeComposer);
2322
expect(resolver).to.be.instanceof(Resolver);
2423
});
2524

2625
describe('Resolver.args', () => {
2726
it('should have required `input` arg', () => {
28-
const resolver = createOne(UserModel, UserType);
27+
const resolver = createOne(UserModel, UserTypeComposer);
2928
const argConfig = resolver.getArg('input');
3029
expect(argConfig).property('type').instanceof(GraphQLNonNull);
3130
expect(argConfig).deep.property('type.ofType.name', 'CreateOneUserInput');
@@ -34,18 +33,18 @@ describe('createOne() ->', () => {
3433

3534
describe('Resolver.resolve():Promise', () => {
3635
it('should be promise', () => {
37-
const result = createOne(UserModel, UserType).resolve({});
36+
const result = createOne(UserModel, UserTypeComposer).resolve({});
3837
expect(result).instanceof(Promise);
3938
result.catch(() => 'catch error if appear, hide it from mocha');
4039
});
4140

4241
it('should rejected with Error if args.input is empty', async () => {
43-
const result = createOne(UserModel, UserType).resolve({ args: {} });
42+
const result = createOne(UserModel, UserTypeComposer).resolve({ args: {} });
4443
await expect(result).be.rejectedWith(Error, 'at least one value in args.input');
4544
});
4645

4746
it('should return payload.recordId', async () => {
48-
const result = await createOne(UserModel, UserType).resolve({
47+
const result = await createOne(UserModel, UserTypeComposer).resolve({
4948
args: {
5049
input: { name: 'newName' },
5150
},
@@ -54,7 +53,7 @@ describe('createOne() ->', () => {
5453
});
5554

5655
it('should create document with args.input', async () => {
57-
const result = await createOne(UserModel, UserType).resolve({
56+
const result = await createOne(UserModel, UserTypeComposer).resolve({
5857
args: {
5958
input: { name: 'newName' },
6059
},
@@ -64,7 +63,7 @@ describe('createOne() ->', () => {
6463

6564
it('should save document to database', (done) => {
6665
const checkedName = 'nameForMongoDB';
67-
createOne(UserModel, UserType).resolve({
66+
createOne(UserModel, UserTypeComposer).resolve({
6867
args: {
6968
input: { name: checkedName },
7069
},
@@ -77,7 +76,7 @@ describe('createOne() ->', () => {
7776
});
7877

7978
it('should return payload.record', async () => {
80-
const result = await createOne(UserModel, UserType).resolve({
79+
const result = await createOne(UserModel, UserTypeComposer).resolve({
8180
args: {
8281
input: { name: 'NewUser' },
8382
},
@@ -88,20 +87,21 @@ describe('createOne() ->', () => {
8887

8988
describe('Resolver.getOutputType()', () => {
9089
it('should have correct output type name', () => {
91-
const outputType = createOne(UserModel, UserType).getOutputType();
92-
expect(outputType).property('name').to.equal(`CreateOne${UserType.name}Payload`);
90+
const outputType = createOne(UserModel, UserTypeComposer).getOutputType();
91+
expect(outputType).property('name')
92+
.to.equal(`CreateOne${UserTypeComposer.getTypeName()}Payload`);
9393
});
9494

9595
it('should have recordId field', () => {
96-
const outputType = createOne(UserModel, UserType).getOutputType();
96+
const outputType = createOne(UserModel, UserTypeComposer).getOutputType();
9797
const recordIdField = new TypeComposer(outputType).getField('recordId');
9898
expect(recordIdField).property('type').to.equal(GraphQLMongoID);
9999
});
100100

101101
it('should have record field', () => {
102-
const outputType = createOne(UserModel, UserType).getOutputType();
102+
const outputType = createOne(UserModel, UserTypeComposer).getOutputType();
103103
const recordField = new TypeComposer(outputType).getField('record');
104-
expect(recordField).property('type').to.equal(UserType);
104+
expect(recordField).property('type').to.equal(UserTypeComposer.getType());
105105
});
106106
});
107107
});

src/resolvers/__tests__/findById-test.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
import { expect } from 'chai';
44
import { UserModel } from '../../__mocks__/userModel.js';
55
import findById from '../findById';
6-
import Resolver from 'graphql-compose/lib/resolver/resolver';
6+
import { Resolver } from 'graphql-compose';
77
import { GraphQLNonNull } from 'graphql';
88
import GraphQLMongoID from '../../types/mongoid';
9-
import { convertModelToGraphQL } from '../../fieldsConverter';
9+
import { mongooseModelToTypeComposer } from '../../modelConverter';
1010

11-
const UserType = convertModelToGraphQL(UserModel, 'User');
11+
const UserTypeComposer = mongooseModelToTypeComposer(UserModel);
1212

1313
describe('findById() ->', () => {
1414
let user;
@@ -25,13 +25,13 @@ describe('findById() ->', () => {
2525
});
2626

2727
it('should return Resolver object', () => {
28-
const resolver = findById(UserModel, UserType);
28+
const resolver = findById(UserModel, UserTypeComposer);
2929
expect(resolver).to.be.instanceof(Resolver);
3030
});
3131

3232
describe('Resolver.args', () => {
3333
it('should have non-null `_id` arg', () => {
34-
const resolver = findById(UserModel, UserType);
34+
const resolver = findById(UserModel, UserTypeComposer);
3535
expect(resolver.hasArg('_id')).to.be.true;
3636
const argConfig = resolver.getArg('_id');
3737
expect(argConfig).property('type').that.instanceof(GraphQLNonNull);
@@ -41,22 +41,23 @@ describe('findById() ->', () => {
4141

4242
describe('Resolver.resolve():Promise', () => {
4343
it('should be fulfilled promise', async () => {
44-
const result = findById(UserModel, UserType).resolve({});
44+
const result = findById(UserModel, UserTypeComposer).resolve({});
4545
await expect(result).be.fulfilled;
4646
});
4747

4848
it('should be rejected if args.id is not objectId', async () => {
49-
const result = findById(UserModel, UserType).resolve({ args: { _id: 1 } });
49+
const result = findById(UserModel, UserTypeComposer).resolve({ args: { _id: 1 } });
5050
await expect(result).be.rejected;
5151
});
5252

5353
it('should return null if args.id is empty', async () => {
54-
const result = await findById(UserModel, UserType).resolve({});
54+
const result = await findById(UserModel, UserTypeComposer).resolve({});
5555
expect(result).equal(null);
5656
});
5757

5858
it('should return document if provided existed id', async () => {
59-
const result = await findById(UserModel, UserType).resolve({ args: { _id: user._id } });
59+
const result = await findById(UserModel, UserTypeComposer)
60+
.resolve({ args: { _id: user._id } });
6061
expect(result).have.property('name').that.equal(user.name);
6162
});
6263
});

src/resolvers/__tests__/findByIds-test.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
import { expect } from 'chai';
44
import { UserModel } from '../../__mocks__/userModel.js';
55
import findByIds from '../findByIds';
6-
import Resolver from 'graphql-compose/lib/resolver/resolver';
6+
import { Resolver } from 'graphql-compose';
77
import { GraphQLNonNull, GraphQLList } from 'graphql';
88
import GraphQLMongoID from '../../types/mongoid';
9-
import { convertModelToGraphQL } from '../../fieldsConverter';
9+
import { mongooseModelToTypeComposer } from '../../modelConverter';
1010

11-
const UserType = convertModelToGraphQL(UserModel, 'User');
11+
const UserTypeComposer = mongooseModelToTypeComposer(UserModel);
1212

1313
describe('findByIds() ->', () => {
1414
let user1;
@@ -34,13 +34,13 @@ describe('findByIds() ->', () => {
3434
});
3535

3636
it('should return Resolver object', () => {
37-
const resolver = findByIds(UserModel, UserType);
37+
const resolver = findByIds(UserModel, UserTypeComposer);
3838
expect(resolver).to.be.instanceof(Resolver);
3939
});
4040

4141
describe('Resolver.args', () => {
4242
it('should have non-null `_ids` arg', () => {
43-
const resolver = findByIds(UserModel, UserType);
43+
const resolver = findByIds(UserModel, UserTypeComposer);
4444
expect(resolver.hasArg('_ids')).to.be.true;
4545
const argConfig = resolver.getArg('_ids');
4646
expect(argConfig).property('type').that.instanceof(GraphQLNonNull);
@@ -49,36 +49,36 @@ describe('findByIds() ->', () => {
4949
});
5050

5151
it('should have `limit` arg', () => {
52-
const resolver = findByIds(UserModel, UserType);
52+
const resolver = findByIds(UserModel, UserTypeComposer);
5353
expect(resolver.hasArg('limit')).to.be.true;
5454
});
5555

5656
it('should have `sort` arg', () => {
57-
const resolver = findByIds(UserModel, UserType);
57+
const resolver = findByIds(UserModel, UserTypeComposer);
5858
expect(resolver.hasArg('sort')).to.be.true;
5959
});
6060
});
6161

6262
describe('Resolver.resolve():Promise', () => {
6363
it('should be fulfilled promise', async () => {
64-
const result = findByIds(UserModel, UserType).resolve({});
64+
const result = findByIds(UserModel, UserTypeComposer).resolve({});
6565
await expect(result).be.fulfilled;
6666
});
6767

6868
it('should return empty array if args._ids is empty', async () => {
69-
const result = await findByIds(UserModel, UserType).resolve({});
69+
const result = await findByIds(UserModel, UserTypeComposer).resolve({});
7070
expect(result).to.be.instanceOf(Array);
7171
expect(result).to.be.empty;
7272
});
7373

7474
it('should return empty array if args._ids is not valid objectIds', async () => {
75-
const result = await findByIds(UserModel, UserType).resolve({ args: { _ids: ['d', 'e'] } });
75+
const result = await findByIds(UserModel, UserTypeComposer).resolve({ args: { _ids: ['d', 'e'] } });
7676
expect(result).to.be.instanceOf(Array);
7777
expect(result).to.be.empty;
7878
});
7979

8080
it('should return array of documents', async () => {
81-
const result = await findByIds(UserModel, UserType)
81+
const result = await findByIds(UserModel, UserTypeComposer)
8282
.resolve({ args: { _ids: [user1._id, user2._id, user3._id] } });
8383

8484
expect(result).to.be.instanceOf(Array);
@@ -89,7 +89,7 @@ describe('findByIds() ->', () => {
8989

9090
it('should return array of documents if object id is string', async () => {
9191
const stringId = `${user1._id}`;
92-
const result = await findByIds(UserModel, UserType)
92+
const result = await findByIds(UserModel, UserTypeComposer)
9393
.resolve({ args: { _ids: [stringId] } });
9494

9595
expect(result).to.be.instanceOf(Array);

0 commit comments

Comments
 (0)