106 lines
3.7 KiB
Python
106 lines
3.7 KiB
Python
# 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)
|