test_08_module_live.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. """Swagger 模块 8(内容运营)— 真实联调(计划目标群用 QIWEI_ROOM_IDS)"""
  2. import uuid
  3. import pytest
  4. from load_env import load_backend_env
  5. pytestmark = [pytest.mark.integration, pytest.mark.qiwei_live]
  6. @pytest.fixture(scope="module")
  7. def m08_ctx(api_session, live_room_ids):
  8. suffix = uuid.uuid4().hex[:8]
  9. mat = api_session.assert_success(
  10. api_session.post(
  11. "/content/materials",
  12. json={
  13. "title": f"联调话术_{suffix}",
  14. "type": "script",
  15. "content": "真实联调素材内容",
  16. "tags": ["live"],
  17. "creatorId": 1,
  18. },
  19. ),
  20. status=201,
  21. )
  22. plan = api_session.assert_success(
  23. api_session.post(
  24. "/content/plans",
  25. json={
  26. "name": f"联调计划_{suffix}",
  27. "startDate": "2026-05-25",
  28. "endDate": "2026-05-31",
  29. "ownerId": 1,
  30. },
  31. ),
  32. status=201,
  33. )
  34. item = api_session.assert_success(
  35. api_session.post(
  36. f"/content/plans/{plan['id']}/items",
  37. json={
  38. "planId": plan["id"],
  39. "content": "针对真实客户群预告",
  40. "scheduledDate": "2026-05-30",
  41. "targetRoomIds": live_room_ids,
  42. "materialId": mat["id"],
  43. },
  44. ),
  45. status=201,
  46. )
  47. ctx = {
  48. "mat_id": mat["id"],
  49. "plan_id": plan["id"],
  50. "item_id": item["id"],
  51. "room_ids": live_room_ids,
  52. }
  53. yield ctx
  54. api_session.assert_success(api_session.delete(f"/content/materials/{mat['id']}"))
  55. def test_m08_materials_list(api, m08_ctx):
  56. mats = api.assert_success(api.get("/content/materials"))
  57. assert any(m["id"] == m08_ctx["mat_id"] for m in mats)
  58. def test_m08_plan_items(api, m08_ctx):
  59. items = api.assert_success(api.get(f"/content/plans/{m08_ctx['plan_id']}/items"))
  60. assert len(items) >= 1
  61. assert m08_ctx["room_ids"][0] in (items[0].get("targetRoomIds") or [])
  62. def test_m08_plan_execution(api, m08_ctx):
  63. ex = api.assert_success(api.get(f"/content/plans/{m08_ctx['plan_id']}/execution"))
  64. assert isinstance(ex, dict)
  65. def test_m08_broadcasts_list(api):
  66. listed = api.assert_success(api.get("/content/broadcasts"))
  67. assert isinstance(listed, list)
  68. def test_m08_broadcast_real_optional(api, live_guid, m08_ctx):
  69. if load_backend_env().get("QIWEI_LIVE_ALLOW_BROADCAST", "").strip() != "1":
  70. pytest.skip("未开启 QIWEI_LIVE_ALLOW_BROADCAST=1,跳过真实群发")
  71. task = api.assert_success(
  72. api.post(
  73. "/content/broadcasts",
  74. json={
  75. "guid": live_guid,
  76. "sendType": 1,
  77. "toIdList": [m08_ctx["room_ids"][0]],
  78. "msgList": [{"type": 0, "msgData": {"content": "[模块8联调]测试"}}],
  79. },
  80. ),
  81. status=201,
  82. )
  83. status = api.assert_success(api.get(f"/content/broadcasts/{task['id']}"))
  84. assert status.get("groupMsgId") or status.get("id")