Skip to content

Commit 3982cb7

Browse files
new iteration type 'O' (#184)
1 parent bdfbe56 commit 3982cb7

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

src/eligibility_signposting_api/model/rules.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ class CampaignConfig(BaseModel):
159159
approver: str | None = Field(None, alias="Approver")
160160
reviewer: str | None = Field(None, alias="Reviewer")
161161
iteration_frequency: Literal["X", "D", "W", "M", "Q", "A"] = Field(..., alias="IterationFrequency")
162-
iteration_type: Literal["A", "M", "S"] = Field(..., alias="IterationType")
162+
iteration_type: Literal["A", "M", "S", "O"] = Field(..., alias="IterationType")
163163
iteration_time: str | None = Field(None, alias="IterationTime")
164164
default_comms_routing: str | None = Field(None, alias="DefaultCommsRouting")
165165
start_date: StartDate = Field(..., alias="StartDate")

tests/unit/services/calculators/test_eligibility_calculator.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import pytest
55
from faker import Faker
66
from freezegun import freeze_time
7-
from hamcrest import assert_that, contains_exactly, contains_inanyorder, equal_to, has_item, has_items
7+
from hamcrest import assert_that, contains_exactly, contains_inanyorder, equal_to, has_item, has_items, is_in
88

99
from eligibility_signposting_api.model import rules
1010
from eligibility_signposting_api.model import rules as rules_model
@@ -153,6 +153,35 @@ def test_only_live_campaigns_considered(faker: Faker):
153153
)
154154

155155

156+
@pytest.mark.parametrize(
157+
"iteration_type",
158+
["A", "M", "S", "O"],
159+
)
160+
def test_campaigns_with_applicable_iteration_types_considered(iteration_type: str, faker: Faker):
161+
# Given
162+
nhs_number = NHSNumber(faker.nhs_number())
163+
164+
person_rows = person_rows_builder(nhs_number)
165+
campaign_configs = [rule_builder.CampaignConfigFactory.build(target="RSV", iteration_type=iteration_type)]
166+
167+
calculator = EligibilityCalculator(person_rows, campaign_configs)
168+
169+
# When
170+
actual = calculator.evaluate_eligibility()
171+
172+
# Then
173+
assert_that(
174+
actual,
175+
is_eligibility_status().with_conditions(
176+
has_item(
177+
is_condition()
178+
.with_condition_name(ConditionName("RSV"))
179+
.and_status(is_in([Status.actionable, Status.not_actionable, Status.not_eligible]))
180+
),
181+
),
182+
)
183+
184+
156185
def test_base_eligible_and_simple_rule_includes(faker: Faker):
157186
# Given
158187
nhs_number = NHSNumber(faker.nhs_number())

0 commit comments

Comments
 (0)