test_decompose_helpers.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. """decompose 入口二的纯逻辑离线测:slugify + expand_queries 跨 query 去重。"""
  2. from __future__ import annotations
  3. import scripts.decompose as d
  4. from core.config import PgConfig, Settings
  5. def _settings() -> Settings:
  6. return Settings(
  7. pg=PgConfig(host="h", port=5432, user="u", password="p", database="d"),
  8. aiddit_crawler_base_url="x", crawler_timeout=30,
  9. openrouter_timeout_seconds=90,
  10. openrouter_model="m",
  11. openrouter_base_url="b", openrouter_api_key="k",
  12. llm_model="m", max_cards=12, frames_dir="f", douyin_ratio="540p", data_dir="")
  13. def test_slugify():
  14. assert d.slugify("分镜脚本") == "分镜脚本" # 中文保留
  15. assert d.slugify("A B!c") == "a-b-c" # 空格/标点→- 且小写
  16. assert d.slugify("") == "run" # 空→run
  17. assert d.slugify("!!!") == "run" # 全标点→run
  18. def test_expand_queries_dedup(monkeypatch):
  19. ret = {"q1": ["a", "b"], "q2": ["b", "c"]} # q1/q2 共享 id "b"
  20. def fake_search(keyword, **kw):
  21. return ret[keyword]
  22. monkeypatch.setattr(d, "search_keyword", fake_search)
  23. srcs = d.expand_queries(
  24. [{"query": "q1", "platform": "xiaohongshu"},
  25. {"query": "q2", "platform": "xiaohongshu"}], _settings())
  26. assert [s["cid"] for s in srcs] == ["a", "b", "c"] # b 去重,只出现一次
  27. assert all(s["from"] == "live" for s in srcs)
  28. assert srcs[0]["query"] == "q1" and srcs[2]["query"] == "q2" # b 归属首次命中的 q1
  29. def test_expand_queries_skips_failed(monkeypatch):
  30. def fake_search(keyword, **kw):
  31. if keyword == "bad":
  32. raise RuntimeError("search down")
  33. return ["x"]
  34. monkeypatch.setattr(d, "search_keyword", fake_search)
  35. srcs = d.expand_queries(
  36. [{"query": "bad", "platform": "xiaohongshu"},
  37. {"query": "ok", "platform": "xiaohongshu"}], _settings())
  38. assert [s["cid"] for s in srcs] == ["x"] # bad 整条跳过,不阻断 ok