From 86594973ff94a7cb2367589050e22373dca4af1d Mon Sep 17 00:00:00 2001 From: Livio Bieri Date: Tue, 7 Nov 2023 16:46:44 +0100 Subject: [PATCH] wip: adds a walking skeleton test for SSO Authorize callback --- server/vbv_lernwelt/sso/tests/__init__.py | 0 .../sso/tests/test_sso_authorize.py | 37 +++++++++++++++++++ server/vbv_lernwelt/sso/views.py | 4 ++ 3 files changed, 41 insertions(+) create mode 100644 server/vbv_lernwelt/sso/tests/__init__.py create mode 100644 server/vbv_lernwelt/sso/tests/test_sso_authorize.py diff --git a/server/vbv_lernwelt/sso/tests/__init__.py b/server/vbv_lernwelt/sso/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/server/vbv_lernwelt/sso/tests/test_sso_authorize.py b/server/vbv_lernwelt/sso/tests/test_sso_authorize.py new file mode 100644 index 00000000..19c9a275 --- /dev/null +++ b/server/vbv_lernwelt/sso/tests/test_sso_authorize.py @@ -0,0 +1,37 @@ +import uuid +from unittest.mock import patch + +from django.test import TestCase +from django.urls import reverse + +from vbv_lernwelt.core.models import User + + +class TestSSO(TestCase): + def test_walking_skeleton(self): + self.assertTrue(True) + + @patch("vbv_lernwelt.sso.views.oauth") + @patch("vbv_lernwelt.sso.views.decode_jwt") + def test_authorize_redirects_on_success(self, mock_decode_jwt, mock_oauth_service): + # GIVEN + email = "bobby@drop.table" + + mock_oauth_service.authorize_access_token.return_value = { + "id_token": "test_token" + } + + mock_decode_jwt.return_value = { + "emails": [email], + "oid": uuid.uuid4(), + "given_name": "Bobby", + "family_name": "Drop-Table", + } + + # WHEN + response = self.client.get(reverse("sso:authorize")) + + # THEN + self.assertTrue(User.objects.filter(email=email).exists()) + self.assertEqual(response.status_code, 302) + self.assertEqual(response.url, "/") diff --git a/server/vbv_lernwelt/sso/views.py b/server/vbv_lernwelt/sso/views.py index 957a1b8e..8915ae7f 100644 --- a/server/vbv_lernwelt/sso/views.py +++ b/server/vbv_lernwelt/sso/views.py @@ -22,6 +22,10 @@ def login(request): def authorize(request): + print("authorize") + print(oauth) + print(decode_jwt) + try: logger.debug(request, label="sso") token = getattr(oauth, settings.OAUTH["client_name"]).authorize_access_token(