# test_rule_validator.py import pytest from app.services.distribution.platform_rules import PLATFORM_RULES from app.services.content.rule_validator import RuleValidator, ValidationIssue, ValidationResult, AI_Pattern def test_validate_title_length_pass(): """标题长度符合规则时返回passed""" validator = RuleValidator() result = validator.validate( content="这是一篇关于AI医疗的深度分析文章...", title="AI医疗的发展趋势与未来展望", # 符合知乎10-30要求 platform="zhihu" ) assert result.is_valid == True assert any("标题长度合规" in p or "合规" in p for p in result.passed) def test_validate_title_length_fail(): """标题长度超出限制时返回issue""" validator = RuleValidator() result = validator.validate( content="内容", title="这个标题太长了超过了三十个字符的限制了哈哈哈哈哈哈", # 超过微信公众号22字限制 platform="wechat" # 微信公众号限制22字 ) assert result.is_valid == False assert any("超过" in i.message for i in result.issues if i.severity == "high") def test_validate_content_length_pass(): """内容长度符合规则时返回passed""" validator = RuleValidator() result = validator.validate( content="A" * 1500, # 1500字,符合知乎500-50000要求 title="测试标题", platform="zhihu" ) assert result.score >= 80 def test_validate_content_length_fail(): """内容超长返回issue""" validator = RuleValidator() result = validator.validate( content="A" * 30000, # 30000字,微信公众号限制20000 title="测试标题", platform="wechat" ) assert any("超过" in i.message for i in result.issues if i.severity == "high") def test_detect_ai_patterns_banned_words(): """检测禁用词""" validator = RuleValidator() result = validator.detect_ai_patterns( content="首先,其次,最后,总而言之,总之,总之", platform="zhihu" ) assert len(result) > 0 assert any("首先" in r.pattern or "总之" in r.pattern for r in result) def test_detect_ai_patterns_banned_structures(): """检测禁用结构""" validator = RuleValidator() result = validator.detect_ai_patterns( content="第一,观点一。第二,观点二。第三,观点三。", platform="zhihu" ) assert len(result) > 0 def test_validate_zhihu_specific_rules(): """知乎特定规则""" validator = RuleValidator() result = validator.validate( content="这是一个专业回答", title="专业回答", platform="zhihu" ) # 知乎应检查营销用语 assert result.score > 0 def test_validate_wechat_specific_rules(): """微信公众号特定规则""" validator = RuleValidator() result = validator.validate( content="点击购买,限时优惠", title="限时优惠", platform="wechat" ) # 微信公众号应检测诱导分享 assert any("诱导" in i.message or "营销" in i.message for i in result.issues) def test_validate_xiaohongshu_rules(): """小红书特定规则""" validator = RuleValidator() result = validator.validate( content="微信公众号搜索xxx获取更多内容", title="种草笔记", platform="xiaohongshu" ) # 小红书应检测跨平台引流 assert any("引流" in i.message or "平台" in i.message for i in result.issues) def test_get_optimization_tips(): """获取优化建议""" validator = RuleValidator() tips = validator.get_optimization_tips("zhihu") assert len(tips) > 0 assert any(isinstance(tip, str) for tip in tips)