test_client.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. from __future__ import absolute_import
  2. import pytest
  3. import responses
  4. from sentry.utils.compat.mock import Mock
  5. from sentry.testutils import TestCase
  6. from sentry.shared_integrations.exceptions import (
  7. ApiError,
  8. ApiHostError,
  9. ApiUnauthorized,
  10. UnsupportedResponseType,
  11. )
  12. from sentry_plugins.client import ApiClient, AuthApiClient
  13. class ApiClientTest(TestCase):
  14. @responses.activate
  15. def test_get(self):
  16. responses.add(responses.GET, "http://example.com", json={})
  17. resp = ApiClient().get("http://example.com")
  18. assert resp.status_code == 200
  19. @responses.activate
  20. def test_post(self):
  21. responses.add(responses.POST, "http://example.com", json={})
  22. resp = ApiClient().post("http://example.com")
  23. assert resp.status_code == 200
  24. @responses.activate
  25. def test_delete(self):
  26. responses.add(responses.DELETE, "http://example.com", json={})
  27. resp = ApiClient().delete("http://example.com")
  28. assert resp.status_code == 200
  29. @responses.activate
  30. def test_put(self):
  31. responses.add(responses.PUT, "http://example.com", json={})
  32. resp = ApiClient().put("http://example.com")
  33. assert resp.status_code == 200
  34. @responses.activate
  35. def test_patch(self):
  36. responses.add(responses.PATCH, "http://example.com", json={})
  37. resp = ApiClient().patch("http://example.com")
  38. assert resp.status_code == 200
  39. class AuthApiClientTest(TestCase):
  40. @responses.activate
  41. def test_without_authorization(self):
  42. responses.add(responses.GET, "http://example.com", json={})
  43. resp = AuthApiClient().get("http://example.com")
  44. assert resp.status_code == 200
  45. request = responses.calls[-1].request
  46. assert not request.headers.get("Authorization")
  47. @responses.activate
  48. def test_with_authorization(self):
  49. responses.add(responses.GET, "http://example.com", json={})
  50. auth = Mock()
  51. auth.tokens = {"access_token": "access-token"}
  52. resp = AuthApiClient(auth=auth).get("http://example.com")
  53. assert resp.status_code == 200
  54. request = responses.calls[-1].request
  55. assert request.headers.get("Authorization") == "Bearer access-token"
  56. @responses.activate
  57. def test_with_authorization_and_no_auth(self):
  58. responses.add(responses.GET, "http://example.com", json={})
  59. auth = Mock()
  60. auth.tokens = {"access_token": "access-token"}
  61. resp = AuthApiClient(auth=auth).get("http://example.com", auth=None)
  62. assert resp.status_code == 200
  63. request = responses.calls[-1].request
  64. assert not request.headers.get("Authorization")
  65. @responses.activate
  66. def test_invalid_host(self):
  67. with pytest.raises(ApiHostError):
  68. AuthApiClient().get("http://example.com")
  69. @responses.activate
  70. def test_unauthorized(self):
  71. responses.add(responses.GET, "http://example.com", status=404)
  72. with pytest.raises(ApiError):
  73. AuthApiClient().get("http://example.com")
  74. @responses.activate
  75. def test_forbidden(self):
  76. responses.add(responses.GET, "http://example.com", status=401)
  77. with pytest.raises(ApiUnauthorized):
  78. AuthApiClient().get("http://example.com")
  79. @responses.activate
  80. def test_invalid_plaintext(self):
  81. responses.add(responses.GET, "http://example.com", body="")
  82. with pytest.raises(UnsupportedResponseType):
  83. AuthApiClient().get("http://example.com")