| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- from __future__ import annotations
- import json
- from core.models import Post
- from decode_content.payloads import build_payload, build_payloads
- def _post() -> Post:
- return Post(
- id="xhs_1",
- platform="xiaohongshu",
- url="https://xhs/1",
- content_id="1",
- title="脚本教程",
- author_name="作者",
- )
- def test_build_how_payload_uses_formal_dim_attribute_and_scope_union():
- knowledge = {
- "id": "k1",
- "type": "how",
- "title": "先定受众再写脚本",
- "purpose": "写出稳定脚本",
- "业务阶段": ["脚本"],
- "steps": [
- {
- "input": "选题",
- "directive": "收窄受众",
- "output": "受众画像",
- "创作阶段": "定向",
- "动作": "收窄",
- "作用域": [
- {"scope_type": "intent", "value": "吸引注意", "link": "复用"},
- {"scope_type": "intent", "value": "吸引注意", "link": "复用"},
- ],
- }
- ],
- }
- payload = build_payload(_post(), knowledge)
- assert payload["dim_attributes"] == ["how工序"]
- assert "输入:选题" in payload["content"]
- assert "指引:收窄受众" in payload["content"]
- assert payload["scopes"] == [{"scope_type": "intent", "value": "吸引注意"}]
- assert {"key": "创作阶段", "type": "str", "value": "定向"} in payload["custom_ext"]
- def test_build_what_and_why_payload_content_is_string_contract():
- what = {
- "id": "w1",
- "type": "what",
- "title": "脚本三要素",
- "kind": "子集",
- "概要": "脚本由开头中段结尾构成",
- "维度拆分规则": "按表达顺序",
- "body": [{"item_name": "开头", "item_desc": "抓注意"}],
- "业务阶段": ["脚本"],
- "作用域": [{"scope_type": "form", "value": "脚本结构", "top": []}],
- }
- why = {
- "id": "y1",
- "type": "why",
- "title": "冲突带来停留",
- "阐述": "冲突能制造期待,所以提升停留。",
- "业务阶段": ["选题"],
- "作用域": [{"scope_type": "effect", "value": "提升停留", "score": 0.95}],
- }
- what_payload, why_payload = build_payloads(_post(), [what, why])
- assert what_payload["dim_attributes"] == ["what构成"]
- assert json.loads(what_payload["content"])["body"][0]["item_name"] == "开头"
- assert {"key": "概要", "type": "str", "value": "脚本由开头中段结尾构成"} in what_payload["custom_ext"]
- assert why_payload["dim_attributes"] == ["why原理"]
- assert why_payload["content"] == "冲突能制造期待,所以提升停留。"
- assert "score" not in why_payload["scopes"][0]
|