#!/usr/bin/env python3 """ Test script for confirmation flows. """ import sys from pathlib import Path # Add parent directory to path sys.path.insert(0, str(Path(__file__).parent.parent.parent)) from safety.confirmations.flow import get_flow from safety.confirmations.risk import RiskLevel def test_confirmations(): """Test confirmation flow.""" print("=" * 60) print("Confirmation Flow Test") print("=" * 60) flow = get_flow() # Test low-risk tool (no confirmation) print("\n1. Testing low-risk tool...") requires, message = flow.check_confirmation_required("get_current_time") print(f" ✅ get_current_time requires confirmation: {requires} (should be False)") # Test high-risk tool (confirmation required) print("\n2. Testing high-risk tool...") requires, message = flow.check_confirmation_required( "send_email", to="user@example.com", subject="Test" ) print(f" ✅ send_email requires confirmation: {requires} (should be True)") if message: print(f" Message: {message}") # Test confirmation request print("\n3. Testing confirmation request...") response = flow.process_confirmation_request( tool_name="send_email", parameters={ "to": "user@example.com", "subject": "Test Email", "body": "This is a test" }, session_id="test-session", user_id="test-user" ) print(f" ✅ Confirmation required: {response['confirmation_required']}") print(f" Risk level: {response['risk_level']}") if response.get("token"): print(f" Token generated: {response['token'][:50]}...") # Test token validation print("\n4. Testing token validation...") if response.get("token"): test_parameters = { "to": "user@example.com", "subject": "Test Email", "body": "This is a test" } is_valid, error = flow.validate_confirmation( token=response["token"], tool_name="send_email", parameters=test_parameters ) print(f" ✅ Token validation: {is_valid} (should be True)") # Test invalid token is_valid, error = flow.validate_confirmation( token="invalid_token", tool_name="send_email", parameters=test_parameters ) print(f" ✅ Invalid token validation: {is_valid} (should be False)") if error: print(f" Error: {error}") # Test risk classification print("\n5. Testing risk classification...") from safety.confirmations.risk import get_classifier classifier = get_classifier() risk = classifier.classify_risk("get_current_time") print(f" ✅ get_current_time risk: {risk.value} (should be low)") risk = classifier.classify_risk("send_email") print(f" ✅ send_email risk: {risk.value} (should be critical)") risk = classifier.classify_risk("update_task_status", status="done") print(f" ✅ update_task_status (done) risk: {risk.value}") print("\n" + "=" * 60) print("✅ Confirmation flow tests complete!") print("=" * 60) if __name__ == "__main__": test_confirmations()