Sha256: 3894b435c5b3e15495d5f7a622254c81c756976ceb5b08224a9d6fd39bdf78d4

Contents?: true

Size: 1.93 KB

Versions: 1

Compression:

Stored size: 1.93 KB

Contents

# frozen_string_literal: true
require "spec_helper"

describe GraphQL::StaticValidation::VariablesAreUsedAndDefined do
  include StaticValidationHelpers

  let(:query_string) {'
    query getCheese(
      $usedVar: Int!,
      $usedInnerVar: [DairyAnimal!]!,
      $usedInlineFragmentVar: Int!,
      $usedFragmentVar: Int!,
      $notUsedVar: Int!,
    ) {
      c1: cheese(id: $usedVar) {
        __typename
      }
      ... on Query {
        c2: cheese(id: $usedInlineFragmentVar) {
          similarCheese(source: $usedInnerVar) { __typename }
        }

      }

      c3: cheese(id: $undefinedVar) { __typename }

      ... outerCheeseFields
    }

    fragment outerCheeseFields on Query {
      ... innerCheeseFields
    }

    fragment innerCheeseFields on Query {
      c4: cheese(id: $undefinedFragmentVar) { __typename }
      c5: cheese(id: $usedFragmentVar) { __typename }
    }
  '}

  it "finds variables which are used-but-not-defined or defined-but-not-used" do
    expected = [
      {
        "message"=>"Variable $notUsedVar is declared by getCheese but not used",
        "locations"=>[{"line"=>2, "column"=>5}],
        "fields"=>["query getCheese"],
      },
      {
        "message"=>"Variable $undefinedVar is used by getCheese but not declared",
        "locations"=>[{"line"=>19, "column"=>22}],
        "fields"=>["query getCheese", "c3", "id"],
      },
      {
        "message"=>"Variable $undefinedFragmentVar is used by innerCheeseFields but not declared",
        "locations"=>[{"line"=>29, "column"=>22}],
        "fields"=>["fragment innerCheeseFields", "c4", "id"],
      },
    ]

    assert_equal(expected, errors)
  end

  describe "usages in directives on fragment spreads" do
    let(:query_string) {
      <<-GRAPHQL
      query($f: Boolean!){
        ...F @include(if: $f)
      }
      fragment F on Query {
        __typename
      }
      GRAPHQL
    }

    it "finds usages" do
      assert_equal([], errors)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphql-1.9.0.pre1 spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb