test_dual_channel_normalization.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. """V3-M1D: dual-channel canonical isomorphism + real dispatch."""
  2. from __future__ import annotations
  3. import pytest
  4. from content_agent.errors import ContentAgentError, ErrorCode
  5. from content_agent.integrations.douyin import CrawapiDouyinClient
  6. from content_agent.integrations.shipinhao import (
  7. CrawapiShipinhaoClient,
  8. _normalize_shipinhao_item,
  9. )
  10. from content_agent.run_service import RunService
  11. _QUERY = {"search_query_id": "q_001", "search_query": "彩虹", "discovery_start_source": "pattern_itemset"}
  12. def _douyin_client():
  13. return CrawapiDouyinClient(
  14. base_url="http://crawapi.test",
  15. keyword_path="/k",
  16. blogger_path="/b",
  17. detail_path="/d",
  18. http_client=object(),
  19. )
  20. def test_douyin_and_shipinhao_share_canonical_keys():
  21. douyin_item = _douyin_client()._normalize_content_item(
  22. _QUERY,
  23. {"aweme_id": "a1", "author": {"sec_uid": "u1", "nickname": "n"}, "video": {"play_addr": {"url_list": ["http://v"]}}},
  24. 1,
  25. True,
  26. "12",
  27. )
  28. sph_item = _normalize_shipinhao_item(
  29. _QUERY,
  30. {"channel_content_id": "c1", "channel_account_id": "acc", "title": "彩虹 #彩虹", "video_url_list": [{"video_url": "http://v"}]},
  31. 1,
  32. True,
  33. "12",
  34. )
  35. assert set(douyin_item) == set(sph_item)
  36. assert douyin_item["platform"] == "douyin"
  37. assert sph_item["platform"] == "shipinhao"
  38. def test_shipinhao_real_dispatch_builds_client(monkeypatch):
  39. monkeypatch.setattr(
  40. CrawapiShipinhaoClient, "from_env", classmethod(lambda cls: object.__new__(cls))
  41. )
  42. service = object.__new__(RunService)
  43. client = service._platform_client("shipinhao", "real")
  44. assert isinstance(client, CrawapiShipinhaoClient)
  45. def test_unsupported_real_platform_raises():
  46. service = object.__new__(RunService)
  47. with pytest.raises(ContentAgentError) as exc:
  48. service._platform_client("bilibili", "real")
  49. assert exc.value.error_code == ErrorCode.INVALID_REQUEST