Skip to content

Commit

Permalink
Some code improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
omar-selo committed Sep 18, 2024
1 parent dbaf6a2 commit a123a51
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 27 deletions.
18 changes: 10 additions & 8 deletions backend/scripts/seed_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@
from sqlalchemy import select
from sqlalchemy.orm import Session

from test_observer.controllers.environments import models as environment_issues_models
from test_observer.controllers.test_cases import models as test_issues_models
from test_observer.controllers.environments.models import (
EnvironmentReportedIssueRequest,
)
from test_observer.controllers.test_cases.models import TestReportedIssueRequest
from test_observer.controllers.test_executions.models import (
C3TestResult,
C3TestResultStatus,
Expand Down Expand Up @@ -290,37 +292,37 @@
]

TEST_CASE_ISSUE_REQUESTS = [
test_issues_models.ReportedIssueRequest(
TestReportedIssueRequest(
template_id=END_TEST_EXECUTION_REQUESTS[0].test_results[2].template_id, # type: ignore
url=HttpUrl("https://github.com"),
description="known issue 1",
),
test_issues_models.ReportedIssueRequest(
TestReportedIssueRequest(
case_name=END_TEST_EXECUTION_REQUESTS[0].test_results[0].name,
url=HttpUrl("https://warthogs.atlassian.net"),
description="known issue 2",
),
test_issues_models.ReportedIssueRequest(
TestReportedIssueRequest(
case_name=END_TEST_EXECUTION_REQUESTS[0].test_results[1].name,
url=HttpUrl("https://bugs.launchpad.net"),
description="known issue 3",
),
]

ENVIRONMENT_ISSUE_REQUESTS = [
environment_issues_models.ReportedIssueRequest(
EnvironmentReportedIssueRequest(
environment_name=START_TEST_EXECUTION_REQUESTS[0].environment,
url=HttpUrl("https://github.com"),
description="known issue 1",
is_confirmed=True,
),
environment_issues_models.ReportedIssueRequest(
EnvironmentReportedIssueRequest(
environment_name=START_TEST_EXECUTION_REQUESTS[1].environment,
url=HttpUrl("https://warthogs.atlassian.net"),
description="known issue 2",
is_confirmed=False,
),
environment_issues_models.ReportedIssueRequest(
EnvironmentReportedIssueRequest(
environment_name=START_TEST_EXECUTION_REQUESTS[2].environment,
url=HttpUrl("https://bugs.launchpad.net"),
description="known issue 3",
Expand Down
8 changes: 4 additions & 4 deletions backend/test_observer/controllers/environments/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@
from test_observer.common.constants import VALID_ISSUE_HOSTS


class ReportedIssueRequest(BaseModel):
class EnvironmentReportedIssueRequest(BaseModel):
environment_name: str
description: str
url: HttpUrl
is_confirmed: bool

@field_validator("url")
@classmethod
def name_must_contain_space(
cls: type["ReportedIssueRequest"], url: HttpUrl
def url_host_must_be_allowed(
cls: type["EnvironmentReportedIssueRequest"], url: HttpUrl
) -> HttpUrl:
if url.host not in VALID_ISSUE_HOSTS:
raise ValueError(f"Issue url must belong to one of {VALID_ISSUE_HOSTS}")
return url


class ReportedIssueResponse(BaseModel):
class EnvironmentReportedIssueResponse(BaseModel):
id: int
environment_name: str
description: str
Expand Down
16 changes: 10 additions & 6 deletions backend/test_observer/controllers/environments/reported_issues.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,22 @@
from test_observer.data_access.models import EnvironmentIssue
from test_observer.data_access.setup import get_db

from .models import ReportedIssueRequest, ReportedIssueResponse
from .models import EnvironmentReportedIssueRequest, EnvironmentReportedIssueResponse

router = APIRouter()

endpoint = "/reported-issues"


@router.get(endpoint, response_model=list[ReportedIssueResponse])
@router.get(endpoint, response_model=list[EnvironmentReportedIssueResponse])
def get_reported_issues(db: Session = Depends(get_db)):
return db.execute(select(EnvironmentIssue)).scalars()


@router.post(endpoint, response_model=ReportedIssueResponse)
def create_reported_issue(request: ReportedIssueRequest, db: Session = Depends(get_db)):
@router.post(endpoint, response_model=EnvironmentReportedIssueResponse)
def create_reported_issue(
request: EnvironmentReportedIssueRequest, db: Session = Depends(get_db)
):
issue = EnvironmentIssue(
environment_name=request.environment_name,
url=request.url,
Expand All @@ -31,9 +33,11 @@ def create_reported_issue(request: ReportedIssueRequest, db: Session = Depends(g
return issue


@router.put(endpoint + "/{issue_id}", response_model=ReportedIssueResponse)
@router.put(endpoint + "/{issue_id}", response_model=EnvironmentReportedIssueResponse)
def update_reported_issue(
issue_id: int, request: ReportedIssueRequest, db: Session = Depends(get_db)
issue_id: int,
request: EnvironmentReportedIssueRequest,
db: Session = Depends(get_db),
):
issue = db.get(EnvironmentIssue, issue_id)
for field in request.model_fields:
Expand Down
6 changes: 3 additions & 3 deletions backend/test_observer/controllers/test_cases/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from test_observer.common.constants import VALID_ISSUE_HOSTS


class ReportedIssueRequest(BaseModel):
class TestReportedIssueRequest(BaseModel):
template_id: str = ""
case_name: str = ""
description: str
Expand All @@ -21,14 +21,14 @@ def check_a_or_b(self):
@field_validator("url")
@classmethod
def name_must_contain_space(
cls: type["ReportedIssueRequest"], url: HttpUrl
cls: type["TestReportedIssueRequest"], url: HttpUrl
) -> HttpUrl:
if url.host not in VALID_ISSUE_HOSTS:
raise ValueError(f"Issue url must belong to one of {VALID_ISSUE_HOSTS}")
return url


class ReportedIssueResponse(BaseModel):
class TestReportedIssueResponse(BaseModel):
id: int
template_id: str = ""
case_name: str = ""
Expand Down
14 changes: 8 additions & 6 deletions backend/test_observer/controllers/test_cases/reported_issues.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
from test_observer.data_access.models import TestCaseIssue
from test_observer.data_access.setup import get_db

from .models import ReportedIssueRequest, ReportedIssueResponse
from .models import TestReportedIssueRequest, TestReportedIssueResponse

router = APIRouter()


endpoint = "/reported-issues"


@router.get(endpoint, response_model=list[ReportedIssueResponse])
@router.get(endpoint, response_model=list[TestReportedIssueResponse])
def get_reported_issues(
template_id: str | None = None,
case_name: str | None = None,
Expand All @@ -27,8 +27,10 @@ def get_reported_issues(
return db.execute(stmt).scalars()


@router.post(endpoint, response_model=ReportedIssueResponse)
def create_reported_issue(request: ReportedIssueRequest, db: Session = Depends(get_db)):
@router.post(endpoint, response_model=TestReportedIssueResponse)
def create_reported_issue(
request: TestReportedIssueRequest, db: Session = Depends(get_db)
):
issue = TestCaseIssue(
template_id=request.template_id,
url=request.url,
Expand All @@ -41,9 +43,9 @@ def create_reported_issue(request: ReportedIssueRequest, db: Session = Depends(g
return issue


@router.put(endpoint + "/{issue_id}", response_model=ReportedIssueResponse)
@router.put(endpoint + "/{issue_id}", response_model=TestReportedIssueResponse)
def update_reported_issue(
issue_id: int, request: ReportedIssueRequest, db: Session = Depends(get_db)
issue_id: int, request: TestReportedIssueRequest, db: Session = Depends(get_db)
):
issue = db.get(TestCaseIssue, issue_id)
for field in request.model_fields:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ def _assert_reported_issue(value: dict, expected: dict) -> None:
assert value["environment_name"] == expected["environment_name"]
assert value["url"] == expected["url"]
assert value["description"] == expected["description"]
assert value["is_confirmed"] == expected["is_confirmed"]
assert isinstance(value["id"], int)
assert isinstance(value["created_at"], str)
assert isinstance(value["updated_at"], str)

0 comments on commit a123a51

Please sign in to comment.