diff --git a/src/eligibility_signposting_api/audit/audit_models.py b/src/eligibility_signposting_api/audit/audit_models.py index d80409a8c..5ce4e598f 100644 --- a/src/eligibility_signposting_api/audit/audit_models.py +++ b/src/eligibility_signposting_api/audit/audit_models.py @@ -70,9 +70,9 @@ class AuditAction(CamelCaseBaseModel): class AuditCondition(CamelCaseBaseModel): campaign_id: str | None = None - campaign_version: str | None = None + campaign_version: int | None = None iteration_id: str | None = None - iteration_version: str | None = None + iteration_version: int | None = None condition_name: str | None = None status: str | None = None status_text: str | None = None diff --git a/src/eligibility_signposting_api/model/campaign_config.py b/src/eligibility_signposting_api/model/campaign_config.py index b7409baea..cc67fbc98 100644 --- a/src/eligibility_signposting_api/model/campaign_config.py +++ b/src/eligibility_signposting_api/model/campaign_config.py @@ -17,10 +17,10 @@ from pydantic import SerializationInfo CampaignName = NewType("CampaignName", str) -CampaignVersion = NewType("CampaignVersion", str) +CampaignVersion = NewType("CampaignVersion", int) CampaignID = NewType("CampaignID", str) IterationName = NewType("IterationName", str) -IterationVersion = NewType("IterationVersion", str) +IterationVersion = NewType("IterationVersion", int) IterationID = NewType("IterationID", str) IterationDate = NewType("IterationDate", date) RuleName = NewType("RuleName", str) @@ -185,9 +185,9 @@ class CampaignConfig(BaseModel): name: CampaignName = Field(..., alias="Name") type: Literal["V", "S"] = Field(..., alias="Type") target: Literal["COVID", "FLU", "MMR", "RSV"] = Field(..., alias="Target") - manager: str | None = Field(None, alias="Manager") - approver: str | None = Field(None, alias="Approver") - reviewer: str | None = Field(None, alias="Reviewer") + manager: list[str] | None = Field(None, alias="Manager") + approver: list[str] | None = Field(None, alias="Approver") + reviewer: list[str] | None = Field(None, alias="Reviewer") iteration_frequency: Literal["X", "D", "W", "M", "Q", "A"] = Field(..., alias="IterationFrequency") iteration_type: Literal["A", "M", "S", "O"] = Field(..., alias="IterationType") iteration_time: str | None = Field(None, alias="IterationTime") diff --git a/tests/unit/audit/test_audit_context.py b/tests/unit/audit/test_audit_context.py index ccd55a5f7..40abf9c80 100644 --- a/tests/unit/audit/test_audit_context.py +++ b/tests/unit/audit/test_audit_context.py @@ -99,7 +99,7 @@ def test_append_audit_condition_adds_condition_to_audit_log_on_g(app): ] condition_name = ConditionName("Condition1") - iteration = IterationFactory.build() + iteration = IterationFactory.build(version=12345) audit_rules = [ Reason( rule_type=RuleType.filter, @@ -119,7 +119,7 @@ def test_append_audit_condition_adds_condition_to_audit_log_on_g(app): iteration_result = IterationResult( status=Status.actionable, cohort_results=[cohort_group_result], actions=suggested_actions ) - campaign_details = (CampaignID("CampaignID1"), CampaignVersion("CampaignVersion1")) + campaign_details = (CampaignID("CampaignID1"), CampaignVersion(123)) matched_action_detail = MatchedActionDetail(RuleName("RedirectRuleName1"), RulePriority("1"), suggested_actions) best_iteration_results = BestIterationResult( diff --git a/tests/unit/model/test_campaign_config.py b/tests/unit/model/test_campaign_config.py index 28f96d799..bab1aa102 100644 --- a/tests/unit/model/test_campaign_config.py +++ b/tests/unit/model/test_campaign_config.py @@ -92,3 +92,23 @@ def test_iteration_rule_deserialisation(rule_stop: str, expected): # Then assert_that(actual, is_iteration_rule().with_rule_stop(expected)) + + +@pytest.mark.parametrize( + ("field_name", "value"), + [ + ("manager", "manager@test.com"), + ("approver", "approver@test.com"), + ("reviewer", "reviewer@test.com"), + ], +) +def test_campaign_should_accept_list_of_strings_for_different_role_emails(field_name: str, value: str): + # Given + kwargs = {field_name: value} + + # When, Then + with pytest.raises( + ValueError, + match=rf"1 validation error for CampaignConfig\n{field_name}\n\s+Input should be a valid list.*", + ): + RawCampaignConfigFactory.build(**kwargs)