Skip to content

Commit b1eb524

Browse files
committed
Add tests for operators in filterHelper
1 parent 5a272ac commit b1eb524

File tree

1 file changed

+61
-15
lines changed

1 file changed

+61
-15
lines changed

src/resolvers/helpers/__tests__/filter-test.js

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,44 @@ describe('Resolver helper `filter` ->', () => {
2828
});
2929
});
3030

31-
// describe('addFieldsWithOperator()', () => {
32-
// it('should add OPERATORS_FIELDNAME to filterType', () => {
33-
// const args = filterHelperArgs(UserTypeComposer, UserModel, {
34-
// filterTypeName: 'FilterUserType',
35-
// });
36-
// const inputTypeComposer = new InputTypeComposer(args.filter.type);
37-
// addFieldsWithOperator('testTypeName', inputTypeComposer, UserModel, {});
38-
// });
39-
// });
31+
describe('addFieldsWithOperator()', () => {
32+
let args;
33+
let inputTypeComposer;
34+
35+
beforeEach(() => {
36+
args = filterHelperArgs(UserTypeComposer, UserModel, {
37+
filterTypeName: 'FilterUserType',
38+
});
39+
inputTypeComposer = new InputTypeComposer(args.filter.type);
40+
});
41+
42+
it('should add OPERATORS_FIELDNAME to filterType', () => {
43+
addFieldsWithOperator('testTypeName', inputTypeComposer, UserModel, {});
44+
expect(inputTypeComposer.hasField(OPERATORS_FIELDNAME)).to.be.true;
45+
});
46+
47+
it('should by default have only indexed fields', () => {
48+
addFieldsWithOperator('testTypeName', inputTypeComposer, UserModel, {});
49+
const operatorsType = inputTypeComposer.getFieldType(OPERATORS_FIELDNAME);
50+
const opComposer = new InputTypeComposer(operatorsType);
51+
expect(opComposer.getFieldNames()).to.have.members(['name', '_id', 'employment']);
52+
});
53+
54+
it('should have only provided fields via options', () => {
55+
addFieldsWithOperator('testTypeName', inputTypeComposer, UserModel, { age: ['lt'] });
56+
const operatorsType = inputTypeComposer.getFieldType(OPERATORS_FIELDNAME);
57+
const opComposer = new InputTypeComposer(operatorsType);
58+
expect(opComposer.getFieldNames()).to.have.members(['age']);
59+
});
60+
61+
it('should have only provided operators via options for field', () => {
62+
addFieldsWithOperator('testTypeName', inputTypeComposer, UserModel, { age: ['lt', 'gte'] });
63+
const operatorsType = inputTypeComposer.getFieldType(OPERATORS_FIELDNAME);
64+
const opComposer = new InputTypeComposer(operatorsType);
65+
const ageComposer = new InputTypeComposer(opComposer.getFieldType('age'));
66+
expect(ageComposer.getFieldNames()).to.have.members(['lt', 'gte']);
67+
});
68+
});
4069

4170
describe('filterHelperArgs()', () => {
4271
it('should throw error if first arg is not TypeComposer', () => {
@@ -124,29 +153,34 @@ describe('Resolver helper `filter` ->', () => {
124153
});
125154

126155
describe('filterHelper()', () => {
127-
let spyFn;
156+
let spyWhereFn;
157+
let spyFindFn;
128158
let resolveParams;
129159

130160
beforeEach(() => {
131-
spyFn = spy();
161+
spyWhereFn = spy();
162+
spyFindFn = spy();
132163
resolveParams = {
133164
query: {
134-
where: spyFn,
165+
where: spyWhereFn,
166+
find: spyFindFn,
135167
},
136168
};
137169
});
138170

139171
it('should not call query.where if args.filter is empty', () => {
140172
filterHelper(resolveParams);
141-
expect(spyFn).to.have.not.been.called();
173+
expect(spyWhereFn).to.have.not.been.called();
142174
});
175+
143176
it('should call query.where if args.filter is provided', () => {
144177
resolveParams.args = {
145178
filter: { name: 'nodkz' },
146179
};
147180
filterHelper(resolveParams);
148-
expect(spyFn).to.have.been.called.with({ name: 'nodkz' });
181+
expect(spyWhereFn).to.have.been.called.with({ name: 'nodkz' });
149182
});
183+
150184
it('should convert deep object in args.filter to dotted object', () => {
151185
resolveParams.args = {
152186
filter: {
@@ -157,10 +191,22 @@ describe('Resolver helper `filter` ->', () => {
157191
},
158192
};
159193
filterHelper(resolveParams);
160-
expect(spyFn).to.have.been.called.with({
194+
expect(spyWhereFn).to.have.been.called.with({
161195
'name.first': 'Pavel',
162196
age: 30,
163197
});
164198
});
199+
200+
it('should call query.find if args.filter.OPERATORS_FIELDNAME is provided', () => {
201+
resolveParams.args = {
202+
filter: {
203+
[OPERATORS_FIELDNAME]: { age: { gt: 10, lt: 20 } },
204+
},
205+
};
206+
filterHelper(resolveParams);
207+
expect(spyFindFn).to.have.been.called.with(
208+
{ age: { $gt: 10, $lt: 20 } }
209+
);
210+
});
165211
});
166212
});

0 commit comments

Comments
 (0)