From d6bd51ef83c9598e6e185c0111c97b21e076b2fd Mon Sep 17 00:00:00 2001 From: "kacper.golem" Date: Fri, 23 Aug 2024 11:41:46 +0200 Subject: [PATCH 1/3] OCT-1862: Cover /check in delegation with API Tests --- backend/tests/api-e2e/test_api_delegation.py | 44 ++++++++++++++++++++ backend/tests/conftest.py | 5 +++ 2 files changed, 49 insertions(+) create mode 100644 backend/tests/api-e2e/test_api_delegation.py diff --git a/backend/tests/api-e2e/test_api_delegation.py b/backend/tests/api-e2e/test_api_delegation.py new file mode 100644 index 000000000..0099194be --- /dev/null +++ b/backend/tests/api-e2e/test_api_delegation.py @@ -0,0 +1,44 @@ +import pytest +from flask import current_app as app + +from app.modules.dto import ScoreDelegationPayload +from app.infrastructure import database +from tests.conftest import Client +from tests.helpers.constants import STARTING_EPOCH, USER1_ADDRESS, USER2_ADDRESS + + +@pytest.mark.api +def test_check_delegation(client: Client, payload: ScoreDelegationPayload): + client.move_to_next_epoch(STARTING_EPOCH + 1) + client.move_to_next_epoch(STARTING_EPOCH + 2) + client.move_to_next_epoch(STARTING_EPOCH + 3) + + epoch_no = client.wait_for_sync(STARTING_EPOCH + 3) + app.logger.debug(f"indexed epoch: {epoch_no}") + + database.user.add_user(USER1_ADDRESS) + database.user.add_user(USER2_ADDRESS) + + # check if invalid request is handled correctly + addresses = [payload.primary_addr] * 12 + _, status = client.check_delegation(*addresses) + assert status == 400 + + # check that obfuscated delegation does not exist + _, status = client.check_delegation(payload.primary_addr, payload.secondary_addr) + assert status == 400 + + # conduct a delegation + _, status = client.delegate( + primary_address=payload.primary_addr, + secondary_address=payload.secondary_addr, + primary_address_signature=payload.primary_addr_signature, + secondary_address_signature=payload.secondary_addr_signature, + ) + assert status == 201 + + # check if given addresses are used for delegation + resp, status = client.check_delegation(payload.primary_addr, payload.secondary_addr) + assert status == 200 + assert resp["primary"] == payload.primary_addr + assert resp["secondary"] == payload.secondary_addr diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index 23775e7b7..22cd89b2e 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -925,6 +925,11 @@ def get_healthcheck(self) -> tuple[dict, int]: rv = self._flask_client.get("/info/healthcheck") return json.loads(rv.text), rv.status_code + def check_delegation(self, *addresses) -> tuple[dict, int]: + addresses = ",".join(addresses) + rv = self._flask_client.get(f"/delegation/check/{addresses}") + return json.loads(rv.text), rv.status_code + @property def config(self): return self._flask_client.application.config From fcc8d530748cffb3d030633cbc86786d9d565d2a Mon Sep 17 00:00:00 2001 From: "kacper.golem" Date: Fri, 23 Aug 2024 12:55:41 +0200 Subject: [PATCH 2/3] fix: add missing file --- backend/tests/api-e2e/conftest.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 backend/tests/api-e2e/conftest.py diff --git a/backend/tests/api-e2e/conftest.py b/backend/tests/api-e2e/conftest.py new file mode 100644 index 000000000..21c5da8ba --- /dev/null +++ b/backend/tests/api-e2e/conftest.py @@ -0,0 +1,14 @@ +import pytest + +from app.modules.dto import ScoreDelegationPayload +from tests.helpers.constants import USER1_ADDRESS, USER2_ADDRESS + + +@pytest.fixture() +def payload(): + return ScoreDelegationPayload( + primary_addr=USER1_ADDRESS, + secondary_addr=USER2_ADDRESS, + primary_addr_signature="0x4c7f3b8d06ef3abbe6f5c0762fda01517c62709a3e0bde7ae19a945d3359b0673197db2dabeb20babb9b71c2cbb7e83cfa4cb3078c9bcdc284dcd605ebe89ddc1b", + secondary_addr_signature="0x5e7e86d5acea5cc431b8d148842e21584a7afe16b7de3b5586d20f5de97179f549726baa021dcaf6220ee5116c579df9d40375fa58d3480390289df6a088b9ec1b", + ) From ea90e53d4cfce7db18b7f8c4c7427ddbf6e07a60 Mon Sep 17 00:00:00 2001 From: "kacper.golem" Date: Fri, 23 Aug 2024 13:33:10 +0200 Subject: [PATCH 3/3] fix: add missing file --- backend/tests/conftest.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index 22cd89b2e..bb73d2bd2 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -930,6 +930,24 @@ def check_delegation(self, *addresses) -> tuple[dict, int]: rv = self._flask_client.get(f"/delegation/check/{addresses}") return json.loads(rv.text), rv.status_code + def delegate( + self, + primary_address: str, + secondary_address: str, + primary_address_signature: str, + secondary_address_signature: str, + ) -> tuple[dict, int]: + rv = self._flask_client.post( + "/delegation/delegate", + json={ + "primaryAddr": primary_address, + "secondaryAddr": secondary_address, + "primaryAddrSignature": primary_address_signature, + "secondaryAddrSignature": secondary_address_signature, + }, + ) + return json.loads(rv.text), rv.status_code + @property def config(self): return self._flask_client.application.config