test_02_qiwei.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. """§2 企微 API 代理 — webhook / room-docs / 校验"""
  2. import json
  3. from pathlib import Path
  4. import pytest
  5. pytestmark = pytest.mark.integration
  6. FIXTURE = Path(__file__).parent / "fixtures" / "qiwei_webhook_sample.json"
  7. DOCID = "DOC_TEST_abc123xyz"
  8. def _webhook_payload(uid: str) -> dict:
  9. """每次使用唯一 roomId + timestamp,避免内存去重导致重复跑失败"""
  10. import time
  11. payload = json.loads(FIXTURE.read_text(encoding="utf-8"))
  12. room_id = f"ROOM_TEST_{uid}"
  13. ts = int(time.time())
  14. for i, item in enumerate(payload.get("data", [])):
  15. item["fromRoomId"] = room_id
  16. item["timestamp"] = ts + i
  17. return payload, room_id
  18. def test_webhook_registers_room_doc(api, uid):
  19. payload, room_id = _webhook_payload(uid)
  20. data = api.assert_success(api.post("/qiwei/webhook", json=payload))
  21. assert data["processedCount"] >= 1
  22. assert data["docLinksFound"] >= 1
  23. doc = api.assert_success(api.get("/qiwei/room-docs", params={"roomId": room_id}))
  24. assert doc["docId"] == DOCID
  25. assert doc["roomId"] == room_id
  26. def test_messages_after_webhook(api, uid):
  27. payload, room_id = _webhook_payload(f"msg-{uid}")
  28. api.assert_success(api.post("/qiwei/webhook", json=payload))
  29. msgs = api.assert_success(api.get("/qiwei/messages", params={"roomId": room_id, "limit": 10}))
  30. assert isinstance(msgs, list)
  31. assert len(msgs) >= 1
  32. def test_room_doc_anomalies_list(api):
  33. anomalies = api.assert_success(api.get("/qiwei/room-doc-anomalies"))
  34. assert isinstance(anomalies, list)
  35. def test_proxy_missing_method(api):
  36. api.assert_error(api.post("/qiwei/proxy", json={"params": {}}), 400, "VALIDATION_ERROR")
  37. def test_sync_missing_guid(api):
  38. api.assert_error(api.post("/qiwei/sync", json={"msgSeq": 0}), 400, "VALIDATION_ERROR")
  39. def test_batch_status_missing_guids(api):
  40. api.assert_error(api.post("/qiwei/staff/batch-status", json={}), 400, "VALIDATION_ERROR")
  41. def test_room_docs_not_found(api):
  42. api.assert_error(api.get("/qiwei/room-docs", params={"roomId": "nonexistent-room-xyz"}), 404, "NOT_FOUND")