CommonGraphqlClient.StaticValidator.NpmGraphql (common_graphql_client v0.6.4) View Source

This module uses node and graphql-tools to validate a graphql query against a graphql schema

It needs node binary to be available

Link to this section Summary

Functions

This method uses node & graphql-tools validates a query against a graphql schema and returns :ok if the query is valid or returns {:error, reason}.

Link to this section Functions

Link to this function

validate(query_string, opts \\ %{})

View Source

This method uses node & graphql-tools validates a query against a graphql schema and returns :ok if the query is valid or returns {:error, reason}.

This method takes:

  • a query_string: A graphql query string
  • a schema_string: Contents on graphql schema to validate the query for
  • Options: validate options include:
    • variables: Document variable values for the query (needs to be a Map)

Examples:

# When query is valid (schema_string)
iex> alias CommonGraphqlClient.StaticValidator.NpmGraphql
iex> schema_path = "./test/support/example_schema.json"
iex> schema_string = File.read!(schema_path)
iex> query_string = "{ __schema { types { name } } }"
iex> NpmGraphql.validate(query_string, %{schema_string: schema_string})
:ok

# When query is valid (schema_path)
iex> alias CommonGraphqlClient.StaticValidator.NpmGraphql
iex> schema_path = "./test/support/example_schema.json"
iex> query_string = "{ __schema { types { name } } }"
iex> NpmGraphql.validate(query_string, %{schema_path: schema_path})
:ok

# When query is invalid
iex> alias CommonGraphqlClient.StaticValidator.NpmGraphql
iex> schema_path = "./test/support/example_schema.json"
iex> schema_string = File.read!(schema_path)
iex> query_string = "bad query string"
iex> {:error, error} = NpmGraphql.validate(query_string, %{schema_string: schema_string})
iex> Regex.match?(~r/Unexpected Name \"bad\"/, error)
true

# When schema is invalid
iex> alias CommonGraphqlClient.StaticValidator.NpmGraphql
iex> schema_string = "bad schema"
iex> query_string = "{ __schema { types { name } } }"
iex> {:error, error} = NpmGraphql.validate(query_string, %{schema_string: schema_string})
iex> Regex.match?(~r/SyntaxError/, error)
true

# When query variables are passed
iex> alias CommonGraphqlClient.StaticValidator.NpmGraphql
iex> schema_path = "./test/support/example_schema.json"
iex> schema_string = File.read!(schema_path)
iex> query_string = "
...>   query getUser($id: ID!) {
...>     user(id: $id) {
...>       id
...>     }
...>   }
...> "
iex> variables = %{id: 1}
iex> NpmGraphql.validate(
...>   query_string,
...>   %{schema_string: schema_string, variables: variables}
...> )
:ok