test_openai_http_client.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import json
  2. from platforms.chatgpt.http_client import OpenAIHTTPClient
  3. class FakeResponse:
  4. def __init__(self, status_code: int, payload: dict[str, object]) -> None:
  5. self.status_code = status_code
  6. self._payload = payload
  7. def json(self) -> dict[str, object]:
  8. return self._payload
  9. def test_check_sentinel_caches_pow_payload(monkeypatch) -> None:
  10. sent_requests: list[dict[str, object]] = []
  11. def fake_post(self, url, **kwargs): # type: ignore[no-untyped-def]
  12. sent_requests.append({"url": url, **kwargs})
  13. return FakeResponse(
  14. 200,
  15. {
  16. "token": "sentinel-token",
  17. "proofofwork": {
  18. "required": True,
  19. "seed": "seed-123",
  20. "difficulty": "ffffffff",
  21. },
  22. },
  23. )
  24. monkeypatch.setattr(OpenAIHTTPClient, "post", fake_post)
  25. client = OpenAIHTTPClient()
  26. token = client.check_sentinel("did-123", flow="authorize_continue")
  27. header = json.loads(
  28. client.build_sentinel_header(
  29. device_id="did-123",
  30. flow="authorize_continue",
  31. token=token or "",
  32. )
  33. )
  34. assert token == "sentinel-token"
  35. assert sent_requests[0]["headers"]["sec-ch-ua-platform"] == '"Windows"'
  36. assert header["c"] == "sentinel-token"
  37. assert header["p"].startswith("gAAAAAB")
  38. assert header["flow"] == "authorize_continue"
  39. def test_check_sentinel_uses_requirements_token_when_pow_not_required(monkeypatch) -> None:
  40. def fake_post(self, url, **kwargs): # type: ignore[no-untyped-def]
  41. del url
  42. return FakeResponse(200, {"token": "sentinel-token", "proofofwork": {"required": False}})
  43. monkeypatch.setattr(OpenAIHTTPClient, "post", fake_post)
  44. client = OpenAIHTTPClient()
  45. token = client.check_sentinel("did-456", flow="password_verify")
  46. header = json.loads(
  47. client.build_sentinel_header(
  48. device_id="did-456",
  49. flow="password_verify",
  50. token=token or "",
  51. )
  52. )
  53. assert token == "sentinel-token"
  54. assert header["p"].startswith("gAAAAAC")
  55. assert header["flow"] == "password_verify"