Skip to content

Commit 5496516

Browse files
ELI 557 - Iteration Date must be >= Campaign Start Date AND <= Campaign End Date
1 parent 665df11 commit 5496516

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

src/rules_validation_api/validators/campaign_config_validator.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,19 @@ def validate_iterations(cls, iterations: list[Iteration]) -> list[IterationValid
1414
return [IterationValidation(**i.model_dump()) for i in iterations]
1515

1616
@model_validator(mode="after")
17-
def check_has_iteration_from_start(self) -> typing.Self:
17+
def validate_campaign_has_iteration_within_schedule(self) -> typing.Self:
1818
iterations_by_date = sorted(self.iterations, key=attrgetter("iteration_date"))
1919
if first_iteration := next(iter(iterations_by_date), None):
20-
if first_iteration.iteration_date > self.start_date:
21-
message = (
22-
f"campaign {self.id} starts on {self.start_date}, "
23-
f"1st iteration starts later - {first_iteration.iteration_date}"
20+
if first_iteration.iteration_date < self.start_date:
21+
raise ValueError(
22+
f"Iteration {first_iteration.id} starts before campaign {self.id} "
23+
f"start date {self.start_date}."
24+
)
25+
if first_iteration.iteration_date > self.end_date:
26+
raise ValueError(
27+
f"Iteration {first_iteration.id} starts after campaign {self.id} "
28+
f"end date {self.end_date}."
2429
)
25-
raise ValueError(message)
2630
return self
2731
# Should never happen, since we are constraining self.iterations with a min_length of 1
2832
message = f"campaign {self.id} has no iterations."

tests/unit/validation/test_campaign_config_validator.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ class TestBUCValidations:
196196
("start_date", "end_date"),
197197
[
198198
("20250101", "20250331"), # valid range
199-
("20250601", "20250630"), # valid short range
200-
("20250101", "20250101"), # same day
199+
("20250201", "20250228"), # valid short range
200+
("20250202", "20250202"), # same day
201201
],
202202
)
203203
def test_valid_start_and_end_dates_and_iteration_dates_relation(
@@ -206,14 +206,14 @@ def test_valid_start_and_end_dates_and_iteration_dates_relation(
206206
data = valid_campaign_config_with_only_mandatory_fields.copy()
207207
data["StartDate"] = start_date
208208
data["EndDate"] = end_date
209-
data["Iterations"][0]["IterationDate"] = "20241231"
209+
data["Iterations"][0]["IterationDate"] = "20250202"
210210
CampaignConfigValidation(**data)
211211

212212
@pytest.mark.parametrize(
213213
("start_date", "end_date"),
214214
[
215-
("20241230", "20250101"), # campaign start date is after the iteration date
216-
("20250331", "20250101"), # end before start
215+
("20241230", "20250101"), # Campaign start date is after the iteration date
216+
("20240729", "20241228"), # Campaign ends date is before the iteration date
217217
],
218218
)
219219
def test_invalid_start_and_end_dates_and_iteration_dates_relation(
@@ -222,7 +222,7 @@ def test_invalid_start_and_end_dates_and_iteration_dates_relation(
222222
data = valid_campaign_config_with_only_mandatory_fields.copy()
223223
data["StartDate"] = start_date
224224
data["EndDate"] = end_date
225-
data["Iterations"][0]["IterationDate"] = "20241231"
225+
data["Iterations"][0]["IterationDate"] = "20241229"
226226
with pytest.raises(ValidationError):
227227
CampaignConfigValidation(**data)
228228

0 commit comments

Comments
 (0)