diff --git a/README.md b/README.md index e9678bc..54961e0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +![GitHub last commit](https://img.shields.io/github/last-commit/ibm/graphql-query-generator.svg?style=flat) + +[![npm](https://img.shields.io/npm/v/ibm-graphql-query-generator.svg?style=flat)](https://www.npmjs.com/package/ibm-graphql-query-generator) + # GraphQL Query Generator This library will generate randomized [GraphQL](https://graphql.org/) queries from a given schema. @@ -65,8 +69,8 @@ const configuration = { return companyNameList[ Math.floor(Math.random() * companyNameList.length) ] - }, - }, + } + } } const { queryDocument, variableValues, seed } = generateRandomQuery( diff --git a/lib/generate-query.js b/lib/generate-query.js index 1509779..e445d2e 100644 --- a/lib/generate-query.js +++ b/lib/generate-query.js @@ -292,44 +292,43 @@ function getArgsAndVars(allArgs, nodeName, fieldName, config, schema, providedVa }); // If there is no providerMap, then just create a query with null variables if (config.providerMap) { + const variableValues = {}; const typeFieldName = `${nodeName}__${fieldName}`; - // Check for type__field provider - let providedVariableValues = provide_variables_1.getProviderValue(typeFieldName, config, providedValues); - // Map to full type__field__argument provider name - if (providedVariableValues) { - const temp = {}; - Object.entries(providedVariableValues).forEach(([argName, value]) => { + try { + // Check for type__field provider + const typeFieldProviderValue = provide_variables_1.getProviderValue(typeFieldName, config, providedValues); + // Map to full type__field__argument provider name + Object.entries(typeFieldProviderValue).forEach(([argName, value]) => { const varName = `${typeFieldName}__${argName}`; // Make sure it is a required argument (provider can provide more that necessary) if (Object.keys(variableDefinitionsMap).includes(varName)) { - temp[`${typeFieldName}__${argName}`] = value; + variableValues[`${typeFieldName}__${argName}`] = value; } }); - providedVariableValues = temp; } - const variableValues = providedVariableValues - ? providedVariableValues - : {}; - // Check for type__field__argument providers (and overwrite if applicable) - requiredArguments.forEach((arg) => { - const varName = `${typeFieldName}__${arg.name.value}`; - const argType = schema.getType(getTypeName(arg.type)); - if (provide_variables_1.isEnumType(argType)) { - variableValues[varName] = provide_variables_1.getRandomEnum(argType); - } - else { - const providedValue = provide_variables_1.getProviderValue(varName, config, Object.assign(Object.assign({}, variableValues), providedValues), argType); - if (providedValue) { - variableValues[varName] = providedValue; + finally { + // Check for type__field__argument providers (and overwrite if applicable) + requiredArguments.forEach((arg) => { + const varName = `${typeFieldName}__${arg.name.value}`; + const argType = schema.getType(getTypeName(arg.type)); + if (provide_variables_1.isEnumType(argType)) { + variableValues[varName] = provide_variables_1.getRandomEnum(argType); } - else if (!variableValues[varName]) { - throw new Error(`No provider found for "${varName}" in ` + - `${Object.keys(config.providerMap).join(', ')}. ` + - `Consider applying wildcard provider with "*__*" or "*__*__*"`); + else { + try { + const typeFieldArgumentProviderValue = provide_variables_1.getProviderValue(varName, config, Object.assign(Object.assign({}, variableValues), providedValues), argType); + variableValues[varName] = typeFieldArgumentProviderValue; + } + catch (e) { + // No value identified from either type__field or type__field__argument + if (!variableValues[varName]) { + throw new Error(`${e} Consider applying wildcard provider with "*__*" or "*__*__*"`); + } + } } - } - }); - return { args, variableDefinitionsMap, variableValues }; + }); + return { args, variableDefinitionsMap, variableValues }; + } // This is a special case allowing the user to generate a query without caring for argument values } else { diff --git a/lib/generate-query.js.map b/lib/generate-query.js.map index e06360b..f4c54b2 100644 --- a/lib/generate-query.js.map +++ b/lib/generate-query.js.map @@ -1 +1 @@ -{"version":3,"file":"generate-query.js","sourceRoot":"","sources":["../src/generate-query.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"generate-query.js","sourceRoot":"","sources":["../src/generate-query.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/provide-variables.js b/lib/provide-variables.js index 8cae3d9..a5f6f6c 100644 --- a/lib/provide-variables.js +++ b/lib/provide-variables.js @@ -36,7 +36,8 @@ function getProvider(varName, providerMap) { return providerMap[providerKey]; } else { - return null; + throw new Error(`No provider found for "${varName}" in ` + + `${Object.keys(providerMap).join(', ')}.`); } } function getRandomEnum(type) { @@ -58,18 +59,12 @@ function isEnumType(type) { } exports.isEnumType = isEnumType; function getProviderValue(varName, config, providedValues, argType) { - // If no providerMap was provided, then just create a query with no argument values - if (config.providerMap) { - const provider = getProvider(varName, config.providerMap); - if (typeof provider === 'function') { - return provider(providedValues, argType); - } - else { - return provider; - } + const provider = getProvider(varName, config.providerMap); + if (typeof provider === 'function') { + return provider(providedValues, argType); } else { - return null; + return provider; } } exports.getProviderValue = getProviderValue; diff --git a/lib/provide-variables.js.map b/lib/provide-variables.js.map index 3cf7ec2..29c73b6 100644 --- a/lib/provide-variables.js.map +++ b/lib/provide-variables.js.map @@ -1 +1 @@ -{"version":3,"file":"provide-variables.js","sourceRoot":"","sources":["../src/provide-variables.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"provide-variables.js","sourceRoot":"","sources":["../src/provide-variables.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/generate-query.ts b/src/generate-query.ts index c4b4367..5474351 100644 --- a/src/generate-query.ts +++ b/src/generate-query.ts @@ -458,62 +458,58 @@ function getArgsAndVars( // If there is no providerMap, then just create a query with null variables if (config.providerMap) { + const variableValues: { [varName: string]: any } = {} + const typeFieldName = `${nodeName}__${fieldName}` - // Check for type__field provider - let providedVariableValues = getProviderValue( - typeFieldName, - config, - providedValues - ) as { [varName: string]: any } - - // Map to full type__field__argument provider name - if (providedVariableValues) { - const temp = {} - Object.entries(providedVariableValues).forEach(([argName, value]) => { + try { + // Check for type__field provider + const typeFieldProviderValue = getProviderValue( + typeFieldName, + config, + providedValues + ) as { [varName: string]: any } + + // Map to full type__field__argument provider name + Object.entries(typeFieldProviderValue).forEach(([argName, value]) => { const varName = `${typeFieldName}__${argName}` // Make sure it is a required argument (provider can provide more that necessary) if (Object.keys(variableDefinitionsMap).includes(varName)) { - temp[`${typeFieldName}__${argName}`] = value + variableValues[`${typeFieldName}__${argName}`] = value } }) - - providedVariableValues = temp - } - - const variableValues: { [varName: string]: any } = providedVariableValues - ? providedVariableValues - : {} - - // Check for type__field__argument providers (and overwrite if applicable) - requiredArguments.forEach((arg) => { - const varName = `${typeFieldName}__${arg.name.value}` - const argType = schema.getType(getTypeName(arg.type)) - - if (isEnumType(argType)) { - variableValues[varName] = getRandomEnum(argType) - } else { - const providedValue = getProviderValue( - varName, - config, - { ...variableValues, ...providedValues }, - argType - ) as any - - if (providedValue) { - variableValues[varName] = providedValue - } else if (!variableValues[varName]) { - throw new Error( - `No provider found for "${varName}" in ` + - `${Object.keys(config.providerMap).join(', ')}. ` + - `Consider applying wildcard provider with "*__*" or "*__*__*"` - ) + } finally { + // Check for type__field__argument providers (and overwrite if applicable) + requiredArguments.forEach((arg) => { + const varName = `${typeFieldName}__${arg.name.value}` + const argType = schema.getType(getTypeName(arg.type)) + + if (isEnumType(argType)) { + variableValues[varName] = getRandomEnum(argType) + } else { + try { + const typeFieldArgumentProviderValue = getProviderValue( + varName, + config, + { ...variableValues, ...providedValues }, + argType + ) + + variableValues[varName] = typeFieldArgumentProviderValue + } catch (e) { + // No value identified from either type__field or type__field__argument + if (!variableValues[varName]) { + throw new Error( + `${e} Consider applying wildcard provider with "*__*" or "*__*__*"` + ) + } + } } - } - }) + }) - return { args, variableDefinitionsMap, variableValues } + return { args, variableDefinitionsMap, variableValues } + } // This is a special case allowing the user to generate a query without caring for argument values } else { diff --git a/src/provide-variables.ts b/src/provide-variables.ts index a16d709..eacea91 100644 --- a/src/provide-variables.ts +++ b/src/provide-variables.ts @@ -54,7 +54,10 @@ function getProvider(varName: string, providerMap: ProviderMap) { if (providerKey) { return providerMap[providerKey] } else { - return null + throw new Error( + `No provider found for "${varName}" in ` + + `${Object.keys(providerMap).join(', ')}.` + ) } } @@ -87,16 +90,11 @@ export function getProviderValue( providedValues: Variables, argType?: GraphQLNamedType ) { - // If no providerMap was provided, then just create a query with no argument values - if (config.providerMap) { - const provider = getProvider(varName, config.providerMap) + const provider = getProvider(varName, config.providerMap) - if (typeof provider === 'function') { - return (provider as ProviderFunction)(providedValues, argType) - } else { - return provider - } + if (typeof provider === 'function') { + return (provider as ProviderFunction)(providedValues, argType) } else { - return null + return provider } } diff --git a/test/generate-query.test.ts b/test/generate-query.test.ts index 7b3984f..351a66a 100644 --- a/test/generate-query.test.ts +++ b/test/generate-query.test.ts @@ -1,5 +1,12 @@ import * as fs from 'fs' -import { buildSchema, print, validate, DocumentNode, OperationDefinitionNode, DefinitionNode, parse } from 'graphql' +import { + buildSchema, + print, + validate, + DocumentNode, + OperationDefinitionNode, + DefinitionNode +} from 'graphql' import { Configuration, generateRandomQuery } from '../src/index' import { GITHUB_PROVIDERS } from './github-providers' @@ -7,56 +14,62 @@ import { GITHUB_PROVIDERS } from './github-providers' const schemaDef = fs.readFileSync('./test/fixtures/schema.graphql').toString() const schema = buildSchema(schemaDef) -const schemaDefGitHub = fs.readFileSync('./test/fixtures/github.graphql').toString() +const schemaDefGitHub = fs + .readFileSync('./test/fixtures/github.graphql') + .toString() const schemaGitHub = buildSchema(schemaDefGitHub) -const schemaDefSimple = fs.readFileSync('./test/fixtures/simple.graphql').toString() +const schemaDefSimple = fs + .readFileSync('./test/fixtures/simple.graphql') + .toString() const schemaSimple = buildSchema(schemaDefSimple) -function getOperationDefinition (doc: DocumentNode) : OperationDefinitionNode { - const opDefs : DefinitionNode[] = doc.definitions.filter(def => { +function getOperationDefinition(doc: DocumentNode): OperationDefinitionNode { + const opDefs: DefinitionNode[] = doc.definitions.filter((def) => { return def.kind === 'OperationDefinition' }) return opDefs[0] as OperationDefinitionNode } test(`Obtain random query from example schema`, () => { - const config : Configuration = { + const config: Configuration = { breadthProbability: 0.1, depthProbability: 0.1 } - const {queryDocument, variableValues} = generateRandomQuery(schema, config) + const { queryDocument, variableValues } = generateRandomQuery(schema, config) expect(queryDocument).toBeDefined() expect(print(queryDocument) === '').toEqual(false) const opDef = getOperationDefinition(queryDocument) - expect(Object.keys(opDef.variableDefinitions).length) - .toEqual(Object.keys(variableValues).length) + expect(Object.keys(opDef.variableDefinitions).length).toEqual( + Object.keys(variableValues).length + ) const errors = validate(schema, queryDocument) expect(errors).toEqual([]) }) test(`Obtain complete query from example schema`, () => { - const config : Configuration = { + const config: Configuration = { breadthProbability: 1, depthProbability: 1, maxDepth: 2 } - const {queryDocument, variableValues} = generateRandomQuery(schema, config) + const { queryDocument, variableValues } = generateRandomQuery(schema, config) const opDef = getOperationDefinition(queryDocument) const errors = validate(schema, queryDocument) expect(queryDocument).toBeDefined() expect(print(queryDocument) === '').toEqual(false) - expect(Object.keys(opDef.variableDefinitions).length) - .toEqual(Object.keys(variableValues).length) + expect(Object.keys(opDef.variableDefinitions).length).toEqual( + Object.keys(variableValues).length + ) expect(errors).toEqual([]) }) test(`Avoid picking field with only nested subfields when approaching max depth`, () => { - const config : Configuration = { + const config: Configuration = { breadthProbability: 1, depthProbability: 1, maxDepth: 3, @@ -64,19 +77,20 @@ test(`Avoid picking field with only nested subfields when approaching max depth` considerUnions: true } - const {queryDocument, variableValues} = generateRandomQuery(schema, config) + const { queryDocument, variableValues } = generateRandomQuery(schema, config) const opDef = getOperationDefinition(queryDocument) const errors = validate(schema, queryDocument) expect(queryDocument).toBeDefined() expect(print(queryDocument) === '').toEqual(false) - expect(Object.keys(opDef.variableDefinitions).length) - .toEqual(Object.keys(variableValues).length) + expect(Object.keys(opDef.variableDefinitions).length).toEqual( + Object.keys(variableValues).length + ) expect(errors).toEqual([]) }) test(`Obtain random query from GitHub schema`, () => { - const config : Configuration = { + const config: Configuration = { breadthProbability: 0.5, depthProbability: 0.5, maxDepth: 10, @@ -87,24 +101,30 @@ test(`Obtain random query from GitHub schema`, () => { seed: 3 } - const {queryDocument, variableValues} = generateRandomQuery(schemaGitHub, config) + const { queryDocument, variableValues } = generateRandomQuery( + schemaGitHub, + config + ) const opDef = getOperationDefinition(queryDocument) const errors = validate(schemaGitHub, queryDocument) expect(queryDocument).toBeDefined() - expect(print(queryDocument).replace(/\s/g, '')).toEqual(`query RandomQuery($Query__codeOfConduct__key: String!) { + expect(print(queryDocument).replace(/\s/g, '')).toEqual( + `query RandomQuery($Query__codeOfConduct__key: String!) { codeOfConduct(key: $Query__codeOfConduct__key) { name url } - }`.replace(/\s/g, '')) - expect(Object.keys(opDef.variableDefinitions).length) - .toEqual(Object.keys(variableValues).length) + }`.replace(/\s/g, '') + ) + expect(Object.keys(opDef.variableDefinitions).length).toEqual( + Object.keys(variableValues).length + ) expect(errors).toEqual([]) }) test(`Seeded query generation is deterministic`, () => { - const config : Configuration = { + const config: Configuration = { breadthProbability: 0.5, depthProbability: 0.5, maxDepth: 10, @@ -115,24 +135,30 @@ test(`Seeded query generation is deterministic`, () => { seed: 3 } - const {queryDocument, variableValues} = generateRandomQuery(schemaGitHub, config) + const { queryDocument, variableValues } = generateRandomQuery( + schemaGitHub, + config + ) const opDef = getOperationDefinition(queryDocument) const errors = validate(schemaGitHub, queryDocument) expect(queryDocument).toBeDefined() - expect(print(queryDocument).replace(/\s/g, '')).toEqual(`query RandomQuery($Query__codeOfConduct__key: String!) { + expect(print(queryDocument).replace(/\s/g, '')).toEqual( + `query RandomQuery($Query__codeOfConduct__key: String!) { codeOfConduct(key: $Query__codeOfConduct__key) { name url } - }`.replace(/\s/g, '')) - expect(Object.keys(opDef.variableDefinitions).length) - .toEqual(Object.keys(variableValues).length) + }`.replace(/\s/g, '') + ) + expect(Object.keys(opDef.variableDefinitions).length).toEqual( + Object.keys(variableValues).length + ) expect(errors).toEqual([]) }) test(`Missing provider leads to error`, () => { - const config : Configuration = { + const config: Configuration = { breadthProbability: 0.5, depthProbability: 0.5, maxDepth: 10, @@ -141,7 +167,7 @@ test(`Missing provider leads to error`, () => { considerInterfaces: true, considerUnions: true, seed: 3, - providerMap: {'blub__blib__blab': 'blob'} + providerMap: { blub__blib__blab: 'blob' } } /** @@ -155,11 +181,48 @@ test(`Missing provider leads to error`, () => { } */ - expect(() => generateRandomQuery(schemaGitHub, config)).toThrowError(`No provider found for "Query__codeOfConduct__key" in blub__blib__blab. Consider applying wildcard provider with "*__*" or "*__*__*"`) + expect(() => generateRandomQuery(schemaGitHub, config)).toThrowError( + `No provider found for "Query__codeOfConduct__key" in blub__blib__blab. Consider applying wildcard provider with "*__*" or "*__*__*"` + ) +}) + +test(`Null providers are allowed`, () => { + const config: Configuration = { + breadthProbability: 0.5, + depthProbability: 0.5, + maxDepth: 10, + ignoreOptionalArguments: true, + argumentsToConsider: ['first'], + considerInterfaces: true, + considerUnions: true, + seed: 3, + providerMap: { '*__*__*': null } + } + + const { queryDocument, variableValues } = generateRandomQuery( + schemaGitHub, + config + ) + const opDef = getOperationDefinition(queryDocument) + const errors = validate(schemaGitHub, queryDocument) + + expect(queryDocument).toBeDefined() + expect(print(queryDocument).replace(/\s/g, '')).toEqual( + `query RandomQuery($Query__codeOfConduct__key: String!) { + codeOfConduct(key: $Query__codeOfConduct__key) { + name + url + } + }`.replace(/\s/g, '') + ) + expect(Object.keys(opDef.variableDefinitions).length).toEqual( + Object.keys(variableValues).length + ) + expect(errors).toEqual([]) }) test(`Provide custom provider map for GitHub schema`, () => { - const config : Configuration = { + const config: Configuration = { breadthProbability: 0.2, depthProbability: 0.3, maxDepth: 7, @@ -170,19 +233,23 @@ test(`Provide custom provider map for GitHub schema`, () => { considerUnions: true } - const {queryDocument, variableValues} = generateRandomQuery(schemaGitHub, config) + const { queryDocument, variableValues } = generateRandomQuery( + schemaGitHub, + config + ) const opDef = getOperationDefinition(queryDocument) const errors = validate(schemaGitHub, queryDocument) expect(queryDocument).toBeDefined() expect(print(queryDocument) === '').toEqual(false) - expect(Object.keys(opDef.variableDefinitions).length) - .toEqual(Object.keys(variableValues).length) + expect(Object.keys(opDef.variableDefinitions).length).toEqual( + Object.keys(variableValues).length + ) expect(errors).toEqual([]) }) test(`Utilize type__field provider`, () => { - const config : Configuration = { + const config: Configuration = { breadthProbability: 0.2, depthProbability: 0.3, maxDepth: 7, @@ -193,13 +260,17 @@ test(`Utilize type__field provider`, () => { considerUnions: true, seed: 0.2805754930509623 } - - const { queryDocument, variableValues } = generateRandomQuery(schemaGitHub, config) + + const { queryDocument, variableValues } = generateRandomQuery( + schemaGitHub, + config + ) const opDef = getOperationDefinition(queryDocument) const errors = validate(schemaGitHub, queryDocument) expect(queryDocument).toBeDefined() - expect(print(queryDocument).replace(/\s/g,'')).toEqual(`query RandomQuery($Repository__releases__first: Int, $Project__columns__first: Int, $Repository__projects__first: Int, $RepositoryOwner__pinnedRepositories__first: Int, $PullRequest_ + expect(print(queryDocument).replace(/\s/g, '')).toEqual( + `query RandomQuery($Repository__releases__first: Int, $Project__columns__first: Int, $Repository__projects__first: Int, $RepositoryOwner__pinnedRepositories__first: Int, $PullRequest_ _assignees__first: Int, $User__publicKeys__first: Int, $User__commitComments__first: Int, $User__organization__login: String!, $User__pullRequests__first: Int, $User__starredRepositories__ first: Int, $User__watching__first: Int, $PullRequest__participants__first: Int, $Repository__deployKeys__first: Int, $Repository__assignableUsers__first: Int, $Repository__collaborators__ first: Int, $Repository__issueOrPullRequest__number: Int!, $PullRequest__comments__first: Int, $PullRequest__labels__first: Int, $Repository__pullRequest__number: Int!, $Query__repository_ @@ -449,16 +520,18 @@ test(`Utilize type__field provider`, () => { pushedAt viewerHasStarred } - }`.replace(/\s/g,'')) + }`.replace(/\s/g, '') + ) - expect(Object.keys(opDef.variableDefinitions).length) - .toEqual(Object.keys(variableValues).length) + expect(Object.keys(opDef.variableDefinitions).length).toEqual( + Object.keys(variableValues).length + ) expect(errors).toEqual([]) expect(print(queryDocument).trim().split(`\n`).length).toBe(247) }) test(`Provided variables are passed to providers`, () => { - const config : Configuration = { + const config: Configuration = { breadthProbability: 1, depthProbability: 1, providerMap: { @@ -477,20 +550,28 @@ test(`Provided variables are passed to providers`, () => { } } - const {queryDocument, variableValues} = generateRandomQuery(schemaSimple, config) + const { queryDocument, variableValues } = generateRandomQuery( + schemaSimple, + config + ) const errors = validate(schemaSimple, queryDocument) expect(queryDocument).toBeDefined() - expect(print(queryDocument).replace(/\s/g,'')).toEqual(`query RandomQuery($Query__repository__name: String!, $Query__repository__owner: String!) { + expect(print(queryDocument).replace(/\s/g, '')).toEqual( + `query RandomQuery($Query__repository__name: String!, $Query__repository__owner: String!) { name repository(name: $Query__repository__name, owner: $Query__repository__owner) - }`.replace(/\s/g,'')) + }`.replace(/\s/g, '') + ) expect(errors).toEqual([]) - expect(variableValues['Query__repository__name'] != variableValues['Query__repository__owner']).toBeTruthy() + expect( + variableValues['Query__repository__name'] != + variableValues['Query__repository__owner'] + ).toBeTruthy() }) test(`Counts are as expected`, () => { - const config : Configuration = { + const config: Configuration = { breadthProbability: 0.5, depthProbability: 0.5, maxDepth: 10, @@ -501,12 +582,19 @@ test(`Counts are as expected`, () => { seed: 5 } - const {queryDocument, variableValues, typeCount, resolveCount, seed} = generateRandomQuery(schemaGitHub, config) + const { + queryDocument, + variableValues, + typeCount, + resolveCount, + seed + } = generateRandomQuery(schemaGitHub, config) const opDef = getOperationDefinition(queryDocument) const errors = validate(schemaGitHub, queryDocument) expect(queryDocument).toBeDefined() - expect(print(queryDocument).replace(/\s/g,'')).toEqual(`query RandomQuery($Query__marketplaceListings__first: Int) { + expect(print(queryDocument).replace(/\s/g, '')).toEqual( + `query RandomQuery($Query__marketplaceListings__first: Int) { marketplaceListings(first: $Query__marketplaceListings__first) { edges { node { @@ -553,8 +641,10 @@ test(`Counts are as expected`, () => { cursor } } - }`.replace(/\s/g,'')) - expect(Object.keys(opDef.variableDefinitions).length) - .toEqual(Object.keys(variableValues).length) + }`.replace(/\s/g, '') + ) + expect(Object.keys(opDef.variableDefinitions).length).toEqual( + Object.keys(variableValues).length + ) expect(errors).toEqual([]) }) diff --git a/test/github-providers.ts b/test/github-providers.ts index 2844b04..3fd2e30 100644 --- a/test/github-providers.ts +++ b/test/github-providers.ts @@ -1,80 +1,80 @@ function getRandomMarketplaceSlug() { const slugs = [ - "chat", - "code-quality", - "code-review", - "continuous-integration", - "dependency-management", - "deployment", - "learning", - "localization", - "mobile", - "project-management", - "publishing", - "recently-added", - "security", - "support", - "testing", - "utilities", - ]; - return slugs[Math.floor(Math.random() * slugs.length)]; + 'chat', + 'code-quality', + 'code-review', + 'continuous-integration', + 'dependency-management', + 'deployment', + 'learning', + 'localization', + 'mobile', + 'project-management', + 'publishing', + 'recently-added', + 'security', + 'support', + 'testing', + 'utilities' + ] + return slugs[Math.floor(Math.random() * slugs.length)] } function getRandomUserLogin() { - return "erikwittern"; + return 'erikwittern' } function getRandomLicenseKey() { - return "MIT"; + return 'MIT' } function getRandomRepositoryName() { - return "openapi-to-graphql"; + return 'openapi-to-graphql' } function getRandomValueFromArray(array: T[]): T { - return array ? array[Math.floor(Math.random() * array.length)] : undefined; + return array ? array[Math.floor(Math.random() * array.length)] : undefined } export const GITHUB_PROVIDERS = { - "*__*__first": 10, - "*__codeOfConduct__key": "citizen_code_of_conduct", - "*__context__name": "default", - "*__gist__name": "index.html", - "*__*__number": 1, - "*__search": { - query: "test", - type: getRandomValueFromArray(["ISSUE", "REPOSITORY", "USER"]), + '*__*__first': 10, + '*__codeOfConduct__key': 'citizen_code_of_conduct', + '*__context__name': 'default', + '*__gist__name': 'index.html', + '*__*__number': 1, + '*__search': { + query: 'test', + type: getRandomValueFromArray(['ISSUE', 'REPOSITORY', 'USER']) }, - "*__repository": { + '*__repository': { name: getRandomRepositoryName(), - owner: getRandomUserLogin(), + owner: getRandomUserLogin() }, - "*__marketplaceListing__slug": "wakatime", - "*__marketplaceCategory__slug": getRandomMarketplaceSlug, - "*__user__login": getRandomUserLogin, - "*__license__key": getRandomLicenseKey, - "*__organization__login": "IBM", - "*__topic__name": "test", - "*__ref__qualifiedName": "/ref/head/", - "*__refs__refPrefix": "/ref/head/", - "*__node__id": "abc", - "*__nodes__ids": ["abc"], - "*__repositoryOwner__login": getRandomUserLogin, - "*__resource__url": "https://github.com/ibm/openapi-to-graphql", - "*__project__number": 1, - Organization__team__slug: "oasgraph-maintainers", - "*__issue__number": 1, - "*__issueOrPullRequest__number": 1, + '*__marketplaceListing__slug': 'wakatime', + '*__marketplaceCategory__slug': getRandomMarketplaceSlug, + '*__user__login': getRandomUserLogin, + '*__license__key': getRandomLicenseKey, + '*__organization__login': 'IBM', + '*__topic__name': 'test', + '*__ref__qualifiedName': '/ref/head/', + '*__refs__refPrefix': '/ref/head/', + '*__node__id': 'abc', + '*__nodes__ids': ['abc'], + '*__repositoryOwner__login': getRandomUserLogin, + '*__resource__url': 'https://github.com/ibm/openapi-to-graphql', + '*__project__number': 1, + Organization__team__slug: 'oasgraph-maintainers', + '*__issue__number': 1, + '*__issueOrPullRequest__number': 1, Repository__label__name: getRandomValueFromArray([ - "bug", - "duplicate", - "enhancement", - "good first issue", - "help wanted", - "invalid", - "question", + 'bug', + 'duplicate', + 'enhancement', + 'good first issue', + 'help wanted', + 'invalid', + 'question' ]), - "*__pullRequest__number": 1, - "*__release__tagName": "v2.0.0", -}; + '*__pullRequest__number': 1, + '*__release__tagName': 'v2.0.0' +} diff --git a/test/match-var-name.test.ts b/test/match-var-name.test.ts index 47f7727..e52c1c9 100644 --- a/test/match-var-name.test.ts +++ b/test/match-var-name.test.ts @@ -2,8 +2,8 @@ import { matchVarName } from '../src/index' test(`Match query against concrete values`, () => { const existingVars = { - 'Query__repository__name': 10, - 'Some__other__thing': 5 + Query__repository__name: 10, + Some__other__thing: 5 } const key = matchVarName('*__repository__name', Object.keys(existingVars)) expect(key).toBeDefined() diff --git a/test/single-query.test.ts b/test/single-query.test.ts index 5a91efc..fea8b3b 100644 --- a/test/single-query.test.ts +++ b/test/single-query.test.ts @@ -1,55 +1,55 @@ -import { Configuration, generateRandomQuery } from "../src"; -import * as fs from "fs"; -import { buildSchema, validate, print } from "graphql"; +import { Configuration, generateRandomQuery } from '../src' +import * as fs from 'fs' +import { buildSchema, validate, print } from 'graphql' const schemaDefGitHub = fs - .readFileSync("./test/fixtures/github.graphql") - .toString(); -const schemaGitHub = buildSchema(schemaDefGitHub); + .readFileSync('./test/fixtures/github.graphql') + .toString() +const schemaGitHub = buildSchema(schemaDefGitHub) test(`Generate single random query`, () => { const config: Configuration = { breadthProbability: (nesting) => { if (nesting === 0) { - return 0.5; + return 0.5 } else { - return 1 / Math.pow(2, nesting); + return 1 / Math.pow(2, nesting) } }, depthProbability: (nesting) => { if (nesting === 0) { - return 0.5; + return 0.5 } else { - return 1 / Math.pow(2, nesting); + return 1 / Math.pow(2, nesting) } }, maxDepth: 10, ignoreOptionalArguments: true, - argumentsToConsider: ["first"], + argumentsToConsider: ['first'], providerMap: { - "*__*__*": (existingVars, argType) => { - if (argType.name === "String") { - return "test"; - } else if (argType.name === "Int") { - return 1; - } else if (argType.name === "Float") { - return 1.0; - } else if (argType.name === "Boolean") { - return true; + '*__*__*': (existingVars, argType) => { + if (argType.name === 'String') { + return 'test' + } else if (argType.name === 'Int') { + return 1 + } else if (argType.name === 'Float') { + return 1.0 + } else if (argType.name === 'Boolean') { + return true } - }, + } }, considerInterfaces: false, considerUnions: true, pickNestedQueryField: true, - seed: 0.9366856322996101, - }; + seed: 0.9366856322996101 + } const { queryDocument, variableValues } = generateRandomQuery( schemaGitHub, config - ); - const errors = validate(schemaGitHub, queryDocument); + ) + const errors = validate(schemaGitHub, queryDocument) - expect(errors).toEqual([]); -}); + expect(errors).toEqual([]) +})