test_backend_application.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # -*- coding: utf-8 -*-
  2. import os
  3. from unittest.mock import patch
  4. from oauthlib import signals
  5. from oauthlib.oauth2 import BackendApplicationClient
  6. from tests.unittest import TestCase
  7. @patch('time.time', new=lambda: 1000)
  8. class BackendApplicationClientTest(TestCase):
  9. client_id = "someclientid"
  10. client_secret = 'someclientsecret'
  11. scope = ["/profile"]
  12. kwargs = {
  13. "some": "providers",
  14. "require": "extra arguments"
  15. }
  16. body = "not=empty"
  17. body_up = "not=empty&grant_type=client_credentials"
  18. body_kwargs = body_up + "&some=providers&require=extra+arguments"
  19. token_json = ('{ "access_token":"2YotnFZFEjr1zCsicMWpAA",'
  20. ' "token_type":"example",'
  21. ' "expires_in":3600,'
  22. ' "scope":"/profile",'
  23. ' "example_parameter":"example_value"}')
  24. token = {
  25. "access_token": "2YotnFZFEjr1zCsicMWpAA",
  26. "token_type": "example",
  27. "expires_in": 3600,
  28. "expires_at": 4600,
  29. "scope": ["/profile"],
  30. "example_parameter": "example_value"
  31. }
  32. def test_request_body(self):
  33. client = BackendApplicationClient(self.client_id)
  34. # Basic, no extra arguments
  35. body = client.prepare_request_body(body=self.body)
  36. self.assertFormBodyEqual(body, self.body_up)
  37. rclient = BackendApplicationClient(self.client_id)
  38. body = rclient.prepare_request_body(body=self.body)
  39. self.assertFormBodyEqual(body, self.body_up)
  40. # With extra parameters
  41. body = client.prepare_request_body(body=self.body, **self.kwargs)
  42. self.assertFormBodyEqual(body, self.body_kwargs)
  43. def test_parse_token_response(self):
  44. client = BackendApplicationClient(self.client_id)
  45. # Parse code and state
  46. response = client.parse_request_body_response(self.token_json, scope=self.scope)
  47. self.assertEqual(response, self.token)
  48. self.assertEqual(client.access_token, response.get("access_token"))
  49. self.assertEqual(client.refresh_token, response.get("refresh_token"))
  50. self.assertEqual(client.token_type, response.get("token_type"))
  51. # Mismatching state
  52. self.assertRaises(Warning, client.parse_request_body_response, self.token_json, scope="invalid")
  53. os.environ['OAUTHLIB_RELAX_TOKEN_SCOPE'] = '3'
  54. token = client.parse_request_body_response(self.token_json, scope="invalid")
  55. self.assertTrue(token.scope_changed)
  56. scope_changes_recorded = []
  57. def record_scope_change(sender, message, old, new):
  58. scope_changes_recorded.append((message, old, new))
  59. signals.scope_changed.connect(record_scope_change)
  60. try:
  61. client.parse_request_body_response(self.token_json, scope="invalid")
  62. self.assertEqual(len(scope_changes_recorded), 1)
  63. message, old, new = scope_changes_recorded[0]
  64. self.assertEqual(message, 'Scope has changed from "invalid" to "/profile".')
  65. self.assertEqual(old, ['invalid'])
  66. self.assertEqual(new, ['/profile'])
  67. finally:
  68. signals.scope_changed.disconnect(record_scope_change)
  69. del os.environ['OAUTHLIB_RELAX_TOKEN_SCOPE']