Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions src/rules_validation_api/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,8 @@ def main() -> None: # pragma: no cover
json_data = json.load(file)
result = RulesValidation(**json_data)
sys.stdout.write(f"{GREEN}Valid Config{RESET}\n")
sys.stdout.write(
f"{YELLOW}Current Iteration Number is {RESET}{GREEN}"
f"{result.campaign_config.current_iteration.iteration_number}{RESET}\n"
)

display_current_iteration(result)

# Group by class
grouped = defaultdict(list)
Expand All @@ -75,5 +73,20 @@ def main() -> None: # pragma: no cover
sys.stderr.write(f"{YELLOW}{clean}{RESET}\n")


def display_current_iteration(result: RulesValidation) -> None:
no_of_iterations = 0
try:
no_of_iterations = len(result.campaign_config.iterations)
current = result.campaign_config.current_iteration
except StopIteration:
current = None
if current is None:
sys.stdout.write(f"{YELLOW}No active iteration could be determined{RESET}\n")
sys.stdout.write(f"{YELLOW}Total iterations configured: {RESET}{GREEN}{no_of_iterations}{RESET}\n")
else:
sys.stdout.write(f"{YELLOW}Current Iteration Number: {RESET}{GREEN}{current.iteration_number}{RESET}\n")
sys.stdout.write(f"{YELLOW}Total iterations configured: {RESET}{GREEN}{no_of_iterations}{RESET}\n")


if __name__ == "__main__": # pragma: no cover
main()
53 changes: 52 additions & 1 deletion tests/unit/validation/test_app.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import sys
from io import StringIO
from unittest.mock import Mock, PropertyMock

from pydantic import BaseModel, ValidationError

from rules_validation_api.app import refine_error
from rules_validation_api.app import display_current_iteration, refine_error


def _raise_validation_error(model_cls, **kwargs) -> ValidationError:
Expand Down Expand Up @@ -70,3 +74,50 @@ class Model(BaseModel):
expected_no_lines = 3
assert len(lines) == expected_no_lines
assert lines[0].startswith("❌Validation Error:")


def test_no_current_iteration():
# Arrange
result = Mock()
result.campaign_config = Mock()

# iterations must be a list, not a Mock
result.campaign_config.iterations = []

# current_iteration should raise StopIteration
type(result.campaign_config).current_iteration = PropertyMock(side_effect=StopIteration)

captured = StringIO()
sys.stdout = captured

# Act
display_current_iteration(result)

# Reset stdout
sys.stdout = sys.__stdout__

# Assert
assert "No active iteration could be determined" in captured.getvalue()


def test_current_iteration_exists():
# Arrange
mock_iteration = Mock()
mock_iteration.iteration_number = 7

result = Mock()
result.campaign_config = Mock()

result.campaign_config.iterations = [mock_iteration]

type(result.campaign_config).current_iteration = PropertyMock(return_value=mock_iteration)

captured = StringIO()
sys.stdout = captured

display_current_iteration(result)

sys.stdout = sys.__stdout__

assert "Current Iteration Number:" in captured.getvalue()
assert "7" in captured.getvalue()
Loading