File tree Expand file tree Collapse file tree 2 files changed +21
-0
lines changed
src/eligibility_signposting_api/model Expand file tree Collapse file tree 2 files changed +21
-0
lines changed Original file line number Diff line number Diff 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 ])
Original file line number Diff line number Diff line change 55from 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+
822def test_iteration_with_overlapping_start_dates_not_allowed (faker : Faker ):
923 # Given
1024 start_date = faker .date_object ()
You can’t perform that action at this time.
0 commit comments