Skip to content

Commit 4f2f1b9

Browse files
committed
Added typeStorage. If you create resolver in second time, it should reuse existed internal types.
1 parent 1372ef0 commit 4f2f1b9

24 files changed

+339
-84
lines changed

src/__tests__/typeStorage-test.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { expect } from 'chai';
2+
import typeStorage from '../typeStorage';
3+
4+
describe('typeStorage', () => {
5+
it('should be instance of Map', () => {
6+
expect(typeStorage).instanceof(Map);
7+
});
8+
9+
it('should work `get`, `set`, `has`, `clear` methods and `size` property', () => {
10+
typeStorage.clear();
11+
expect(typeStorage.size).to.equal(0);
12+
typeStorage.set(123, 567);
13+
expect(typeStorage.get(123)).to.equal(567);
14+
expect(typeStorage.has(123)).to.be.true;
15+
expect(typeStorage.size).to.equal(1);
16+
typeStorage.clear();
17+
expect(typeStorage.size).to.equal(0);
18+
});
19+
20+
describe('getOrSet() method', () => {
21+
it('should return existed value', () => {
22+
typeStorage.clear();
23+
typeStorage.set(123, 456);
24+
expect(typeStorage.getOrSet(123, 'any')).to.equal(456);
25+
});
26+
27+
it('should set new value and return it, if key not exists', () => {
28+
typeStorage.clear();
29+
expect(typeStorage.getOrSet(123, 456)).to.equal(456);
30+
expect(typeStorage.get(123)).to.equal(456);
31+
});
32+
33+
it('should not set new value if it is empty', () => {
34+
typeStorage.clear();
35+
expect(typeStorage.getOrSet(123, null)).to.equal(null);
36+
expect(typeStorage.has(123)).to.be.false;
37+
});
38+
});
39+
});

src/composeWithMongoose.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ export function composeWithMongoose(
3232
prepareFields(typeComposer, opts.fields);
3333
}
3434

35-
// $FlowFixMe
3635
typeComposer.setRecordIdFn(source => (source ? `${source._id}` : ''));
3736

3837
createInputType(typeComposer, opts.inputType);

src/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
/* @flow */
22

33
import { composeWithMongoose } from './composeWithMongoose';
4+
import typeStorage from './typeStorage';
45

56
export default composeWithMongoose;
67

78
export * from './fieldsConverter';
9+
export {
10+
typeStorage as mongooseTypeStorage,
11+
};

src/resolvers/__tests__/createOne-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Resolver, TypeComposer } from 'graphql-compose';
77
import { composeWithMongoose } from '../../composeWithMongoose';
88
import GraphQLMongoID from '../../types/mongoid';
99
import { GraphQLNonNull } from 'graphql';
10+
import typeStorage from '../../typeStorage';
1011

1112
const UserTypeComposer = composeWithMongoose(UserModel);
1213

@@ -17,6 +18,10 @@ describe('createOne() ->', () => {
1718
});
1819
});
1920

21+
beforeEach(() => {
22+
typeStorage.clear();
23+
});
24+
2025
it('should return Resolver object', () => {
2126
const resolver = createOne(UserModel, UserTypeComposer);
2227
expect(resolver).to.be.instanceof(Resolver);
@@ -103,5 +108,12 @@ describe('createOne() ->', () => {
103108
const recordField = new TypeComposer(outputType).getField('record');
104109
expect(recordField).property('type').to.equal(UserTypeComposer.getType());
105110
});
111+
112+
it('should reuse existed outputType', () => {
113+
const outputTypeName = `CreateOne${UserTypeComposer.getTypeName()}Payload`;
114+
typeStorage.set(outputTypeName, 'EXISTED_TYPE');
115+
const outputType = createOne(UserModel, UserTypeComposer).getOutputType();
116+
expect(outputType).to.equal('EXISTED_TYPE');
117+
});
106118
});
107119
});

src/resolvers/__tests__/removeById-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Resolver, TypeComposer } from 'graphql-compose';
77
import { GraphQLNonNull } from 'graphql';
88
import GraphQLMongoID from '../../types/mongoid';
99
import { composeWithMongoose } from '../../composeWithMongoose';
10+
import typeStorage from '../../typeStorage';
1011

1112
const UserTypeComposer = composeWithMongoose(UserModel);
1213

@@ -19,6 +20,10 @@ describe('removeById() ->', () => {
1920
});
2021
});
2122

23+
beforeEach(() => {
24+
typeStorage.clear();
25+
});
26+
2227
beforeEach('add test user document to mongoDB', () => {
2328
user = new UserModel({
2429
name: 'userName1',
@@ -122,5 +127,12 @@ describe('removeById() ->', () => {
122127
expect(typeComposer.hasField('record')).to.be.true;
123128
expect(typeComposer.getField('record').type).to.equal(UserTypeComposer.getType());
124129
});
130+
131+
it('should reuse existed outputType', () => {
132+
const outputTypeName = `RemoveById${UserTypeComposer.getTypeName()}Payload`;
133+
typeStorage.set(outputTypeName, 'EXISTED_TYPE');
134+
const outputType = removeById(UserModel, UserTypeComposer).getOutputType();
135+
expect(outputType).to.equal('EXISTED_TYPE');
136+
});
125137
});
126138
});

src/resolvers/__tests__/removeMany-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Resolver from 'graphql-compose/lib/resolver/resolver';
77
import TypeComposer from 'graphql-compose/lib/typeComposer';
88
import { GraphQLInt, GraphQLNonNull } from 'graphql';
99
import { composeWithMongoose } from '../../composeWithMongoose';
10+
import typeStorage from '../../typeStorage';
1011

1112
const UserTypeComposer = composeWithMongoose(UserModel);
1213

@@ -15,6 +16,10 @@ describe('removeMany() ->', () => {
1516
let user2;
1617
let user3;
1718

19+
beforeEach(() => {
20+
typeStorage.clear();
21+
});
22+
1823
beforeEach('clear UserModel collection', (done) => {
1924
UserModel.collection.drop(() => {
2025
done();
@@ -126,5 +131,12 @@ describe('removeMany() ->', () => {
126131
const numAffectedField = new TypeComposer(outputType).getField('numAffected');
127132
expect(numAffectedField).property('type').to.equal(GraphQLInt);
128133
});
134+
135+
it('should reuse existed outputType', () => {
136+
const outputTypeName = `RemoveMany${UserTypeComposer.getTypeName()}Payload`;
137+
typeStorage.set(outputTypeName, 'EXISTED_TYPE');
138+
const outputType = removeMany(UserModel, UserTypeComposer).getOutputType();
139+
expect(outputType).to.equal('EXISTED_TYPE');
140+
});
129141
});
130142
});

src/resolvers/__tests__/removeOne-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Resolver, TypeComposer } from 'graphql-compose';
77
import GraphQLMongoID from '../../types/mongoid';
88
import { mongoose } from '../../__mocks__/mongooseCommon';
99
import { composeWithMongoose } from '../../composeWithMongoose';
10+
import typeStorage from '../../typeStorage';
1011

1112
const UserTypeComposer = composeWithMongoose(UserModel);
1213

@@ -21,6 +22,10 @@ describe('removeOne() ->', () => {
2122
});
2223
});
2324

25+
beforeEach(() => {
26+
typeStorage.clear();
27+
});
28+
2429
beforeEach('add test user document to mongoDB', () => {
2530
user1 = new UserModel({
2631
name: 'userName1',
@@ -151,5 +156,12 @@ describe('removeOne() ->', () => {
151156
const recordField = new TypeComposer(outputType).getField('record');
152157
expect(recordField).property('type').to.equal(UserTypeComposer.getType());
153158
});
159+
160+
it('should reuse existed outputType', () => {
161+
const outputTypeName = `RemoveOne${UserTypeComposer.getTypeName()}Payload`;
162+
typeStorage.set(outputTypeName, 'EXISTED_TYPE');
163+
const outputType = removeOne(UserModel, UserTypeComposer).getOutputType();
164+
expect(outputType).to.equal('EXISTED_TYPE');
165+
});
154166
});
155167
});

src/resolvers/__tests__/updateById-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
} from 'graphql';
1212
import GraphQLMongoID from '../../types/mongoid';
1313
import { composeWithMongoose } from '../../composeWithMongoose';
14+
import typeStorage from '../../typeStorage';
1415

1516
const UserTypeComposer = composeWithMongoose(UserModel);
1617

@@ -45,6 +46,10 @@ describe('updateById() ->', () => {
4546
]);
4647
});
4748

49+
beforeEach(() => {
50+
typeStorage.clear();
51+
});
52+
4853
it('should return Resolver object', () => {
4954
const resolver = updateById(UserModel, UserTypeComposer);
5055
expect(resolver).to.be.instanceof(Resolver);
@@ -146,5 +151,12 @@ describe('updateById() ->', () => {
146151
expect(typeComposer.hasField('record')).to.be.true;
147152
expect(typeComposer.getField('record').type).to.equal(UserTypeComposer.getType());
148153
});
154+
155+
it('should reuse existed outputType', () => {
156+
const outputTypeName = `UpdateById${UserTypeComposer.getTypeName()}Payload`;
157+
typeStorage.set(outputTypeName, 'EXISTED_TYPE');
158+
const outputType = updateById(UserModel, UserTypeComposer).getOutputType();
159+
expect(outputType).to.equal('EXISTED_TYPE');
160+
});
149161
});
150162
});

src/resolvers/__tests__/updateMany-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import updateMany from '../updateMany';
66
import { Resolver, TypeComposer } from 'graphql-compose';
77
import { GraphQLInt, GraphQLNonNull } from 'graphql';
88
import { composeWithMongoose } from '../../composeWithMongoose';
9+
import typeStorage from '../../typeStorage';
910

1011
const UserTypeComposer = composeWithMongoose(UserModel);
1112

@@ -41,6 +42,10 @@ describe('updateMany() ->', () => {
4142
]);
4243
});
4344

45+
beforeEach(() => {
46+
typeStorage.clear();
47+
});
48+
4449
it('should return Resolver object', () => {
4550
const resolver = updateMany(UserModel, UserTypeComposer);
4651
expect(resolver).to.be.instanceof(Resolver);
@@ -124,5 +129,12 @@ describe('updateMany() ->', () => {
124129
const numAffectedField = new TypeComposer(outputType).getField('numAffected');
125130
expect(numAffectedField).property('type').to.equal(GraphQLInt);
126131
});
132+
133+
it('should reuse existed outputType', () => {
134+
const outputTypeName = `UpdateMany${UserTypeComposer.getTypeName()}Payload`;
135+
typeStorage.set(outputTypeName, 'EXISTED_TYPE');
136+
const outputType = updateMany(UserModel, UserTypeComposer).getOutputType();
137+
expect(outputType).to.equal('EXISTED_TYPE');
138+
});
127139
});
128140
});

src/resolvers/__tests__/updateOne-test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Resolver, TypeComposer } from 'graphql-compose';
77
import GraphQLMongoID from '../../types/mongoid';
88
import { GraphQLNonNull } from 'graphql';
99
import { composeWithMongoose } from '../../composeWithMongoose';
10+
import typeStorage from '../../typeStorage';
1011

1112
const UserTypeComposer = composeWithMongoose(UserModel);
1213

@@ -41,6 +42,10 @@ describe('updateOne() ->', () => {
4142
]);
4243
});
4344

45+
beforeEach(() => {
46+
typeStorage.clear();
47+
});
48+
4449
it('should return Resolver object', () => {
4550
const resolver = updateOne(UserModel, UserTypeComposer);
4651
expect(resolver).to.be.instanceof(Resolver);
@@ -172,5 +177,12 @@ describe('updateOne() ->', () => {
172177
const recordField = new TypeComposer(outputType).getField('record');
173178
expect(recordField).property('type').to.equal(UserTypeComposer.getType());
174179
});
180+
181+
it('should reuse existed outputType', () => {
182+
const outputTypeName = `UpdateOne${UserTypeComposer.getTypeName()}Payload`;
183+
typeStorage.set(outputTypeName, 'EXISTED_TYPE');
184+
const outputType = updateOne(UserModel, UserTypeComposer).getOutputType();
185+
expect(outputType).to.equal('EXISTED_TYPE');
186+
});
175187
});
176188
});

0 commit comments

Comments
 (0)