| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- """§2 企微 API 代理 — webhook / room-docs / 校验"""
- import json
- from pathlib import Path
- import pytest
- pytestmark = pytest.mark.integration
- FIXTURE = Path(__file__).parent / "fixtures" / "qiwei_webhook_sample.json"
- DOCID = "DOC_TEST_abc123xyz"
- def _webhook_payload(uid: str) -> dict:
- """每次使用唯一 roomId + timestamp,避免内存去重导致重复跑失败"""
- import time
- payload = json.loads(FIXTURE.read_text(encoding="utf-8"))
- room_id = f"ROOM_TEST_{uid}"
- ts = int(time.time())
- for i, item in enumerate(payload.get("data", [])):
- item["fromRoomId"] = room_id
- item["timestamp"] = ts + i
- return payload, room_id
- def test_webhook_registers_room_doc(api, uid):
- payload, room_id = _webhook_payload(uid)
- data = api.assert_success(api.post("/qiwei/webhook", json=payload))
- assert data["processedCount"] >= 1
- assert data["docLinksFound"] >= 1
- doc = api.assert_success(api.get("/qiwei/room-docs", params={"roomId": room_id}))
- assert doc["docId"] == DOCID
- assert doc["roomId"] == room_id
- def test_messages_after_webhook(api, uid):
- payload, room_id = _webhook_payload(f"msg-{uid}")
- api.assert_success(api.post("/qiwei/webhook", json=payload))
- msgs = api.assert_success(api.get("/qiwei/messages", params={"roomId": room_id, "limit": 10}))
- assert isinstance(msgs, list)
- assert len(msgs) >= 1
- def test_room_doc_anomalies_list(api):
- anomalies = api.assert_success(api.get("/qiwei/room-doc-anomalies"))
- assert isinstance(anomalies, list)
- def test_proxy_missing_method(api):
- api.assert_error(api.post("/qiwei/proxy", json={"params": {}}), 400, "VALIDATION_ERROR")
- def test_sync_missing_guid(api):
- api.assert_error(api.post("/qiwei/sync", json={"msgSeq": 0}), 400, "VALIDATION_ERROR")
- def test_batch_status_missing_guids(api):
- api.assert_error(api.post("/qiwei/staff/batch-status", json={}), 400, "VALIDATION_ERROR")
- def test_room_docs_not_found(api):
- api.assert_error(api.get("/qiwei/room-docs", params={"roomId": "nonexistent-room-xyz"}), 404, "NOT_FOUND")
|