graphql-engine/server/tests-py
Auke Booij fe8eabff19 server: fix the nullability of object relationships (fix hasura/graphql-engine#7201)
When adding object relationships, we set the nullability of the generated GraphQL field based on whether the database backend enforces that the referenced data always exists. For manual relationships (corresponding to `manual_configuration`), the database backend is unaware of any relationship between data, and hence such fields are always set to be nullable.

For relationships generated from foreign key constraints (corresponding to `foreign_key_constraint_on`), we distinguish between two cases:

1. The "forward" object relationship from a referencing table (i.e. which has the foreign key constraint) to a referenced table. This should be set to be non-nullable when all referencing columns are non-nullable. But in fact, it used to set it to be non-nullable if *any* referencing column is non-nullable, which is only correct in Postgres when `MATCH FULL` is set (a flag we don't consider). This fixes that by changing a boolean conjunction to a disjunction.
2. The "reverse" object relationship from a referenced table to a referencing table which has the foreign key constraint. This should always be set to be nullable. But in fact, it used to always be set to non-nullable, as was reported in hasura/graphql-engine#7201. This fixes that.

Moreover, we have moved the computation of the nullability from `Hasura.RQL.DDL.Relationship` to `Hasura.GraphQL.Schema.Select`: this nullability used to be passed through the `riIsNullable` field of `RelInfo`, but for array relationships this information is not actually used, and moreover the remaining fields of `RelInfo` are already enough to deduce the nullability.

This also adds regression tests for both (1) and (2) above.

https://github.com/hasura/graphql-engine-mono/pull/2159

GitOrigin-RevId: 617f12765614f49746d18d3368f41dfae2f3e6ca
2021-08-26 15:27:34 +00:00
..
pgdump server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
queries server: fix the nullability of object relationships (fix hasura/graphql-engine#7201) 2021-08-26 15:27:34 +00:00
remote_schemas/nodejs server/postgres: Support scalar computed fields in remote joins 2021-07-12 16:04:37 +00:00
test_tests Test result ordering, add --accept test mode to automatically accept changed test cases 2019-11-05 15:15:25 -06:00
webhook/insecure [server] coalesce multiple run_sql calls in tests (#270) 2021-01-06 16:07:22 +00:00
.gitignore server: support EdDSA keys for JWT 2021-08-12 01:54:06 +00:00
conftest.py server: support for graphql-ws protocol 2021-08-24 16:26:12 +00:00
context.py server: support for graphql-ws protocol 2021-08-24 16:26:12 +00:00
graphql_server.py Remote Schema Customization take 2 using parser tranformations 2021-07-30 11:33:59 +00:00
jwk_server.py fix parsing JWK expiry time from headers on startup (fix #3655) (#3779) 2020-02-05 12:37:30 +05:30
pytest.ini run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
README.md Link to pytest docs in the server test suite READMEs (#4425) 2020-04-21 11:29:16 +02:00
remote_server.py actions: fix behaviour when using remote relationship in mutation action's relationship (#4982) 2020-06-05 17:33:18 +05:30
requirements-top-level.txt Add a new /dev/rts_stats endpoint, enabled when '+RTS -T' 2021-04-13 17:33:38 +00:00
requirements.txt server: support EdDSA keys for JWT 2021-08-12 01:54:06 +00:00
super_classes.py fix validation of null values, closes #1981 (#2057) 2019-04-24 13:19:39 +05:30
test_actions.py [server] generate the correct type for single-row returning functions 2021-08-11 12:42:30 +00:00
test_allowlist_queries.py server: revert the relaxing of unique name constraint in allow-lists 2021-08-03 09:23:20 +00:00
test_apis_disabled.py disable explain end-points when metadata API is disabled, fix #3717 (#3751) 2020-01-22 16:20:49 +05:30
test_compat.py remove usage of deprecated 'pytest.config' (#3434) 2019-11-29 10:44:26 +05:30
test_compression.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_config_api.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_cookie_webhook.py read cookie while initialising websocket connection (fix #1660) (#1668) 2019-03-04 13:16:53 +05:30
test_cors.py remove usage of deprecated 'pytest.config' (#3434) 2019-11-29 10:44:26 +05:30
test_dev_endpoints.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_endpoints.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_events.py server: fix regressions on invoking manual trigger 2021-08-17 10:22:50 +00:00
test_graphql_introspection.py server: fix the nullability of object relationships (fix hasura/graphql-engine#7201) 2021-08-26 15:27:34 +00:00
test_graphql_mutations.py server: inherited roles for mutations, remote schemas, actions and custom functions 2021-08-09 10:21:05 +00:00
test_graphql_queries.py bq: test table customization features 2021-08-18 13:00:58 +00:00
test_heterogeneous.py server: heterogeneous execution of GraphQL queries (#5869) 2020-10-07 10:23:17 +00:00
test_horizontal_scale.py remove usage of deprecated 'pytest.config' (#3434) 2019-11-29 10:44:26 +05:30
test_inconsistent_meta.py server/citus: feature branch 2021-05-21 02:47:51 +00:00
test_jwk.py read cache control header to refresh JWK (fix #3301) (#3446) 2019-12-03 14:56:59 -06:00
test_jwt_claims_map.py server: support EdDSA keys for JWT 2021-08-12 01:54:06 +00:00
test_jwt.py server: support EdDSA keys for JWT 2021-08-12 01:54:06 +00:00
test_logging.py server: add query field to http-log and websocket-log 2021-07-02 13:05:57 +00:00
test_metadata.py server/bigquery: run tests in CI 2021-08-12 16:48:29 +00:00
test_pg_dump.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_query_cache.py server: disable caching for actions with forward client headers enabled 2021-04-13 07:01:34 +00:00
test_remote_relationships.py server: Add regression tests for hasura/graphql-engine#7172 2021-08-25 21:06:09 +00:00
test_remote_schema_permissions.py server: inherited roles for mutations, remote schemas, actions and custom functions 2021-08-09 10:21:05 +00:00
test_roles_inheritance.py server: inherited roles for mutations, remote schemas, actions and custom functions 2021-08-09 10:21:05 +00:00
test_scheduled_triggers.py server: fix cron trigger bug of new events not getting generated when cron trigger is imported via metadata 2021-05-26 16:20:19 +00:00
test_schema_duplication.py add tests 2020-09-01 17:13:42 +05:30
test_schema_stitching.py Test customization with update_remote_schema 2021-08-02 05:50:49 +00:00
test_subscriptions.py server: support for graphql-ws protocol 2021-08-24 16:26:12 +00:00
test_tests.py server: hasura on PG v13 (#125) 2020-12-01 12:22:42 +00:00
test_v1_queries.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_v1alpha1_endpoint.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_v2_queries.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_validation.py server: fix validation of query variables (fixes hasura/graphql-engine#6867) 2021-05-04 17:58:43 +00:00
test_version.py server: add logs for version and healthz endpoints 2021-06-08 14:28:52 +00:00
test_webhook_insecure.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_webhook_request_context.py Integration test improvements (for speed/clarity), also increase polling interval for scheduled events 2021-04-27 05:35:26 +00:00
test_webhook.py server: add support for webhook connection expiration (#4196) 2020-04-02 19:00:13 -05:00
test_websocket_init_cookie.py remove usage of deprecated 'pytest.config' (#3434) 2019-11-29 10:44:26 +05:30
utils.py server: restore proper batching behavior in event trigger processing (#1237) 2021-04-29 04:02:05 +00:00
validate.py server: support for graphql-ws protocol 2021-08-24 16:26:12 +00:00
webhook.py pass gql requests into auth webhook POST body (#149) 2021-02-03 07:11:39 +00:00
webserver.py run graphql tests on both http and websocket; add parallelism (close #1868) (#1921) 2019-04-08 12:52:38 +05:30

Running tests

The easiest way to run the test suite is to do:

$ scripts/dev.sh test

This should install python dependencies if required, and run in isolation. The output format is described in the pytest documentation. Errors and failures are indicated by Fs and Es.

Tests Structure

  • Tests are grouped as test classes in test modules (names starting with test_)

  • The configuration files (if needed) for the tests in a class are usually kept in one folder.

    • The folder name is usually either the dir variable or the dir() function
  • Some tests (like in test_graphql_queries.py) requires a setup and teardown per class.

    • Here we are extending the DefaultTestSelectQueries class.
    • This class defines a fixture which will run the configurations in setup.yaml and teardown.yaml once per class
    • Extending test class should define a function name dir(), which returns the configuration folder
  • For mutation tests (like in test_graphql_mutations.py)

    • We need a schema_setup and schema_teardown per class
    • And values_setup and values_teardown per test
    • Doing schema setup and teardown per test is expensive.
    • We are extending the DefaultTestMutations class for this.
    • This class defines a fixture which will run the configuration in setup.yaml and teardown.yaml once per class.
    • Another fixture defined in this class runs the configuration in values_setup.yaml and values_teardown.yaml once per class.