""" Swagger 模块 4(小区)— 真实联调 使用 backend/.env 的 QIWEI_ROOM_IDS 绑定真实企微群。 覆盖 api-docs 中 9 个接口。 """ from __future__ import annotations import uuid import pytest from load_env import load_backend_env pytestmark = [pytest.mark.integration, pytest.mark.qiwei_live] @pytest.fixture(scope="module") def live_community_ctx(api_session, live_guid, live_room_ids): """创建小区 → 绑定真实 roomId → 结束后清理""" suffix = uuid.uuid4().hex[:8] room_id = live_room_ids[0] api_session.assert_success( api_session.post( "/rooms/sync", json={"guid": live_guid, "roomIdList": live_room_ids}, ) ) community = api_session.assert_success( api_session.post( "/communities", json={ "name": f"联调小区_{suffix}", "totalHouseholds": 500, "avgPrice": 30000, "deliveryYear": 2020, "storeId": 1, "address": f"联调路{suffix}号", }, ), status=201, ) cid = community["id"] binding = api_session.assert_success( api_session.post( "/community-room-bindings", json={"communityId": cid, "roomId": room_id, "storeId": 1}, ), status=201, ) ctx = { "community_id": cid, "community_name": community["name"], "binding_id": binding["id"], "room_id": room_id, "room_ids": live_room_ids, } yield ctx api_session.assert_success( api_session.delete(f"/community-room-bindings/{binding['id']}") ) api_session.assert_success(api_session.delete(f"/communities/{cid}")) def test_m04_create_community(live_community_ctx): assert live_community_ctx["community_id"] > 0 def test_m04_list_communities(api, live_community_ctx): listed = api.assert_success(api.get("/communities")) assert any(c["id"] == live_community_ctx["community_id"] for c in listed) def test_m04_community_detail(api, live_community_ctx): detail = api.assert_success( api.get(f"/communities/{live_community_ctx['community_id']}") ) assert detail["name"] == live_community_ctx["community_name"] def test_m04_bind_real_room(api, live_community_ctx): assert live_community_ctx["room_id"] in live_community_ctx["room_ids"] def test_m04_binding_list(api, live_community_ctx): bindings = api.assert_success(api.get("/community-room-bindings")) assert any(b["id"] == live_community_ctx["binding_id"] for b in bindings) hit = next(b for b in bindings if b["id"] == live_community_ctx["binding_id"]) assert hit["roomId"] == live_community_ctx["room_id"] def test_m04_binding_by_room(api, live_community_ctx): by_room = api.assert_success( api.get(f"/community-room-bindings/by-room/{live_community_ctx['room_id']}") ) assert by_room["communityId"] == live_community_ctx["community_id"] assert by_room["roomId"] == live_community_ctx["room_id"] def test_m04_update_community(api, live_community_ctx): updated = api.assert_success( api.put( f"/communities/{live_community_ctx['community_id']}", json={"remark": "真实联调备注"}, ) ) assert updated["remark"] == "真实联调备注" def test_m04_second_room_binding_optional(api, live_guid, live_community_ctx): """若配置了多个 QIWEI_ROOM_IDS,第二个群也可绑定同一小区""" if len(live_community_ctx["room_ids"]) < 2: pytest.skip("仅配置了一个 QIWEI_ROOM_IDS") room2 = live_community_ctx["room_ids"][1] b2 = api.assert_success( api.post( "/community-room-bindings", json={ "communityId": live_community_ctx["community_id"], "roomId": room2, "storeId": 1, }, ), status=201, ) assert b2["roomId"] == room2 api.assert_success(api.delete(f"/community-room-bindings/{b2['id']}"))