@@ -97,4 +97,130 @@ describe('directiveEstimator analysis', () => {
9797 visit ( ast , visitWithTypeInfo ( typeInfo , visitor ) ) ;
9898 expect ( visitor . complexity ) . to . equal ( 1 ) ;
9999 } ) ;
100+
101+ it ( 'returns value + child complexity for configured multipliers but no values' , ( ) => {
102+ const ast = parse ( `
103+ query {
104+ childList {
105+ scalar
106+ }
107+ }
108+ ` ) ;
109+
110+ const context = new ValidationContext ( schema , ast , typeInfo ) ;
111+ const visitor = new ComplexityVisitor ( context , {
112+ maximumComplexity : 100 ,
113+ estimators : [
114+ directiveEstimator ( )
115+ ]
116+ } ) ;
117+
118+ visit ( ast , visitWithTypeInfo ( typeInfo , visitor ) ) ;
119+ expect ( visitor . complexity ) . to . equal ( 5 ) ;
120+ } ) ;
121+
122+ it ( 'uses numeric multiplier value' , ( ) => {
123+ const ast = parse ( `
124+ query {
125+ childList(limit: 2) {
126+ scalar
127+ }
128+ }
129+ ` ) ;
130+
131+ const context = new ValidationContext ( schema , ast , typeInfo ) ;
132+ const visitor = new ComplexityVisitor ( context , {
133+ maximumComplexity : 100 ,
134+ estimators : [
135+ directiveEstimator ( )
136+ ]
137+ } ) ;
138+
139+ visit ( ast , visitWithTypeInfo ( typeInfo , visitor ) ) ;
140+ expect ( visitor . complexity ) . to . equal ( 10 ) ;
141+ } ) ;
142+
143+ it ( 'combines multiple numeric multiplier values' , ( ) => {
144+ const ast = parse ( `
145+ query {
146+ childList(limit: 2, first: 2) {
147+ scalar
148+ }
149+ }
150+ ` ) ;
151+
152+ const context = new ValidationContext ( schema , ast , typeInfo ) ;
153+ const visitor = new ComplexityVisitor ( context , {
154+ maximumComplexity : 100 ,
155+ estimators : [
156+ directiveEstimator ( )
157+ ]
158+ } ) ;
159+
160+ visit ( ast , visitWithTypeInfo ( typeInfo , visitor ) ) ;
161+ expect ( visitor . complexity ) . to . equal ( 20 ) ;
162+ } ) ;
163+
164+ it ( 'uses multiplier array value length' , ( ) => {
165+ const ast = parse ( `
166+ query {
167+ childList(ids: ["a", "b"]) {
168+ scalar
169+ }
170+ }
171+ ` ) ;
172+
173+ const context = new ValidationContext ( schema , ast , typeInfo ) ;
174+ const visitor = new ComplexityVisitor ( context , {
175+ maximumComplexity : 100 ,
176+ estimators : [
177+ directiveEstimator ( )
178+ ]
179+ } ) ;
180+
181+ visit ( ast , visitWithTypeInfo ( typeInfo , visitor ) ) ;
182+ expect ( visitor . complexity ) . to . equal ( 10 ) ;
183+ } ) ;
184+
185+ it ( 'uses nested multiplier paths' , ( ) => {
186+ const ast = parse ( `
187+ query {
188+ childList(filter: {limit: 3}) {
189+ scalar
190+ }
191+ }
192+ ` ) ;
193+
194+ const context = new ValidationContext ( schema , ast , typeInfo ) ;
195+ const visitor = new ComplexityVisitor ( context , {
196+ maximumComplexity : 100 ,
197+ estimators : [
198+ directiveEstimator ( )
199+ ]
200+ } ) ;
201+
202+ visit ( ast , visitWithTypeInfo ( typeInfo , visitor ) ) ;
203+ expect ( visitor . complexity ) . to . equal ( 15 ) ;
204+ } ) ;
205+
206+ it ( 'uses multi level nested multiplier paths with array reference' , ( ) => {
207+ const ast = parse ( `
208+ query {
209+ childList(filter: {filters: [{limit: 2}]}) {
210+ scalar
211+ }
212+ }
213+ ` ) ;
214+
215+ const context = new ValidationContext ( schema , ast , typeInfo ) ;
216+ const visitor = new ComplexityVisitor ( context , {
217+ maximumComplexity : 100 ,
218+ estimators : [
219+ directiveEstimator ( )
220+ ]
221+ } ) ;
222+
223+ visit ( ast , visitWithTypeInfo ( typeInfo , visitor ) ) ;
224+ expect ( visitor . complexity ) . to . equal ( 10 ) ;
225+ } ) ;
100226} ) ;
0 commit comments