graphql-engine/server/tests-py
Rakesh Emmadi d52bfcda4e
backend only insert permissions (rfc #4120) (#4224)
* move user info related code to Hasura.User module

* the RFC #4120 implementation; insert permissions with admin secret

* revert back to old RoleName based schema maps

An attempt made to avoid duplication of schema contexts in types
if any role doesn't possess any admin secret specific schema

* fix compile errors in haskell test

* keep 'user_vars' for session variables in http-logs

* no-op refacto

* tests for admin only inserts

* update docs for admin only inserts

* updated CHANGELOG.md

* default behaviour when admin secret is not set

* fix x-hasura-role to X-Hasura-Role in pytests

* introduce effective timeout in actions async tests

* update docs for admin-secret not configured case

* Update docs/graphql/manual/api-reference/schema-metadata-api/permission.rst

Co-Authored-By: Marion Schleifer <marion@hasura.io>

* Apply suggestions from code review

Co-Authored-By: Marion Schleifer <marion@hasura.io>

* a complete iteration

backend insert permissions accessable via 'x-hasura-backend-privilege'
session variable

* console changes for backend-only permissions

* provide tooltip id; update labels and tooltips;

* requested changes

* requested changes

- remove className from Toggle component
- use appropriate function name (capitalizeFirstChar -> capitalize)

* use toggle props from definitelyTyped

* fix accidental commit

* Revert "introduce effective timeout in actions async tests"

This reverts commit b7a59c19d6.

* generate complete schema for both 'default' and 'backend' sessions

* Apply suggestions from code review

Co-Authored-By: Marion Schleifer <marion@hasura.io>

* remove unnecessary import, export Toggle as is

* update session variable in tooltip

* 'x-hasura-use-backend-only-permissions' variable to switch

* update help texts

* update docs

* update docs

* update console help text

* regenerate package-lock

* serve no backend schema when backend_only: false and header set to true

- Few type name refactor as suggested by @0x777

* update CHANGELOG.md

* Update CHANGELOG.md

* Update CHANGELOG.md

* fix a merge bug where a certain entity didn't get removed

Co-authored-by: Marion Schleifer <marion@hasura.io>
Co-authored-by: Rishichandra Wawhal <rishi@hasura.io>
Co-authored-by: rikinsk <rikin.kachhia@gmail.com>
Co-authored-by: Tirumarai Selvan <tiru@hasura.io>
2020-04-24 14:40:53 +05:30
..
pgdump add an api to dump postgres schema (close #1939) (#1967) 2019-04-30 14:04:08 +05:30
queries backend only insert permissions (rfc #4120) (#4224) 2020-04-24 14:40:53 +05:30
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 apply update permissions for upsert mutations (#628) 2018-12-15 21:40:29 +05:30
.gitignore run graphql tests on both http and websocket; add parallelism (close #1868) (#1921) 2019-04-08 12:52:38 +05:30
conftest.py option to reload remote schemas in 'reload metadata' (fix #3792, #4117) (#4141) 2020-03-26 17:22:20 +05:30
context.py improve debug information in actions errors response (close #4031) (#4432) 2020-04-24 13:25:51 +05:30
graphql_server.py add few x-forwarded- headers (close #2572) (#3347) 2019-11-13 14:25:11 -06: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
requirements-top-level.txt remove brotli from packaging and CI images (#3673) 2020-01-10 15:15:47 -06:00
requirements.txt remove brotli from packaging and CI images (#3673) 2020-01-10 15:15:47 -06:00
super_classes.py fix validation of null values, closes #1981 (#2057) 2019-04-24 13:19:39 +05:30
test_actions.py improve debug information in actions errors response (close #4031) (#4432) 2020-04-24 13:25:51 +05:30
test_allowlist_queries.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
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 accept a new argument claims_namespace_path in JWT config (#4365) 2020-04-16 12:15:21 +05:30
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_events.py server(events): utilize proper backpressure scheme (close #3839) (#4013) 2020-03-11 11:57:31 +05:30
test_graphql_introspection.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_graphql_mutations.py backend only insert permissions (rfc #4120) (#4224) 2020-04-24 14:40:53 +05:30
test_graphql_queries.py allow special characters in json path's property name (close #3890) (#3892) 2020-04-20 14:25:09 +05:30
test_horizontal_scale.py remove usage of deprecated 'pytest.config' (#3434) 2019-11-29 10:44:26 +05:30
test_inconsistent_meta.py Test result ordering, add --accept test mode to automatically accept changed test cases 2019-11-05 15:15:25 -06:00
test_jwk.py read cache control header to refresh JWK (fix #3301) (#3446) 2019-12-03 14:56:59 -06:00
test_jwt.py accept a new argument claims_namespace_path in JWT config (#4365) 2020-04-16 12:15:21 +05:30
test_logging.py remove usage of deprecated 'pytest.config' (#3434) 2019-11-29 10:44:26 +05:30
test_pg_dump.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_schema_stitching.py option to reload remote schemas in 'reload metadata' (fix #3792, #4117) (#4141) 2020-03-26 17:22:20 +05:30
test_subscriptions.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_tests.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_v1_queries.py server: prevent metadata checks in read-only mode (#4250) 2020-04-01 18:22:55 -05:00
test_v1alpha1_endpoint.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_validation.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_version.py Add local development swiss army knife script scripts/dev.sh 2019-07-26 01:17:35 -04:00
test_webhook_insecure.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
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
validate.py improve debug information in actions errors response (close #4031) (#4432) 2020-04-24 13:25:51 +05:30
webhook.py allow authentication webhook with POST (close #1138) (#1147) 2018-12-03 16:49:08 +05:30
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.