diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 1a3a198d3..125666f2a 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -4,8 +4,8 @@ on: push: paths: - .github/workflows/test_backend.yml - # - src/vva-be - # - tests/vva-be + # - govtool/backend + # - tests/govtool-backend schedule: - cron: '0 0 * * *' @@ -18,7 +18,7 @@ on: options: - "sanchogov.tools/api" - "staging.govtool.byron.network/api" - - "vva-sanchonet.cardanoapi.io/api" + - "govtool-sanchonet.cardanoapi.io/api" jobs: build: @@ -26,7 +26,7 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 - + - name: Set up Python uses: actions/setup-python@v4 with: @@ -34,7 +34,7 @@ jobs: cache: 'pip' - name: Run Backend Test - working-directory: tests/vva-be + working-directory: tests/govtool-backend run: | python -m pip install --upgrade pip pip install -r requirements.txt diff --git a/tests/vva-be/.env.example b/tests/govtool-backend/.env.example similarity index 100% rename from tests/vva-be/.env.example rename to tests/govtool-backend/.env.example diff --git a/tests/vva-be/.gitignore b/tests/govtool-backend/.gitignore similarity index 100% rename from tests/vva-be/.gitignore rename to tests/govtool-backend/.gitignore diff --git a/tests/vva-be/README.md b/tests/govtool-backend/README.md similarity index 86% rename from tests/vva-be/README.md rename to tests/govtool-backend/README.md index bb066b240..33c6f211e 100644 --- a/tests/vva-be/README.md +++ b/tests/govtool-backend/README.md @@ -1,8 +1,8 @@ -VVA-BE PyTest +GovTool backend PyTest ================= This test is responsible for following -- Perform basic tests on VVA backend endpoints. +- Perform basic tests on GovTool backend endpoints. - Publish the reports to metrics server for visualization. ## Installation @@ -31,7 +31,7 @@ This will generate test_data.json that will be used to run tests. ## Run tests -In the root directory of tests/vva-be run the following command +In the root directory of tests/govtool-backend run the following command ```shell export BASE_URL="url" # server's url e.g. https://staging.govtool.byron.network/api" export METRICS_URL="url" # metrics server Url diff --git a/tests/vva-be/config.py b/tests/govtool-backend/config.py similarity index 100% rename from tests/vva-be/config.py rename to tests/govtool-backend/config.py diff --git a/tests/vva-be/models/TestData.py b/tests/govtool-backend/models/TestData.py similarity index 100% rename from tests/vva-be/models/TestData.py rename to tests/govtool-backend/models/TestData.py diff --git a/tests/vva-be/models/TestResult.py b/tests/govtool-backend/models/TestResult.py similarity index 100% rename from tests/vva-be/models/TestResult.py rename to tests/govtool-backend/models/TestResult.py diff --git a/tests/vva-be/models/__init__.py b/tests/govtool-backend/models/__init__.py similarity index 100% rename from tests/vva-be/models/__init__.py rename to tests/govtool-backend/models/__init__.py diff --git a/tests/vva-be/requirements.txt b/tests/govtool-backend/requirements.txt similarity index 100% rename from tests/vva-be/requirements.txt rename to tests/govtool-backend/requirements.txt diff --git a/tests/vva-be/setup.py b/tests/govtool-backend/setup.py similarity index 100% rename from tests/vva-be/setup.py rename to tests/govtool-backend/setup.py diff --git a/tests/vva-be/test_cases/__init__.py b/tests/govtool-backend/test_cases/__init__.py similarity index 100% rename from tests/vva-be/test_cases/__init__.py rename to tests/govtool-backend/test_cases/__init__.py diff --git a/tests/vva-be/test_cases/conftest.py b/tests/govtool-backend/test_cases/conftest.py similarity index 94% rename from tests/vva-be/test_cases/conftest.py rename to tests/govtool-backend/test_cases/conftest.py index 24184f2aa..319d0c94f 100644 --- a/tests/vva-be/test_cases/conftest.py +++ b/tests/govtool-backend/test_cases/conftest.py @@ -8,7 +8,7 @@ from models.TestResult import Metrics -from test_cases.vva_api import VVAApi +from test_cases.govtool_api import VVAApi from config import CURRENT_GIT_HASH from config import BUILD_ID @@ -18,7 +18,7 @@ @pytest.fixture(scope="session") -def vva_api(): +def govtool_api(): base_url: str = os.environ.get('BASE_URL') metrics_url: str = os.environ.get('METRICS_URL') @@ -64,13 +64,13 @@ def vva_api(): @pytest.hookimpl(wrapper=True, tryfirst=True) def pytest_runtest_makereport(item): rep = yield - vva_api_object = item.funcargs.get("vva_api") + govtool_api_object = item.funcargs.get("govtool_api") if rep.when == "call": test_func_name = re.search(r'(?<=::)(.*?)*(?=\[|$)', rep.nodeid).group() - vva_api_object.add_test_metrics( + govtool_api_object.add_test_metrics( Metrics( outcome=rep.outcome, test_name=test_func_name, diff --git a/tests/vva-be/test_cases/fixtures/ada_holder.py b/tests/govtool-backend/test_cases/fixtures/ada_holder.py similarity index 80% rename from tests/vva-be/test_cases/fixtures/ada_holder.py rename to tests/govtool-backend/test_cases/fixtures/ada_holder.py index 083599011..57343cd2e 100644 --- a/tests/vva-be/test_cases/fixtures/ada_holder.py +++ b/tests/govtool-backend/test_cases/fixtures/ada_holder.py @@ -4,7 +4,7 @@ @pytest.fixture(scope="module", params=ada_holders) -def ada_holder_delegate_to_drep(request, vva_api): +def ada_holder_delegate_to_drep(request, govtool_api): ada_holder: AdaHolder = request.param delegation_data = Delegation( @@ -12,4 +12,4 @@ def ada_holder_delegate_to_drep(request, vva_api): dRepId=ada_holder["drepId"] ) - yield delegation_data \ No newline at end of file + yield delegation_data diff --git a/tests/vva-be/test_cases/fixtures/drep.py b/tests/govtool-backend/test_cases/fixtures/drep.py similarity index 100% rename from tests/vva-be/test_cases/fixtures/drep.py rename to tests/govtool-backend/test_cases/fixtures/drep.py diff --git a/tests/vva-be/test_cases/vva_api.py b/tests/govtool-backend/test_cases/govtool_api.py similarity index 100% rename from tests/vva-be/test_cases/vva_api.py rename to tests/govtool-backend/test_cases/govtool_api.py diff --git a/tests/govtool-backend/test_cases/test_ada_holder.py b/tests/govtool-backend/test_cases/test_ada_holder.py new file mode 100644 index 000000000..651a31218 --- /dev/null +++ b/tests/govtool-backend/test_cases/test_ada_holder.py @@ -0,0 +1,14 @@ +from models.TestData import AdaHolder, Delegation + +def test_ada_delegation(govtool_api, ada_holder_delegate_to_drep): + print(ada_holder_delegate_to_drep) + response = govtool_api.ada_holder_get_current_delegation(ada_holder_delegate_to_drep["stakeKey"]) + resp = response.json() + if resp: + assert ada_holder_delegate_to_drep["drepId"] in resp + + +def test_check_voting_power(govtool_api, ada_holder_delegate_to_drep): + response = govtool_api.ada_holder_get_voting_power(ada_holder_delegate_to_drep["stakeKey"]) + ada_holder_voting_power = response.json() + assert isinstance(ada_holder_voting_power, int) diff --git a/tests/vva-be/test_cases/test_drep.py b/tests/govtool-backend/test_cases/test_drep.py similarity index 81% rename from tests/vva-be/test_cases/test_drep.py rename to tests/govtool-backend/test_cases/test_drep.py index 2766af21e..c077e9169 100644 --- a/tests/vva-be/test_cases/test_drep.py +++ b/tests/govtool-backend/test_cases/test_drep.py @@ -34,14 +34,14 @@ def validate_voteonproposal_list(voteonproposal_list: [VoteonProposal]) -> bool: return True -def test_list_drep(vva_api): - response = vva_api.drep_list() +def test_list_drep(govtool_api): + response = govtool_api.drep_list() drep_list = response.json() validate_drep_list(drep_list) -def test_initialized_getVotes( vva_api, registered_drep): - response = vva_api.drep_getVotes(registered_drep["drepId"]) +def test_initialized_getVotes( govtool_api, registered_drep): + response = govtool_api.drep_getVotes(registered_drep["drepId"]) validate_voteonproposal_list(response.json()) votes = response.json() proposals = map(lambda x: x["vote"]["proposalId"], votes) @@ -49,6 +49,6 @@ def test_initialized_getVotes( vva_api, registered_drep): assert len(proposals)==0 -def test_initialized_getVotingPower(vva_api, registered_drep): - response = vva_api.drep_get_voting_power(registered_drep["drepId"]) - assert isinstance(response.json(), int) \ No newline at end of file +def test_initialized_getVotingPower(govtool_api, registered_drep): + response = govtool_api.drep_get_voting_power(registered_drep["drepId"]) + assert isinstance(response.json(), int) diff --git a/tests/vva-be/test_cases/test_proposal.py b/tests/govtool-backend/test_cases/test_proposal.py similarity index 89% rename from tests/vva-be/test_cases/test_proposal.py rename to tests/govtool-backend/test_cases/test_proposal.py index 931390c6e..7533d56ac 100644 --- a/tests/vva-be/test_cases/test_proposal.py +++ b/tests/govtool-backend/test_cases/test_proposal.py @@ -13,7 +13,7 @@ def validate_proposal_list(proposal_list: [Proposal]) -> bool: return True -def test_list_proposal(vva_api): - response = vva_api.proposal_list() +def test_list_proposal(govtool_api): + response = govtool_api.proposal_list() proposal_list = response.json() assert validate_proposal_list(proposal_list) diff --git a/tests/govtool-backend/test_cases/vva_api.py b/tests/govtool-backend/test_cases/vva_api.py new file mode 100644 index 000000000..604c15459 --- /dev/null +++ b/tests/govtool-backend/test_cases/vva_api.py @@ -0,0 +1,78 @@ +import json +import time +from typing import Any + +import requests +from requests import Response + +from models.TestResult import Metrics +from config import BUILD_ID + + +class GovToolApi(): + + def __init__(self, base_url: str): + self._base_url = base_url + self._session = requests.Session() + self._session.headers.update({"Accept": "application/json", "content-type": "application/json"}) + self.requests_log = [] + self.tests_log = [] + + def __request(self, method: str, endpoint: str, param: Any | None = None, + body: Any | None = None) -> Response: + endpoint = endpoint if endpoint.startswith('/') else '/' + endpoint + full_url = self._base_url + endpoint + full_url = full_url + "/" + param if param else full_url + start_time = int(time.time()*1000000) + + response = self._session.request(method, full_url, json=body) + + end_time = int(time.time()*1000000) + response_time = end_time - start_time + + try: + response_json = json.dumps(response.json()) + response_json_str = response_json[:200] + except: + response_json_str = "Something went wrong" + + request_info = { + "method": method, + "endpoint": endpoint, + "path_param": param, + "json": json.dumps(body), + "status_code": response.status_code, + "response_json": response_json_str, + "response_time": response_time, + "start_date": int(start_time), + "build_id": BUILD_ID + } + + self.requests_log.append(request_info) + + assert 200 >= response.status_code <= 299, f"Expected {method}{endpoint} to succeed but got statusCode:{response.status_code} : body:{response.text}" + return response + + def __get(self, endpoint: str, param: str | None = None) -> Response: + return self.__request('GET', endpoint, param) + + def drep_list(self) -> Response: + return self.__get('/drep/list') + + def drep_getVotes(self, drep_id) -> Response: + return self.__get('/drep/getVotes', drep_id) + + def drep_get_voting_power(self, drep_id) -> Response: + return self.__get('/drep/get-voting-power', drep_id) + + def proposal_list(self) -> Response: + return self.__get('/proposal/list') + + def ada_holder_get_current_delegation(self, stake_key: str) -> Response: + return self.__get('/ada-holder/get-current-delegation', stake_key) + + def ada_holder_get_voting_power(self, stake_key) -> Response: + return self.__get('/ada-holder/get-voting-power', stake_key) + + def add_test_metrics(self, metrics: Metrics): + self.tests_log.append(metrics) diff --git a/tests/vva-be/test_data.json b/tests/govtool-backend/test_data.json similarity index 100% rename from tests/vva-be/test_data.json rename to tests/govtool-backend/test_data.json diff --git a/tests/vva-be/test_data.py b/tests/govtool-backend/test_data.py similarity index 100% rename from tests/vva-be/test_data.py rename to tests/govtool-backend/test_data.py diff --git a/tests/vva-be/test_cases/test_ada_holder.py b/tests/vva-be/test_cases/test_ada_holder.py deleted file mode 100644 index 963b42b72..000000000 --- a/tests/vva-be/test_cases/test_ada_holder.py +++ /dev/null @@ -1,14 +0,0 @@ -from models.TestData import AdaHolder, Delegation - -def test_ada_delegation(vva_api, ada_holder_delegate_to_drep): - print(ada_holder_delegate_to_drep) - response = vva_api.ada_holder_get_current_delegation(ada_holder_delegate_to_drep["stakeKey"]) - resp = response.json() - if resp: - assert ada_holder_delegate_to_drep["drepId"] in resp - - -def test_check_voting_power(vva_api, ada_holder_delegate_to_drep): - response = vva_api.ada_holder_get_voting_power(ada_holder_delegate_to_drep["stakeKey"]) - ada_holder_voting_power = response.json() - assert isinstance(ada_holder_voting_power, int)