"""Tests for data models.""" import pytest from rule_engine.models import Rule, RuleExecution, CreateRuleRequest, EvaluateRequest, EvaluateResponse def test_create_rule_request_valid(): """验证创建规则的请求可以正确解析。""" request = CreateRuleRequest( name="test_rule", description="测试规则", condition_template="用户 {{user_id}} 年龄大于 {{age}}" ) assert request.name == "test_rule" assert request.description == "测试规则" assert "{{user_id}}" in request.condition_template def test_create_rule_request_minimal(): """验证最小请求只需必填字段。""" request = CreateRuleRequest( name="minimal_rule", condition_template="如果用户是会员则打折" ) assert request.name == "minimal_rule" assert request.priority == 0 def test_rule_model(): """验证规则模型包含所有必要字段。""" rule = Rule( id="rule_001", name="premium_discount", description="高级会员8折", condition_template="用户是高级会员", code="def rule_001(facts):\n if facts.get('subscription') == 'premium':\n return {'action': 'discount', 'rate': 0.8}\n return None" ) assert rule.id == "rule_001" assert rule.priority == 0 assert "premium" in rule.code def test_rule_to_dict(): """验证规则可以序列化为字典。""" rule = Rule( id="rule_001", name="test", condition_template="test", code="def r(f): pass" ) d = rule.to_dict() assert d["id"] == "rule_001" assert d["name"] == "test" def test_rule_execution_model(): """验证规则执行记录模型。""" execution = RuleExecution( id="exec_001", rule_id="rule_001", facts={"user_id": "u123", "subscription": "premium"}, result={"action": "discount", "rate": 0.8}, matched=True ) assert execution.matched is True assert execution.rule_id == "rule_001" def test_evaluate_request(): """验证校验请求模型。""" req = EvaluateRequest(facts={"user_id": "u123"}) assert req.rule_id is None assert req.facts["user_id"] == "u123" def test_evaluate_response(): """验证校验响应模型。""" resp = EvaluateResponse(matched=True, rule_id="rule_001", result={"action": "ok"}) assert resp.matched is True assert resp.conflict_warning is None