"""Tests for action model.""" import pytest from app.core.action import Action, ActionType def test_action_creation() -> None: """Test creating an action.""" action = Action( action_type=ActionType.EXTRACT_FIELD, parameters={"field_name": "price", "selector": ".price"}, confidence=0.9, ) assert action.action_type == ActionType.EXTRACT_FIELD assert action.confidence == 0.9 def test_action_factory_methods() -> None: """Test action factory methods.""" nav_action = Action.navigate("https://example.com") assert nav_action.action_type == ActionType.NAVIGATE assert nav_action.parameters["url"] == "https://example.com" extract_action = Action.extract_field("price", ".product-price") assert extract_action.action_type == ActionType.EXTRACT_FIELD assert extract_action.parameters["field_name"] == "price" done_action = Action.done(success=True, message="Task completed") assert done_action.action_type == ActionType.DONE assert done_action.parameters["success"] is True def test_action_validation() -> None: """Test action parameter validation.""" # Valid action action = Action( action_type=ActionType.NAVIGATE, parameters={"url": "https://example.com"}, ) errors = action.validate_params() assert len(errors) == 0 # Invalid action - missing required param invalid_action = Action( action_type=ActionType.NAVIGATE, parameters={}, ) errors = invalid_action.validate_params() assert len(errors) > 0 assert "url" in errors[0] def test_action_confidence_bounds() -> None: """Test confidence is bounded to 0-1 by Pydantic validation.""" import pytest from pydantic import ValidationError # Values > 1.0 should raise validation error with pytest.raises(ValidationError): Action( action_type=ActionType.WAIT, confidence=1.5, ) # Values < 0.0 should raise validation error with pytest.raises(ValidationError): Action( action_type=ActionType.WAIT, confidence=-0.5, ) # Valid boundary values should work action_max = Action(action_type=ActionType.WAIT, confidence=1.0) assert action_max.confidence == 1.0 action_min = Action(action_type=ActionType.WAIT, confidence=0.0) assert action_min.confidence == 0.0