Skip to content

Commit 847ac41

Browse files
Validate that campaign config end date is not before start date.
1 parent 3640df8 commit 847ac41

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/eligibility_signposting_api/model/rules.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,13 @@ def parse_dates(cls, v: str | date) -> date:
163163
def serialize_dates(v: date, _info: SerializationInfo) -> str:
164164
return v.strftime("%Y%m%d")
165165

166+
@model_validator(mode="after")
167+
def check_start_and_end_dates_sensible(self) -> typing.Self:
168+
if self.start_date > self.end_date:
169+
message = f"start date {self.start_date} after end date {self.end_date}"
170+
raise ValueError(message)
171+
return self
172+
166173
@model_validator(mode="after")
167174
def check_no_overlapping_iterations(self) -> typing.Self:
168175
iterations_by_date = Counter([i.iteration_date for i in self.iterations])

tests/unit/model/test_rules.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,20 @@
55
from tests.fixtures.builders.model.rule import IterationFactory, RawCampaignConfigFactory
66

77

8+
def test_start_date_must_be_before_end_date(faker: Faker):
9+
# Given
10+
start_date = faker.date_object()
11+
end_date = start_date - relativedelta(days=1)
12+
13+
# When, Then
14+
with pytest.raises(
15+
ValueError,
16+
match=r"1 validation error for CampaignConfig\n"
17+
r".*start date .* after end date",
18+
):
19+
RawCampaignConfigFactory.build(start_date=start_date, end_date=end_date)
20+
21+
822
def test_iteration_with_overlapping_start_dates_not_allowed(faker: Faker):
923
# Given
1024
start_date = faker.date_object()

0 commit comments

Comments
 (0)