Changeset View
Changeset View
Standalone View
Standalone View
swh/graphql/tests/functional/utils.py
# Copyright (C) 2022 The Software Heritage developers | # Copyright (C) 2022 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import json | import json | ||||
from typing import Dict, Tuple | from typing import Dict, Tuple | ||||
from ariadne import gql | |||||
def get_response(client, query_str: str): | |||||
return client.post("/", json={"query": query_str}) | |||||
def get_query_response(client, query_str: str, **kwargs) -> Tuple[Dict, Dict]: | |||||
def get_query_response(client, query_str: str) -> Tuple[Dict, Dict]: | query = gql(query_str) | ||||
response = get_response(client, query_str) | response = client.post("/", json={"query": query, "variables": kwargs}) | ||||
assert response.status_code == 200, response.data | assert response.status_code == 200, response.data | ||||
result = json.loads(response.data) | result = json.loads(response.data) | ||||
return result.get("data"), result.get("errors") | return result.get("data"), result.get("errors") | ||||
def assert_missing_object(client, query_str: str, obj_type: str) -> None: | def assert_missing_object(client, query_str: str, obj_type: str, **kwargs) -> None: | ||||
data, errors = get_query_response(client, query_str) | data, errors = get_query_response(client, query_str, **kwargs) | ||||
assert data[obj_type] is None | assert data[obj_type] is None | ||||
assert len(errors) == 1 | assert len(errors) == 1 | ||||
assert errors[0]["message"] == "Object error: Requested object is not available" | assert errors[0]["message"] == "Object error: Requested object is not available" | ||||
assert errors[0]["path"] == [obj_type] | assert errors[0]["path"] == [obj_type] | ||||
def get_error_response(client, query_str: str, error_code: int = 400) -> Dict: | def get_error_response(client, query_str: str, **kwargs) -> Dict: | ||||
response = get_response(client, query_str) | data, errors = get_query_response(client, query_str, **kwargs) | ||||
assert response.status_code == error_code | assert data is None | ||||
return json.loads(response.data)["errors"] | assert len(errors) > 0 | ||||
return errors | |||||
def get_query_params_from_args(**args) -> str: | |||||
# build a GraphQL query parameters string from arguments | |||||
return ",".join([f"{key}: {val}" for (key, val) in args.items()]) |