Skip to content

Commit

Permalink
fix false negative case for no-undefined-variables rule (#659)
Browse files Browse the repository at this point in the history
Co-authored-by: Dotan Simha <dotansimha@gmail.com>
  • Loading branch information
Dimitri POSTOLOV and dotansimha committed Oct 20, 2021
1 parent afc25b9 commit 44a6c73
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 4 deletions.
5 changes: 5 additions & 0 deletions .changeset/hungry-kings-hammer.md
@@ -0,0 +1,5 @@
---
'@graphql-eslint/eslint-plugin': minor
---

fix false negative case for `no-undefined-variables` rule
11 changes: 8 additions & 3 deletions packages/plugin/src/rules/graphql-js-validation.ts
Expand Up @@ -216,9 +216,14 @@ export const GRAPHQL_JS_VALIDATIONS = Object.assign(
validationToRule('no-fragment-cycles', 'NoFragmentCycles', {
description: `A GraphQL fragment is only valid when it does not have cycles in fragments usage.`,
}),
validationToRule('no-undefined-variables', 'NoUndefinedVariables', {
description: `A GraphQL operation is only valid if all variables encountered, both directly and via fragment spreads, are defined by that operation.`,
}),
validationToRule(
'no-undefined-variables',
'NoUndefinedVariables',
{
description: `A GraphQL operation is only valid if all variables encountered, both directly and via fragment spreads, are defined by that operation.`,
},
importFiles
),
validationToRule(
'no-unused-fragments',
'NoUnusedFragments',
Expand Down
8 changes: 8 additions & 0 deletions packages/plugin/tests/mocks/no-undefined-variables.gql
@@ -0,0 +1,8 @@
#import UserFields from './user-fields-with-variables.gql'

query User {
user {
id
...UserFields
}
}
2 changes: 1 addition & 1 deletion packages/plugin/tests/mocks/no-unused-variables.gql
@@ -1,4 +1,4 @@
#import UserFields from './no-unused-variables-imported.gql'
#import UserFields from './user-fields-with-variables.gql'

query User($limit: Int!, $offset: Int!) {
user {
Expand Down
6 changes: 6 additions & 0 deletions packages/plugin/tests/mocks/user-fields-with-variables.gql
@@ -0,0 +1,6 @@
fragment UserFields on User {
firstName
posts(limit: $limit, offset: $offset) {
id
}
}
21 changes: 21 additions & 0 deletions packages/plugin/tests/no-undefined-variables.spec.ts
@@ -0,0 +1,21 @@
import { join } from 'path';
import { GraphQLRuleTester, rules } from '../src';

const ruleTester = new GraphQLRuleTester();

ruleTester.runGraphQLTests('no-undefined-variables', rules['no-undefined-variables'], {
valid: [],
invalid: [
{
filename: join(__dirname, 'mocks/no-undefined-variables.gql'),
code: ruleTester.fromMockFile('no-undefined-variables.gql'),
parserOptions: {
schema: join(__dirname, 'mocks/user-schema.graphql'),
},
errors: [
{ message: 'Variable "$limit" is not defined by operation "User".' },
{ message: 'Variable "$offset" is not defined by operation "User".' },
],
},
],
});

0 comments on commit 44a6c73

Please sign in to comment.