Skip to content

Commit 321dded

Browse files
committed
refactor: remove *Lean resolvers in favor of config option lean addition to basic resolvers
related: #263 (comment) closes #266 related #140
1 parent 730c062 commit 321dded

29 files changed

+277
-1420
lines changed

src/__tests__/github_issues/141-test.ts

-16
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,15 @@ describe('issue #141 - createOne with custom id (not MongoId)', () => {
4949

5050
it('Resolvers *ById should have Int type for args._id', () => {
5151
expect(UserTC.mongooseResolvers.findById().getArgTypeName('_id')).toBe('Int!');
52-
expect(UserTC.mongooseResolvers.findByIdLean().getArgTypeName('_id')).toBe('Int!');
5352
expect(UserTC.mongooseResolvers.removeById().getArgTypeName('_id')).toBe('Int!');
5453
expect(UserTC.mongooseResolvers.updateById().getArgTypeName('_id')).toBe('Int!');
5554

5655
expect(UserTC.mongooseResolvers.findByIds().getArgTypeName('_ids')).toBe('[Int!]!');
57-
expect(UserTC.mongooseResolvers.findByIdsLean().getArgTypeName('_ids')).toBe('[Int!]!');
5856
});
5957

6058
it('Resolvers dataLoader* should have Int type for args._id', () => {
6159
expect(UserTC.mongooseResolvers.dataLoader().getArgTypeName('_id')).toBe('Int!');
62-
expect(UserTC.mongooseResolvers.dataLoaderLean().getArgTypeName('_id')).toBe('Int!');
6360
expect(UserTC.mongooseResolvers.dataLoaderMany().getArgTypeName('_ids')).toBe('[Int!]!');
64-
expect(UserTC.mongooseResolvers.dataLoaderManyLean().getArgTypeName('_ids')).toBe('[Int!]!');
6561
});
6662

6763
it('Check createOne/findOne resolvers', async () => {
@@ -133,27 +129,15 @@ describe('issue #141 - createOne with custom id (not MongoId)', () => {
133129
}"
134130
`);
135131
expect(ComplexTC.mongooseResolvers.findById().getArgTypeName('_id')).toBe('Complex_idInput!');
136-
expect(ComplexTC.mongooseResolvers.findByIdLean().getArgTypeName('_id')).toBe(
137-
'Complex_idInput!'
138-
);
139132
expect(ComplexTC.mongooseResolvers.removeById().getArgTypeName('_id')).toBe('Complex_idInput!');
140133
expect(ComplexTC.mongooseResolvers.updateById().getArgTypeName('_id')).toBe('Complex_idInput!');
141134
expect(ComplexTC.mongooseResolvers.findByIds().getArgTypeName('_ids')).toBe(
142135
'[Complex_idInput!]!'
143136
);
144-
expect(ComplexTC.mongooseResolvers.findByIdsLean().getArgTypeName('_ids')).toBe(
145-
'[Complex_idInput!]!'
146-
);
147137
expect(ComplexTC.mongooseResolvers.dataLoader().getArgTypeName('_id')).toBe('Complex_idInput!');
148-
expect(ComplexTC.mongooseResolvers.dataLoaderLean().getArgTypeName('_id')).toBe(
149-
'Complex_idInput!'
150-
);
151138
expect(ComplexTC.mongooseResolvers.dataLoaderMany().getArgTypeName('_ids')).toBe(
152139
'[Complex_idInput!]!'
153140
);
154-
expect(ComplexTC.mongooseResolvers.dataLoaderManyLean().getArgTypeName('_ids')).toBe(
155-
'[Complex_idInput!]!'
156-
);
157141

158142
await ComplexModel.create({
159143
_id: { region: 'us-west', zone: 'a' },

src/__tests__/github_issues/260-test.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { schemaComposer, graphql } from 'graphql-compose';
2-
import { composeWithMongoose } from '../../index';
2+
import { composeMongoose } from '../../index';
33
import { mongoose } from '../../__mocks__/mongooseCommon';
44
import { Document } from 'mongoose';
55

@@ -25,29 +25,31 @@ interface IPost extends Document {
2525
const UserModel = mongoose.model<IUser>('User', UserSchema);
2626
const PostModel = mongoose.model<IPost>('Post', PostSchema);
2727

28-
const UserTC = composeWithMongoose(UserModel);
29-
const PostTC = composeWithMongoose(PostModel);
28+
const UserTC = composeMongoose(UserModel);
29+
const PostTC = composeMongoose(PostModel);
3030

3131
PostTC.addRelation('author', {
32-
// resolver: UserTC.getResolver('dataLoader'), // <---- DataLoader for getting one mongoose doc by id (slower than `dataLoaderLean` but more functional)
33-
resolver: UserTC.getResolver('dataLoaderLean'), // <---- `Lean` loads record from DB without support of mongoose getters & virtuals
32+
resolver: UserTC.mongooseResolvers.dataLoader({
33+
lean: true, // <---- `Lean` loads record from DB without support of mongoose getters & virtuals
34+
}),
3435
prepareArgs: {
3536
_id: (s) => s.authorId,
3637
},
3738
projection: { authorId: true },
3839
});
3940

4041
PostTC.addRelation('reviewers', {
41-
// resolver: UserTC.getResolver('dataLoaderMany'), // <---- DataLoader for getting many mongoose docs by ids (slower than `dataLoaderManyLean` but more functional)
42-
resolver: UserTC.getResolver('dataLoaderManyLean'), // <---- `Lean` loads records from DB without support of mongoose getters & virtuals
42+
resolver: UserTC.mongooseResolvers.dataLoaderMany({
43+
lean: true, // <---- `Lean` loads records from DB without support of mongoose getters & virtuals
44+
}),
4345
prepareArgs: {
4446
_ids: (s) => s.reviewerIds,
4547
},
4648
projection: { reviewerIds: true },
4749
});
4850

4951
schemaComposer.Query.addFields({
50-
posts: PostTC.getResolver('findMany'),
52+
posts: PostTC.mongooseResolvers.findMany(),
5153
});
5254
const schema = schemaComposer.buildSchema();
5355

src/__tests__/github_issues/263-test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ const UserTC = composeMongoose(UserModel);
3030
const PostTC = composeMongoose(PostModel);
3131

3232
PostTC.addRelation('author', {
33-
resolver: UserTC.mongooseResolvers.dataLoaderLean(),
33+
resolver: UserTC.mongooseResolvers.dataLoader({ lean: true }),
3434
prepareArgs: {
3535
_id: (s) => s.authorId,
3636
},
3737
projection: { authorId: true },
3838
});
3939

4040
PostTC.addRelation('reviewers', {
41-
resolver: UserTC.mongooseResolvers.dataLoaderManyLean(),
41+
resolver: UserTC.mongooseResolvers.dataLoaderMany({ lean: true }),
4242
prepareArgs: {
4343
_ids: (s) => s.reviewerIds,
4444
},

src/__tests__/github_issues/268-test.ts

+1-17
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ beforeAll(async () => {
3333
});
3434
afterAll(() => UserModel.base.disconnect());
3535

36-
describe('issue #268 - Allow to provide `suffixes` for resolvers configs', () => {
36+
describe('issue #268 - Allow to provide `suffix` option for resolvers configs', () => {
3737
it('generate deferent resolvers with different configs', async () => {
3838
const createOne1 = UserTC.mongooseResolvers.createOne();
3939
expect(createOne1.getTypeName()).toBe('CreateOneUserPayload');
@@ -76,14 +76,6 @@ describe('issue #268 - Allow to provide `suffixes` for resolvers configs', () =>
7676
expect(resolver.getArgTypeName('sort')).toBe('SortFindManyUserXXXInput');
7777
});
7878

79-
it('Resolver:findManyLean', () => {
80-
const resolver = UserTC.mongooseResolvers.findManyLean({
81-
suffix: 'XXX',
82-
});
83-
expect(resolver.getArgTypeName('filter')).toBe('FilterFindManyLeanUserXXXInput');
84-
expect(resolver.getArgTypeName('sort')).toBe('SortFindManyLeanUserXXXInput');
85-
});
86-
8779
it('Resolver:findOne', () => {
8880
const resolver = UserTC.mongooseResolvers.findOne({
8981
suffix: 'XXX',
@@ -92,14 +84,6 @@ describe('issue #268 - Allow to provide `suffixes` for resolvers configs', () =>
9284
expect(resolver.getArgTypeName('sort')).toBe('SortFindOneUserXXXInput');
9385
});
9486

95-
it('Resolver:findOneLean', () => {
96-
const resolver = UserTC.mongooseResolvers.findOneLean({
97-
suffix: 'XXX',
98-
});
99-
expect(resolver.getArgTypeName('filter')).toBe('FilterFindOneLeanUserXXXInput');
100-
expect(resolver.getArgTypeName('sort')).toBe('SortFindOneLeanUserXXXInput');
101-
});
102-
10387
it('Resolver:createMany', () => {
10488
const resolver = UserTC.mongooseResolvers.createMany({
10589
suffix: 'XXX',

src/resolvers/__tests__/dataLoader-test.ts

+28
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ describe('dataLoader() ->', () => {
9292
expect(result).toBeInstanceOf(UserModel);
9393
});
9494

95+
it('should return lean object from DB', async () => {
96+
const result = await dataLoader(UserModel, UserTC, { lean: true }).resolve({
97+
args: { _id: user._id },
98+
context: {},
99+
info,
100+
});
101+
expect(result).not.toBeInstanceOf(UserModel);
102+
});
103+
95104
it('should return mongoose Post document', async () => {
96105
const result = await dataLoader(PostModel, PostTypeComposer).resolve({
97106
args: { _id: 1 },
@@ -101,6 +110,15 @@ describe('dataLoader() ->', () => {
101110
expect(result).toBeInstanceOf(PostModel);
102111
});
103112

113+
it('should return lean Post object directly from DB', async () => {
114+
const result = await dataLoader(PostModel, PostTypeComposer, { lean: true }).resolve({
115+
args: { _id: 1 },
116+
context: {},
117+
info,
118+
});
119+
expect(result).not.toBeInstanceOf(PostModel);
120+
});
121+
104122
it('should call `beforeQuery` method with non-executed `query` as arg', async () => {
105123
const result = await dataLoader(PostModel, PostTypeComposer).resolve({
106124
args: { _id: 1 },
@@ -163,4 +181,14 @@ describe('dataLoader() ->', () => {
163181
// return undefined for not found record
164182
expect(await resultPromise5).toBe(undefined);
165183
});
184+
185+
it('check aliases for lean record', async () => {
186+
const resolver = dataLoader(UserModel, UserTC, { lean: true });
187+
const resultPromise1 = resolver.resolve({
188+
args: { _id: user2._id },
189+
context: {},
190+
info,
191+
});
192+
expect((await resultPromise1).name).toEqual('user2');
193+
});
166194
});

src/resolvers/__tests__/dataLoaderLean-test.ts

-166
This file was deleted.

0 commit comments

Comments
 (0)