diff --git a/backend/pashub_fetcher/pashub_to_ara_trigger_request.py b/backend/pashub_fetcher/pashub_to_ara_trigger_request.py index 518a8dc3..2e077c2e 100644 --- a/backend/pashub_fetcher/pashub_to_ara_trigger_request.py +++ b/backend/pashub_fetcher/pashub_to_ara_trigger_request.py @@ -1,10 +1,11 @@ +import re from typing import Optional from pydantic import BaseModel class PashubToAraTriggerRequest(BaseModel): pashub_link: ( - str # e.g. https://pashub.net/jobs/12345-abcd-1234-abcd-12345abcde/details + str # e.g. https://pashub.net/jobs/{id}/details, /jobs/{id}/evidence/view, /jobs/{id} ) address: Optional[str] = None @@ -17,4 +18,7 @@ class PashubToAraTriggerRequest(BaseModel): @property def pashub_job_id(self) -> str: - return self.pashub_link.split("/")[-2] + match = re.search(r"/jobs/([^/]+)", self.pashub_link) + if not match: + raise ValueError(f"No job ID found in PasHub link: {self.pashub_link}") + return match.group(1) diff --git a/backend/pashub_fetcher/tests/test_pashub_to_ara_trigger_request.py b/backend/pashub_fetcher/tests/test_pashub_to_ara_trigger_request.py index b538fa7e..6eec1e14 100644 --- a/backend/pashub_fetcher/tests/test_pashub_to_ara_trigger_request.py +++ b/backend/pashub_fetcher/tests/test_pashub_to_ara_trigger_request.py @@ -9,6 +9,26 @@ def make_request(pashub_link: str) -> PashubToAraTriggerRequest: return PashubToAraTriggerRequest(pashub_link=pashub_link) +def test_pashub_job_id_raises_for_invalid_link() -> None: + # Arrange + request = make_request("https://pashub.net/rcs-dashboard") + + # Act / Assert + with pytest.raises(ValueError): + request.pashub_job_id + + +def test_pashub_job_id_extracts_id_from_bare_job_link() -> None: + # Arrange + request = make_request("https://pashub.net/jobs/job-id-123") + + # Act + result = request.pashub_job_id + + # Assert + assert result == "job-id-123" + + def test_pashub_job_id_extracts_id_from_evidence_view_link() -> None: # Arrange request = make_request("https://pashub.net/jobs/job-id-123/evidence/view")