1+ import { parse } from 'graphql' ;
12import getQueryTypeComplexity from '../../src/analysis/typeComplexityAnalysis' ;
23
34/**
@@ -168,45 +169,47 @@ const typeWeights: TypeWeightObject = {
168169
169170xdescribe ( 'Test getQueryTypeComplexity function' , ( ) => {
170171 let query = '' ;
172+ let variables : any | undefined ;
171173 describe ( 'Calculates the correct type complexity for queries' , ( ) => {
172174 test ( 'with one feild' , ( ) => {
173175 query = `Query { scalars { num } }` ;
174- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 2 ) ; // Query 1 + Scalars 1
176+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 2 ) ; // Query 1 + Scalars 1
175177 } ) ;
176178
177179 test ( 'with two or more fields' , ( ) => {
178180 query = `Query { scalars { num } test { name } }` ;
179- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 3 ) ; // Query 1 + scalars 1 + test 1
181+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 3 ) ; // Query 1 + scalars 1 + test 1
180182 } ) ;
181183
182184 test ( 'with one level of nested fields' , ( ) => {
183185 query = `Query { scalars { num, test { name } } }` ;
184- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 3 ) ; // Query 1 + scalars 1 + test 1
186+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 3 ) ; // Query 1 + scalars 1 + test 1
185187 } ) ;
186188
187189 test ( 'with multiple levels of nesting' , ( ) => {
188190 query = `Query { scalars { num, test { name, scalars { id } } } }` ;
189- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 4 ) ; // Query 1 + scalars 1 + test 1 + scalars 1
191+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 4 ) ; // Query 1 + scalars 1 + test 1 + scalars 1
190192 } ) ;
191193
192194 test ( 'with aliases' , ( ) => {
193195 query = `Query { foo: scalar { num } bar: scalar { id }}` ;
194- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 3 ) ; // Query 1 + scalar 1 + scalar 1
196+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 3 ) ; // Query 1 + scalar 1 + scalar 1
195197 } ) ;
196198
197199 test ( 'with all scalar fields' , ( ) => {
198200 query = `Query { scalars { id, num, float, bool, string } }` ;
199- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 2 ) ; // Query 1 + scalar 1
201+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 2 ) ; // Query 1 + scalar 1
200202 } ) ;
201203
202204 test ( 'with arguments and variables' , ( ) => {
203205 query = `Query { hero(episode: EMPIRE) { id, name } }` ;
204- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 2 ) ; // Query 1 + hero/character 1
206+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 2 ) ; // Query 1 + hero/character 1
205207 query = `Query { human(id: 1) { id, name, appearsIn } }` ;
206- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 3 ) ; // Query 1 + human/character 1 + appearsIn/episode
208+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 3 ) ; // Query 1 + human/character 1 + appearsIn/episode
207209 // argument passed in as a variable
208- query = `Query { hero(episode: $ep) { id, name } }` ;
209- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 2 ) ; // Query 1 + hero/character 1
210+ variables = { ep : 'EMPIRE' } ;
211+ query = `Query varibaleQuery ($ep: Episode){ hero(episode: $ep) { id, name } }` ;
212+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 2 ) ; // Query 1 + hero/character 1
210213 } ) ;
211214
212215 test ( 'with fragments' , ( ) => {
@@ -225,7 +228,7 @@ xdescribe('Test getQueryTypeComplexity function', () => {
225228 appearsIn
226229 }
227230 }` ;
228- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 5 ) ; // Query 1 + 2*(character 1 + appearsIn/episode 1)
231+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 5 ) ; // Query 1 + 2*(character 1 + appearsIn/episode 1)
229232 } ) ;
230233
231234 test ( 'with inline fragments' , ( ) => {
@@ -241,7 +244,7 @@ xdescribe('Test getQueryTypeComplexity function', () => {
241244 }
242245 }
243246 }` ;
244- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 2 ) ; // Query 1 + hero/character 1)
247+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 2 ) ; // Query 1 + hero/character 1)
245248 } ) ;
246249
247250 /**
@@ -255,12 +258,15 @@ xdescribe('Test getQueryTypeComplexity function', () => {
255258 name
256259 }
257260 }` ;
258- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( false ) ; // ?
261+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( false ) ; // ?
259262 } ) ;
260263
261- test ( 'with lists detrmined by arguments' , ( ) => {
264+ test ( 'with lists detrmined by arguments and variables ' , ( ) => {
262265 query = `Query {reviews(episode: EMPIRE, first: 3) { stars, commentary } }` ;
263- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 4 ) ; // 1 Query + 3 reviews
266+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 4 ) ; // 1 Query + 3 reviews
267+ variables = { first : 3 } ;
268+ query = `Query queryVaribales($first: Int) {reviews(episode: EMPIRE, first: $first) { stars, commentary } }` ;
269+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 4 ) ; // 1 Query + 3 reviews
264270 } ) ;
265271
266272 test ( 'with nested lists' , ( ) => {
@@ -276,7 +282,7 @@ xdescribe('Test getQueryTypeComplexity function', () => {
276282 }
277283 }
278284 }` ;
279- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 17 ) ; // 1 Query + 1 human/character + (5 friends/character X 3 friends/characters)
285+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 17 ) ; // 1 Query + 1 human/character + (5 friends/character X 3 friends/characters)
280286 } ) ;
281287
282288 test ( 'accounting for __typename feild' , ( ) => {
@@ -294,19 +300,25 @@ xdescribe('Test getQueryTypeComplexity function', () => {
294300 }
295301 }
296302 }` ;
297- expect ( getQueryTypeComplexity ( query , typeWeights ) ) . toBe ( 5 ) ; // 1 Query + 4 search results
303+ expect ( getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toBe ( 5 ) ; // 1 Query + 4 search results
298304 } ) ;
299305
300306 // todo: directives @skip , @include and custom directives
301307
302308 // todo: expand on error handling
303309 test ( 'Throws an error if for a bad query' , ( ) => {
304310 query = `Query { hello { hi } }` ; // type doesn't exist
305- expect ( ( ) => getQueryTypeComplexity ( query , typeWeights ) ) . toThrow ( 'Error' ) ;
311+ expect ( ( ) => getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toThrow (
312+ 'Error'
313+ ) ;
306314 query = `Query { hero(episode: EMPIRE){ starship } }` ; // field doesn't exist
307- expect ( ( ) => getQueryTypeComplexity ( query , typeWeights ) ) . toThrow ( 'Error' ) ;
315+ expect ( ( ) => getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toThrow (
316+ 'Error'
317+ ) ;
308318 query = `Query { hero(episode: EMPIRE) { id, name }` ; // missing a closing bracket
309- expect ( ( ) => getQueryTypeComplexity ( query , typeWeights ) ) . toThrow ( 'Error' ) ;
319+ expect ( ( ) => getQueryTypeComplexity ( parse ( query ) , variables , typeWeights ) ) . toThrow (
320+ 'Error'
321+ ) ;
310322 } ) ;
311323 } ) ;
312324
0 commit comments