common_graphql_client v0.6.1 CommonGraphqlClient.StaticValidator View Source
Validates a query against a static graphql schema
Link to this section Summary
Functions
This method validates a query against a graphql schema and returns :ok
if
the query is valid or returns {:error, reason}
.
Link to this section Functions
This method 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 Options: Options for validation include:
schema_string
: Contents on graphql schema to validate the query forschema_path
: Path to the file containing graphql schemavalidation_strategy
: Way to validate schema. Could be done in multiple ways::npm_graphql
(needsnpm
cli) Uses npm calls to validate query:native
(todo: parse schema in elixir) Will validate in pure elixir
Examples:
# When a schema file is given and the query is valid
iex> schema_path = "./test/support/example_schema.json"
iex> query_string = "{ __schema { types { name } } }"
iex> validation_strategy = :npm_graphql
iex> CommonGraphqlClient.StaticValidator.validate(
...> query_string,
...> %{ validation_strategy: validation_strategy,
...> schema_path: schema_path }
...> )
:ok
# When a schema string is given and the query is valid
iex> schema_path = "./test/support/example_schema.json"
iex> schema_string = File.read!(schema_path)
iex> query_string = "{ __schema { types { name } } }"
iex> validation_strategy = :npm_graphql
iex> CommonGraphqlClient.StaticValidator.validate(
...> query_string,
...> %{ validation_strategy: validation_strategy,
...> schema_string: schema_string }
...> )
:ok
# When query is invalid
iex> schema_path = "./test/support/example_schema.json"
iex> query_string = "bad query string"
iex> validation_strategy = :npm_graphql
iex> {:error, error} = CommonGraphqlClient.StaticValidator.validate(
...> query_string,
...> %{ validation_strategy: validation_strategy,
...> schema_path: schema_path }
...> )
iex> Regex.match?(~r/Unexpected Name \"bad\"/, error)
true
# When schema is invalid
iex> schema_string = "bad schema"
iex> query_string = "{ __schema { types { name } } }"
iex> validation_strategy = :npm_graphql
iex> {:error, error} = CommonGraphqlClient.StaticValidator.validate(
...> query_string,
...> %{ validation_strategy: validation_strategy,
...> schema_string: schema_string }
...> )
iex> Regex.match?(~r/bad schema/, error)
true
# When validation_strategy is native
iex> schema_string = "someschema"
iex> query_string = "somequery"
iex> validation_strategy = :native
iex> CommonGraphqlClient.StaticValidator.validate(
...> query_string,
...> %{ validation_strategy: validation_strategy,
...> schema_string: schema_string }
...> )
** (RuntimeError) Not Implemented