test_04_module_live.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. """
  2. Swagger 模块 4(小区)— 真实联调
  3. 使用 backend/.env 的 QIWEI_ROOM_IDS 绑定真实企微群。
  4. 覆盖 api-docs 中 9 个接口。
  5. """
  6. from __future__ import annotations
  7. import uuid
  8. import pytest
  9. from load_env import load_backend_env
  10. pytestmark = [pytest.mark.integration, pytest.mark.qiwei_live]
  11. @pytest.fixture(scope="module")
  12. def live_community_ctx(api_session, live_guid, live_room_ids):
  13. """创建小区 → 绑定真实 roomId → 结束后清理"""
  14. suffix = uuid.uuid4().hex[:8]
  15. room_id = live_room_ids[0]
  16. api_session.assert_success(
  17. api_session.post(
  18. "/rooms/sync",
  19. json={"guid": live_guid, "roomIdList": live_room_ids},
  20. )
  21. )
  22. community = api_session.assert_success(
  23. api_session.post(
  24. "/communities",
  25. json={
  26. "name": f"联调小区_{suffix}",
  27. "totalHouseholds": 500,
  28. "avgPrice": 30000,
  29. "deliveryYear": 2020,
  30. "storeId": 1,
  31. "address": f"联调路{suffix}号",
  32. },
  33. ),
  34. status=201,
  35. )
  36. cid = community["id"]
  37. binding = api_session.assert_success(
  38. api_session.post(
  39. "/community-room-bindings",
  40. json={"communityId": cid, "roomId": room_id, "storeId": 1},
  41. ),
  42. status=201,
  43. )
  44. ctx = {
  45. "community_id": cid,
  46. "community_name": community["name"],
  47. "binding_id": binding["id"],
  48. "room_id": room_id,
  49. "room_ids": live_room_ids,
  50. }
  51. yield ctx
  52. api_session.assert_success(
  53. api_session.delete(f"/community-room-bindings/{binding['id']}")
  54. )
  55. api_session.assert_success(api_session.delete(f"/communities/{cid}"))
  56. def test_m04_create_community(live_community_ctx):
  57. assert live_community_ctx["community_id"] > 0
  58. def test_m04_list_communities(api, live_community_ctx):
  59. listed = api.assert_success(api.get("/communities"))
  60. assert any(c["id"] == live_community_ctx["community_id"] for c in listed)
  61. def test_m04_community_detail(api, live_community_ctx):
  62. detail = api.assert_success(
  63. api.get(f"/communities/{live_community_ctx['community_id']}")
  64. )
  65. assert detail["name"] == live_community_ctx["community_name"]
  66. def test_m04_bind_real_room(api, live_community_ctx):
  67. assert live_community_ctx["room_id"] in live_community_ctx["room_ids"]
  68. def test_m04_binding_list(api, live_community_ctx):
  69. bindings = api.assert_success(api.get("/community-room-bindings"))
  70. assert any(b["id"] == live_community_ctx["binding_id"] for b in bindings)
  71. hit = next(b for b in bindings if b["id"] == live_community_ctx["binding_id"])
  72. assert hit["roomId"] == live_community_ctx["room_id"]
  73. def test_m04_binding_by_room(api, live_community_ctx):
  74. by_room = api.assert_success(
  75. api.get(f"/community-room-bindings/by-room/{live_community_ctx['room_id']}")
  76. )
  77. assert by_room["communityId"] == live_community_ctx["community_id"]
  78. assert by_room["roomId"] == live_community_ctx["room_id"]
  79. def test_m04_update_community(api, live_community_ctx):
  80. updated = api.assert_success(
  81. api.put(
  82. f"/communities/{live_community_ctx['community_id']}",
  83. json={"remark": "真实联调备注"},
  84. )
  85. )
  86. assert updated["remark"] == "真实联调备注"
  87. def test_m04_second_room_binding_optional(api, live_guid, live_community_ctx):
  88. """若配置了多个 QIWEI_ROOM_IDS,第二个群也可绑定同一小区"""
  89. if len(live_community_ctx["room_ids"]) < 2:
  90. pytest.skip("仅配置了一个 QIWEI_ROOM_IDS")
  91. room2 = live_community_ctx["room_ids"][1]
  92. b2 = api.assert_success(
  93. api.post(
  94. "/community-room-bindings",
  95. json={
  96. "communityId": live_community_ctx["community_id"],
  97. "roomId": room2,
  98. "storeId": 1,
  99. },
  100. ),
  101. status=201,
  102. )
  103. assert b2["roomId"] == room2
  104. api.assert_success(api.delete(f"/community-room-bindings/{b2['id']}"))