test_sso_sync_api.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import jwt
  2. from django.contrib.auth import get_user_model
  3. from django.urls import reverse
  4. from ...conf.test import override_dynamic_settings
  5. from .utils import TEST_SSO_SETTINGS
  6. User = get_user_model()
  7. api_link = reverse("simple-sso-sync")
  8. @override_dynamic_settings(enable_sso=False)
  9. def test_sso_api_returns_404_if_sso_is_disabled(db, client):
  10. response = client.post(api_link)
  11. assert response.status_code == 404
  12. @override_dynamic_settings(**TEST_SSO_SETTINGS)
  13. def test_sso_api_returns_400_if_api_request_is_missing_access_token(db, client):
  14. response = client.post(api_link)
  15. assert response.status_code == 400
  16. @override_dynamic_settings(**TEST_SSO_SETTINGS)
  17. def test_sso_api_returns_400_if_access_token_is_invalid(db, client):
  18. response = client.post(api_link, {"access_token": "invalid"})
  19. assert response.status_code == 400
  20. @override_dynamic_settings(**TEST_SSO_SETTINGS)
  21. def test_sso_api_returns_400_if_user_data_in_token_is_invalid(db, client):
  22. token = jwt.encode(
  23. {"username": "jkowalski", "email": "jkowalski@example.com"},
  24. TEST_SSO_SETTINGS["sso_private_key"],
  25. algorithm="HS256",
  26. ).decode("ascii")
  27. response = client.post(api_link, {"access_token": token})
  28. assert response.status_code == 400
  29. @override_dynamic_settings(**TEST_SSO_SETTINGS)
  30. def test_sso_api_creates_user_account_if_user_data_is_valid(db, client):
  31. token = jwt.encode(
  32. {"id": 1, "username": "jkowalski", "email": "jkowalski@example.com"},
  33. TEST_SSO_SETTINGS["sso_private_key"],
  34. algorithm="HS256",
  35. ).decode("ascii")
  36. response = client.post(api_link, {"access_token": token})
  37. assert response.status_code == 200
  38. user = User.objects.get(sso_id=1)
  39. assert user.username == "jkowalski"
  40. assert user.email == "jkowalski@example.com"
  41. @override_dynamic_settings(**TEST_SSO_SETTINGS)
  42. def test_sso_api_returns_user_id_if_user_data_is_valid(db, client):
  43. token = jwt.encode(
  44. {"id": 1, "username": "jkowalski", "email": "jkowalski@example.com"},
  45. TEST_SSO_SETTINGS["sso_private_key"],
  46. algorithm="HS256",
  47. ).decode("ascii")
  48. response = client.post(api_link, {"access_token": token})
  49. user = User.objects.get(sso_id=1)
  50. assert response.json() == {"id": user.pk}