graphql-engine/server/tests-hspec/DirectivesSpec.hs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

193 lines
3.5 KiB
Haskell
Raw Normal View History

{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE RecordWildCards #-}
-- | Test directives.
module DirectivesSpec (spec) where
import Harness.Constants
import Harness.Feature qualified as Feature
import Harness.GraphqlEngine qualified as GraphqlEngine
import Harness.Mysql as Mysql
import Harness.Sql
import Harness.Yaml
import Test.Hspec
import Prelude
--------------------------------------------------------------------------------
-- Preamble
spec :: Spec
spec =
Feature.feature
Feature.Feature
{ Feature.backends =
[ Feature.Backend
{ name = "MySQL",
setup = mysqlSetup,
teardown = mysqlTeardown
}
],
Feature.tests = tests
}
--------------------------------------------------------------------------------
-- MySQL backend
mysqlSetup :: IO ()
mysqlSetup = do
-- Clear and reconfigure the metadata
GraphqlEngine.post_
"/v1/metadata"
[yaml|
type: replace_metadata
args:
version: 3
sources:
- name: mysql
kind: mysql
tables: []
configuration:
database: *mysqlDatabase
user: *mysqlUser
password: *mysqlPassword
host: *mysqlHost
port: *mysqlPort
pool_settings: {}
|]
-- Setup tables
Mysql.run_
[sql|
CREATE TABLE author
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(45) UNIQUE KEY
);
|]
Mysql.run_
[sql|
INSERT INTO author
(name)
VALUES
( 'Author 1'),
( 'Author 2');
|]
-- Track the tables
GraphqlEngine.post_
"/v1/metadata"
[yaml|
type: mysql_track_table
args:
source: mysql
table:
schema: hasura
name: author
|]
mysqlTeardown :: IO ()
mysqlTeardown = do
Mysql.run_
[sql|
DROP TABLE author;
|]
--------------------------------------------------------------------------------
-- Tests
tests :: Spec
tests = do
it "Skip id field conditionally" $
shouldReturnYaml
( GraphqlEngine.postGraphqlYaml
[yaml|
query: |
query author_with_both($includeId: Boolean!, $skipId: Boolean!) {
hasura_author {
id @include(if: $includeId) @skip(if: $skipId)
name
}
}
variables:
includeId: false
skipId: false
|]
)
[yaml|
data:
hasura_author:
- name: Author 1
- name: Author 2
|]
it "Skip id field conditionally, includeId=true" $
shouldReturnYaml
( GraphqlEngine.postGraphqlYaml
[yaml|
query: |
query author_with_both($includeId: Boolean!, $skipId: Boolean!) {
hasura_author {
id @include(if: $includeId) @skip(if: $skipId)
name
}
}
variables:
includeId: true
skipId: false
|]
)
[yaml|
data:
hasura_author:
- id: 1
name: Author 1
- id: 2
name: Author 2
|]
it "Skip id field conditionally, skipId=true" $
shouldReturnYaml
( GraphqlEngine.postGraphqlYaml
[yaml|
query: |
query author_with_both($includeId: Boolean!, $skipId: Boolean!) {
hasura_author {
id @include(if: $includeId) @skip(if: $skipId)
name
}
}
variables:
includeId: false
skipId: true
|]
)
[yaml|
data:
hasura_author:
- name: Author 1
- name: Author 2
|]
it "Skip id field conditionally, skipId=true, includeId=true" $
shouldReturnYaml
( GraphqlEngine.postGraphqlYaml
[yaml|
query: |
query author_with_both($includeId: Boolean!, $skipId: Boolean!) {
hasura_author {
id @include(if: $includeId) @skip(if: $skipId)
name
}
}
variables:
includeId: true
skipId: true
|]
)
[yaml|
data:
hasura_author:
- name: Author 1
- name: Author 2
|]