Skip to content

Commit 336d284

Browse files
validate approval minimum and maximum
1 parent 825f865 commit 336d284

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

src/rules_validation_api/validators/campaign_config_validator.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,20 @@
99

1010

1111
class CampaignConfigValidation(CampaignConfig):
12+
1213
@field_validator("iterations")
1314
@classmethod
1415
def validate_iterations(cls, iterations: list[Iteration]) -> list[IterationValidation]:
1516
return [IterationValidation(**i.model_dump()) for i in iterations]
1617

18+
@model_validator(mode="after")
19+
def validate_approval_minimum_is_less_than_or_equal_to_approval_maximum(self) -> typing.Self:
20+
if self.approval_minimum > self.approval_maximum:
21+
raise ValueError(
22+
f"approval_minimum {self.approval_minimum} is greater than approval_maximum {self.approval_maximum}"
23+
)
24+
return self
25+
1726
@model_validator(mode="after")
1827
def validate_iterations_have_unique_id(self) -> typing.Self:
1928
ids = [iteration.id for iteration in self.iterations]

tests/unit/validation/test_campaign_config_validator.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,3 +247,29 @@ def test_unique_iteration_ids(self, valid_campaign_config_with_only_mandatory_fi
247247
# Assert that the duplicate ID appears in the message
248248
duplicate_id = data["Iterations"][0]["ID"]
249249
assert f"Iterations contain duplicate IDs: {duplicate_id}" in error_message
250+
251+
252+
def test_error_approval_minimum_is_greater_than_approval_maximum(self, valid_campaign_config_with_only_mandatory_fields):
253+
data = valid_campaign_config_with_only_mandatory_fields.copy()
254+
data["ApprovalMinimum"] = 2
255+
data["ApprovalMaximum"] = 1
256+
with pytest.raises(ValidationError):
257+
CampaignConfigValidation(**data)
258+
259+
@pytest.mark.parametrize(
260+
("approval_min", "approval_max"),
261+
[
262+
(1, 2),
263+
(1, 1),
264+
]
265+
)
266+
def test_approval_minimum_greater_than_approval_maximum_is_invalid(
267+
self, valid_campaign_config_with_only_mandatory_fields,
268+
approval_min,
269+
approval_max,
270+
):
271+
data = valid_campaign_config_with_only_mandatory_fields.copy()
272+
data["ApprovalMinimum"] = approval_min
273+
data["ApprovalMaximum"] = approval_max
274+
CampaignConfigValidation(**data)
275+

0 commit comments

Comments
 (0)