test_schemas.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from app.models.schemas import VisitRequest, WaitUntilValue, ArasResponse
  2. from pydantic import ValidationError
  3. import pytest
  4. class TestWaitUntilValue:
  5. def test_valid_values(self):
  6. for val in ["load", "domcontentloaded", "networkidle", "commit"]:
  7. assert val in WaitUntilValue.__args__
  8. def test_invalid_value_raises_error(self):
  9. with pytest.raises(ValidationError):
  10. VisitRequest(url="https://example.com", waitUntil="invalid")
  11. class TestVisitRequest:
  12. def test_minimal_request(self):
  13. req = VisitRequest(url="https://example.com")
  14. assert str(req.url) == "https://example.com/"
  15. assert req.screenshot is False
  16. assert req.waitUntil == "load"
  17. assert req.waitTime == 0
  18. assert req.proxy is None
  19. assert req.proxyAuth is None
  20. assert req.incognito is False
  21. def test_full_request(self):
  22. req = VisitRequest(
  23. url="https://example.com",
  24. screenshot=True,
  25. waitUntil="networkidle",
  26. waitTime=10,
  27. proxy="http://proxy:8080",
  28. proxyAuth={"username": "user", "password": "pass"},
  29. incognito=True,
  30. )
  31. assert req.screenshot is True
  32. assert req.waitUntil == "networkidle"
  33. assert req.waitTime == 10
  34. assert req.proxy == "http://proxy:8080"
  35. assert req.proxyAuth["username"] == "user"
  36. assert req.incognito is True
  37. def test_wait_time_negative_rejected(self):
  38. with pytest.raises(ValidationError):
  39. VisitRequest(url="https://example.com", waitTime=-1)
  40. def test_wait_time_above_max_rejected(self):
  41. with pytest.raises(ValidationError):
  42. VisitRequest(url="https://example.com", waitTime=61)
  43. def test_wait_time_boundary_values(self):
  44. # Both 0 and 60 should be valid
  45. VisitRequest(url="https://example.com", waitTime=0)
  46. VisitRequest(url="https://example.com", waitTime=60)
  47. def test_invalid_url_raises_error(self):
  48. with pytest.raises(ValidationError):
  49. VisitRequest(url="not-a-url")
  50. def test_all_waituntil_values(self):
  51. for val in ["load", "domcontentloaded", "networkidle", "commit"]:
  52. req = VisitRequest(url="https://example.com", waitUntil=val)
  53. assert req.waitUntil == val
  54. class TestArasResponse:
  55. def test_minimal_response(self):
  56. resp = ArasResponse(status="OK", message="test", data=None)
  57. assert resp.status == "OK"
  58. assert resp.message == "test"
  59. assert resp.data is None
  60. assert resp.extra is None
  61. assert resp.code == "UNKNOWN_CODE"
  62. def test_full_response(self):
  63. resp = ArasResponse(
  64. status="OK",
  65. message="test",
  66. data={"key": "value"},
  67. extra={"extra": "data"},
  68. code="CUSTOM_CODE",
  69. )
  70. assert resp.data == {"key": "value"}
  71. assert resp.extra == {"extra": "data"}
  72. assert resp.code == "CUSTOM_CODE"