@@ -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