From baefb5009ca6dcffa60eb27cca76b01949b81413 Mon Sep 17 00:00:00 2001 From: Andrej Velichkovski <33193463+andrejvelichkovski@users.noreply.github.com> Date: Fri, 26 Apr 2024 09:51:30 +0200 Subject: [PATCH] Implement checkbox version tracking in TO (#160) * Implement checkbox version tracking in TO * Fix mypy and pytest issues --- ...d36de5a8a48_add_checkbox_version_column.py | 27 +++++++++++++++++++ .../controllers/reports/reports.py | 2 ++ .../controllers/test_executions/end_test.py | 2 ++ .../controllers/test_executions/models.py | 1 + backend/test_observer/data_access/models.py | 4 +++ .../tests/controllers/reports/test_reports.py | 2 ++ .../test_executions/test_end_test.py | 2 ++ backend/tests/data_generator.py | 2 ++ 8 files changed, 42 insertions(+) create mode 100644 backend/migrations/versions/2024_04_25_1525-5d36de5a8a48_add_checkbox_version_column.py diff --git a/backend/migrations/versions/2024_04_25_1525-5d36de5a8a48_add_checkbox_version_column.py b/backend/migrations/versions/2024_04_25_1525-5d36de5a8a48_add_checkbox_version_column.py new file mode 100644 index 00000000..e9c32d69 --- /dev/null +++ b/backend/migrations/versions/2024_04_25_1525-5d36de5a8a48_add_checkbox_version_column.py @@ -0,0 +1,27 @@ +"""Add checkbox version column + +Revision ID: 5d36de5a8a48 +Revises: 624a270a03dc +Create Date: 2024-04-25 15:25:33.149465+00:00 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = "5d36de5a8a48" +down_revision = "624a270a03dc" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + op.add_column( + "test_execution", + sa.Column("checkbox_version", sa.String(length=200), nullable=True), + ) + + +def downgrade() -> None: + op.drop_column("test_execution", "checkbox_version") diff --git a/backend/test_observer/controllers/reports/reports.py b/backend/test_observer/controllers/reports/reports.py index f5f968cb..83d65e5a 100644 --- a/backend/test_observer/controllers/reports/reports.py +++ b/backend/test_observer/controllers/reports/reports.py @@ -35,6 +35,8 @@ TestExecution.status, TestExecution.review_decision, TestExecution.review_comment, + TestExecution.c3_link, + TestExecution.checkbox_version, Environment.name, Environment.architecture, TestCase.template_id, diff --git a/backend/test_observer/controllers/test_executions/end_test.py b/backend/test_observer/controllers/test_executions/end_test.py index 8d4a5d02..3b2c82a6 100644 --- a/backend/test_observer/controllers/test_executions/end_test.py +++ b/backend/test_observer/controllers/test_executions/end_test.py @@ -70,6 +70,8 @@ def end_test_execution(request: EndTestExecutionRequest, db: Session = Depends(g if request.c3_link is not None: test_execution.c3_link = request.c3_link + test_execution.checkbox_version = request.checkbox_version + db.commit() diff --git a/backend/test_observer/controllers/test_executions/models.py b/backend/test_observer/controllers/test_executions/models.py index 4973db29..329eb22d 100644 --- a/backend/test_observer/controllers/test_executions/models.py +++ b/backend/test_observer/controllers/test_executions/models.py @@ -99,6 +99,7 @@ class C3TestResult(BaseModel): class EndTestExecutionRequest(BaseModel): ci_link: Annotated[str, HttpUrl] c3_link: Annotated[str, HttpUrl] | None = None + checkbox_version: str | None = None test_results: list[C3TestResult] diff --git a/backend/test_observer/data_access/models.py b/backend/test_observer/data_access/models.py index 5900cd50..652ac590 100644 --- a/backend/test_observer/data_access/models.py +++ b/backend/test_observer/data_access/models.py @@ -299,6 +299,10 @@ class TestExecution(Base): ) review_comment: Mapped[str] = mapped_column(default="") + checkbox_version: Mapped[str | None] = mapped_column( + String(200), nullable=True, default=None + ) + @property def is_approved(self) -> bool: return (len(self.review_decision) > 0) and ( diff --git a/backend/tests/controllers/reports/test_reports.py b/backend/tests/controllers/reports/test_reports.py index ee8c68f2..f63d60de 100644 --- a/backend/tests/controllers/reports/test_reports.py +++ b/backend/tests/controllers/reports/test_reports.py @@ -114,6 +114,8 @@ def _expected_report_row(test_result: TestResult) -> list: test_execution.status.name, str(test_execution.review_decision), test_execution.review_comment, + "" if not test_execution.c3_link else test_execution.c3_link, + "" if not test_execution.checkbox_version else test_execution.checkbox_version, environment.name, environment.architecture, test_case.template_id, diff --git a/backend/tests/controllers/test_executions/test_end_test.py b/backend/tests/controllers/test_executions/test_end_test.py index 92baa33f..17d8f483 100644 --- a/backend/tests/controllers/test_executions/test_end_test.py +++ b/backend/tests/controllers/test_executions/test_end_test.py @@ -39,6 +39,7 @@ def test_report_test_execution_data(test_client: TestClient, generator: DataGene json={ "ci_link": test_execution.ci_link, "c3_link": c3_link, + "checkbox_version": "3.3.0", "test_results": [ { "name": test_case.name, @@ -62,6 +63,7 @@ def test_report_test_execution_data(test_client: TestClient, generator: DataGene assert response.status_code == 200 assert test_execution.status == TestExecutionStatus.PASSED assert test_execution.c3_link == c3_link + assert test_execution.checkbox_version == "3.3.0" assert test_execution.test_results[0].test_case.name == test_case.name assert test_execution.test_results[0].status == TestResultStatus.PASSED assert test_execution.test_results[0].test_case.template_id == test_case.template_id diff --git a/backend/tests/data_generator.py b/backend/tests/data_generator.py index 37e93452..eae7edd8 100644 --- a/backend/tests/data_generator.py +++ b/backend/tests/data_generator.py @@ -125,6 +125,7 @@ def gen_test_execution( status: TestExecutionStatus = TestExecutionStatus.NOT_STARTED, review_decision: list[TestExecutionReviewDecision] | None = None, review_comment: str = "", + checkbox_version: str | None = None, ) -> TestExecution: if review_decision is None: review_decision = [] @@ -137,6 +138,7 @@ def gen_test_execution( status=status, review_decision=review_decision, review_comment=review_comment, + checkbox_version=checkbox_version, ) self.db_session.add(test_execution) self.db_session.commit()