test_wx_qr_session.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. """wx_qr_session 状态机与一次性消费。"""
  2. import time
  3. from app.services import wx_qr_session as s
  4. def setup_function():
  5. s._memory_clear_for_tests()
  6. def test_create_pending_and_get():
  7. sid, short = s.create_session(ttl_sec=60)
  8. assert sid and short and len(short) <= 32
  9. data = s.get_session(sid)
  10. assert data["status"] == "pending"
  11. assert s.resolve_session_id(short) == sid
  12. def test_mark_scanned():
  13. sid, _ = s.create_session(ttl_sec=60)
  14. assert s.mark_scanned(sid) is True
  15. assert s.get_session(sid)["status"] == "scanned"
  16. def test_mark_success_consume_once():
  17. sid, _ = s.create_session(ttl_sec=60)
  18. payload = {"token": "t", "refreshToken": "r", "expiresIn": 1, "userInfo": {}}
  19. assert s.mark_success(sid, payload) is True
  20. first = s.consume_success(sid)
  21. assert first["token"] == "t"
  22. assert s.consume_success(sid) is None
  23. assert s.get_session(sid)["status"] == "consumed"
  24. def test_mark_failed():
  25. sid, _ = s.create_session(ttl_sec=60)
  26. assert s.mark_failed(sid, "未找到员工") is True
  27. assert s.get_session(sid)["status"] == "failed"
  28. assert s.get_session(sid)["message"] == "未找到员工"
  29. def test_expire_old_session():
  30. sid, _ = s.create_session(ttl_sec=1)
  31. time.sleep(1.1)
  32. data = s.get_session(sid)
  33. assert data is None or data["status"] == "expired"
  34. def test_invalidate():
  35. sid, _ = s.create_session(ttl_sec=60)
  36. s.invalidate(sid)
  37. data = s.get_session(sid)
  38. assert data is None or data["status"] == "expired"