graphql-engine/server/tests-hspec/DirectivesSpec.hs
Abby Sassel a7195155ab Add MySQL basic tests (close hasura/graphql-engine#7753)
dupe of @chrisdone's work https://github.com/hasura/graphql-engine-mono/pull/2852 with a branch rename

prev pr: https://github.com/hasura/graphql-engine-mono/pull/2901

next PR: https://github.com/hasura/graphql-engine-mono/pull/2921

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/2911
Co-authored-by: Chris Done <11019+chrisdone@users.noreply.github.com>
GitOrigin-RevId: 81130e100c220a235d9869c89e90d63515e35f74
2021-11-19 15:14:46 +00:00

193 lines
3.5 KiB
Haskell

{-# 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
|]