test_get_code_grant.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. from unittest.mock import Mock
  2. import pytest
  3. from .. import exceptions
  4. from ..client import SESSION_STATE, get_code_grant
  5. def test_code_grant_is_returned_from_request():
  6. state = "l0r3m1p5um"
  7. code_grant = "valid-code"
  8. request = Mock(
  9. GET={
  10. "state": state,
  11. "code": code_grant,
  12. },
  13. session={SESSION_STATE: state},
  14. )
  15. assert get_code_grant(request) == code_grant
  16. # State was removed from session
  17. assert SESSION_STATE not in request.session
  18. def test_exception_is_raised_if_provider_returned_error():
  19. request = Mock(
  20. GET={"error": "access_denied"},
  21. session={},
  22. )
  23. with pytest.raises(exceptions.OAuth2AccessDeniedError):
  24. get_code_grant(request)
  25. # State was removed from session
  26. assert SESSION_STATE not in request.session
  27. def test_exception_is_raised_if_session_is_missing_state():
  28. state = "l0r3m1p5um"
  29. code_grant = "valid-code"
  30. request = Mock(
  31. GET={
  32. "state": state,
  33. "code": code_grant,
  34. },
  35. session={},
  36. )
  37. with pytest.raises(exceptions.OAuth2StateNotSetError):
  38. get_code_grant(request)
  39. def test_exception_is_raised_if_request_is_missing_state():
  40. state = "l0r3m1p5um"
  41. code_grant = "valid-code"
  42. request = Mock(
  43. GET={
  44. "code": code_grant,
  45. },
  46. session={SESSION_STATE: state},
  47. )
  48. with pytest.raises(exceptions.OAuth2StateNotProvidedError):
  49. get_code_grant(request)
  50. # State was removed from session
  51. assert SESSION_STATE not in request.session
  52. def test_exception_is_raised_if_request_state_is_empty():
  53. state = "l0r3m1p5um"
  54. code_grant = "valid-code"
  55. request = Mock(
  56. GET={
  57. "state": "",
  58. "code": code_grant,
  59. },
  60. session={SESSION_STATE: state},
  61. )
  62. with pytest.raises(exceptions.OAuth2StateNotProvidedError):
  63. get_code_grant(request)
  64. # State was removed from session
  65. assert SESSION_STATE not in request.session
  66. def test_exception_is_raised_if_session_state_doesnt_match_with_request():
  67. state = "l0r3m1p5um"
  68. code_grant = "valid-code"
  69. request = Mock(
  70. GET={
  71. "state": "invalid",
  72. "code": code_grant,
  73. },
  74. session={SESSION_STATE: state},
  75. )
  76. with pytest.raises(exceptions.OAuth2StateMismatchError):
  77. get_code_grant(request)
  78. # State was removed from session
  79. assert SESSION_STATE not in request.session
  80. def test_exception_is_raised_if_request_is_missing_code_grant():
  81. state = "l0r3m1p5um"
  82. request = Mock(
  83. GET={
  84. "state": state,
  85. },
  86. session={SESSION_STATE: state},
  87. )
  88. with pytest.raises(exceptions.OAuth2CodeNotProvidedError):
  89. get_code_grant(request)
  90. # State was removed from session
  91. assert SESSION_STATE not in request.session
  92. def test_exception_is_raised_if_request_code_grant_is_empty():
  93. state = "l0r3m1p5um"
  94. request = Mock(
  95. GET={
  96. "code": "",
  97. "state": state,
  98. },
  99. session={SESSION_STATE: state},
  100. )
  101. with pytest.raises(exceptions.OAuth2CodeNotProvidedError):
  102. get_code_grant(request)
  103. # State was removed from session
  104. assert SESSION_STATE not in request.session