diff --git a/tests/test_graphql/api_common.py b/tests/test_graphql/api_common.py new file mode 100644 index 0000000..bfac767 --- /dev/null +++ b/tests/test_graphql/api_common.py @@ -0,0 +1,89 @@ +from tests.common import generate_api_query +from tests.conftest import TOKENS_FILE_CONTENTS, DEVICE_WE_AUTH_TESTS_WITH + +ORIGINAL_DEVICES = TOKENS_FILE_CONTENTS["tokens"] + + +def assert_ok(response, request): + data = assert_data(response) + data[request]["success"] is True + data[request]["message"] is not None + data[request]["code"] == 200 + + +def assert_errorcode(response, request, code): + data = assert_data(response) + data[request]["success"] is False + data[request]["message"] is not None + data[request]["code"] == code + + +def assert_empty(response): + assert response.status_code == 200 + assert response.json().get("data") is None + + +def assert_data(response): + assert response.status_code == 200 + data = response.json().get("data") + assert data is not None + assert "api" in data.keys() + return data["api"] + + +API_DEVICES_QUERY = """ +devices { + creationDate + isCaller + name +} +""" + + +def request_devices(client): + return client.post( + "/graphql", + json={"query": generate_api_query([API_DEVICES_QUERY])}, + ) + + +def graphql_get_devices(client): + response = request_devices(client) + data = assert_data(response) + devices = data["devices"] + assert devices is not None + return devices + + +def set_client_token(client, token): + client.headers.update({"Authorization": "Bearer " + token}) + + +def assert_token_valid(client, token): + set_client_token(client, token) + assert graphql_get_devices(client) is not None + + +def assert_same(graphql_devices, abstract_devices): + """Orderless comparison""" + assert len(graphql_devices) == len(abstract_devices) + for original_device in abstract_devices: + assert original_device["name"] in [device["name"] for device in graphql_devices] + for device in graphql_devices: + if device["name"] == original_device["name"]: + assert device["creationDate"] == original_device["date"].isoformat() + + +def assert_original(client): + devices = graphql_get_devices(client) + assert_original_devices(devices) + + +def assert_original_devices(devices): + assert_same(devices, ORIGINAL_DEVICES) + + for device in devices: + if device["name"] == DEVICE_WE_AUTH_TESTS_WITH["name"]: + assert device["isCaller"] is True + else: + assert device["isCaller"] is False diff --git a/tests/test_graphql/test_api_devices.py b/tests/test_graphql/test_api_devices.py index 599fe24..b24bc7f 100644 --- a/tests/test_graphql/test_api_devices.py +++ b/tests/test_graphql/test_api_devices.py @@ -8,7 +8,7 @@ from tests.common import ( generate_api_query, ) from tests.conftest import DEVICE_WE_AUTH_TESTS_WITH, TOKENS_FILE_CONTENTS -from tests.test_graphql.common import ( +from tests.test_graphql.api_common import ( assert_data, assert_empty, assert_ok, @@ -38,7 +38,7 @@ def graphql_get_new_device_key(authorized_client) -> str: ) assert_ok(response, "getNewDeviceApiKey") - key = response.json()["data"]["getNewDeviceApiKey"]["key"] + key = response.json()["data"]["api"]["getNewDeviceApiKey"]["key"] assert key.split(" ").__len__() == 12 return key @@ -61,7 +61,7 @@ def graphql_try_auth_new_device(client, mnemonic_key, device_name): def graphql_authorize_new_device(client, mnemonic_key, device_name) -> str: response = graphql_try_auth_new_device(client, mnemonic_key, "new_device") assert_ok(response, "authorizeWithNewDeviceApiKey") - token = response.json()["data"]["authorizeWithNewDeviceApiKey"]["token"] + token = response.json()["data"]["api"]["authorizeWithNewDeviceApiKey"]["token"] assert_token_valid(client, token) @@ -182,7 +182,7 @@ def test_graphql_refresh_token(authorized_client, client, tokens_file): ) assert_ok(response, "refreshDeviceApiToken") - new_token = response.json()["data"]["refreshDeviceApiToken"]["token"] + new_token = response.json()["data"]["api"]["refreshDeviceApiToken"]["token"] assert_token_valid(client, new_token) set_client_token(client, new_token) diff --git a/tests/test_graphql/test_api_recovery.py b/tests/test_graphql/test_api_recovery.py index ec5f094..e847b16 100644 --- a/tests/test_graphql/test_api_recovery.py +++ b/tests/test_graphql/test_api_recovery.py @@ -13,7 +13,7 @@ from tests.common import ( from tests.common import FIVE_MINUTES_INTO_FUTURE_NAIVE as FIVE_MINUTES_INTO_FUTURE from tests.common import FIVE_MINUTES_INTO_PAST_NAIVE as FIVE_MINUTES_INTO_PAST -from tests.test_graphql.common import ( +from tests.test_graphql.api_common import ( assert_empty, assert_data, assert_ok, @@ -46,7 +46,7 @@ def graphql_recovery_status(client): response = request_recovery_status(client) data = assert_data(response) - status = data["api"]["recoveryKey"] + status = data["recoveryKey"] assert status is not None return status @@ -70,7 +70,7 @@ def request_make_new_recovery_key(client, expires_at=None, uses=None): def graphql_make_new_recovery_key(client, expires_at=None, uses=None): response = request_make_new_recovery_key(client, expires_at, uses) assert_ok(response, "getNewRecoveryApiKey") - key = response.json()["data"]["getNewRecoveryApiKey"]["key"] + key = response.json()["data"]["api"]["getNewRecoveryApiKey"]["key"] assert key is not None assert key.split(" ").__len__() == 18 return key @@ -94,7 +94,7 @@ def request_recovery_auth(client, key, device_name): def graphql_use_recovery_key(client, key, device_name): response = request_recovery_auth(client, key, device_name) assert_ok(response, "useRecoveryApiKey") - token = response.json()["data"]["useRecoveryApiKey"]["token"] + token = response.json()["data"]["api"]["useRecoveryApiKey"]["token"] assert token is not None assert_token_valid(client, token) set_client_token(client, token) @@ -187,7 +187,7 @@ def test_graphql_use_recovery_key_after_expiration( response = request_recovery_auth(client, key, "new_test_token3") assert_errorcode(response, "useRecoveryApiKey", 404) - assert response.json()["data"]["useRecoveryApiKey"]["token"] is None + assert response.json()["data"]["api"]["useRecoveryApiKey"]["token"] is None assert_original(authorized_client) status = graphql_recovery_status(authorized_client) @@ -207,7 +207,7 @@ def test_graphql_generate_recovery_key_with_expiration_in_the_past( ) assert_errorcode(response, "getNewRecoveryApiKey", 400) - assert response.json()["data"]["getNewRecoveryApiKey"]["key"] is None + assert response.json()["data"]["api"]["getNewRecoveryApiKey"]["key"] is None assert graphql_recovery_status(authorized_client)["exists"] is False @@ -273,12 +273,12 @@ def test_graphql_generate_recovery_key_with_negative_uses( response = request_make_new_recovery_key(authorized_client, uses=-1) assert_errorcode(response, "getNewRecoveryApiKey", 400) - assert response.json()["data"]["getNewRecoveryApiKey"]["key"] is None + assert response.json()["data"]["api"]["getNewRecoveryApiKey"]["key"] is None def test_graphql_generate_recovery_key_with_zero_uses(authorized_client, tokens_file): response = request_make_new_recovery_key(authorized_client, uses=0) assert_errorcode(response, "getNewRecoveryApiKey", 400) - assert response.json()["data"]["getNewRecoveryApiKey"]["key"] is None + assert response.json()["data"]["api"]["getNewRecoveryApiKey"]["key"] is None assert graphql_recovery_status(authorized_client)["exists"] is False