Skip to content

Commit d08d2da

Browse files
committed
More tests for improved test coverage
1 parent 443a035 commit d08d2da

File tree

3 files changed

+51
-9
lines changed

3 files changed

+51
-9
lines changed

tests/test_django_checks.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
from copy import deepcopy
2+
13
from django.core.management import call_command
24
from django.core.management.base import SystemCheckError
35
from django.test import override_settings
46

57
from .common_testing import OAuth2ProviderTestCase as TestCase
8+
from .presets import OIDC_SETTINGS_SESSION_MANAGEMENT
9+
10+
MISSING_DEFAULT_SESSION_KEY = deepcopy(OIDC_SETTINGS_SESSION_MANAGEMENT)
11+
MISSING_DEFAULT_SESSION_KEY["OIDC_SESSION_MANAGEMENT_DEFAULT_SESSION_KEY"] = None
612

713

814
class DjangoChecksTestCase(TestCase):
@@ -18,3 +24,11 @@ def test_checks_fail_when_router_crosses_databases(self):
1824
message = "The token models are expected to be stored in the same database."
1925
with self.assertRaisesMessage(SystemCheckError, message):
2026
call_command("check")
27+
28+
@override_settings(OAUTH2_PROVIDER=MISSING_DEFAULT_SESSION_KEY)
29+
def test_checks_fail_when_default_session_key_is_missing(self):
30+
message = (
31+
"OIDC Session management is enabled, OIDC_SESSION_MANAGEMENT_DEFAULT_SESSION_KEY is required."
32+
)
33+
with self.assertRaisesMessage(SystemCheckError, message):
34+
call_command("check")

tests/test_oidc_views.py

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@
2020
)
2121
from oauth2_provider.oauth2_validators import OAuth2Validator
2222
from oauth2_provider.settings import oauth2_settings
23-
from oauth2_provider.views.oidc import RPInitiatedLogoutView, _load_id_token, _validate_claims
23+
from oauth2_provider.views.oidc import (
24+
RPInitiatedLogoutView,
25+
SessionIFrameView,
26+
_load_id_token,
27+
_validate_claims,
28+
)
2429

2530
from . import presets
2631
from .common_testing import OAuth2ProviderTestCase as TestCase
@@ -116,6 +121,13 @@ def test_get_connect_discovery_info_with_rp_logout(self):
116121
self.oauth2_settings.OIDC_RP_INITIATED_LOGOUT_ENABLED = True
117122
self.expect_json_response_with_rp_logout(self.oauth2_settings.OIDC_ISS_ENDPOINT)
118123

124+
def test_get_session_manangement_iframe_endpoint(self):
125+
self.oauth2_settings.OIDC_SESSION_MANAGEMENT_ENABLED = True
126+
response = self.client.get(reverse("oauth2_provider:oidc-connect-discovery-info"))
127+
self.assertEqual(response.status_code, 200)
128+
response_data = response.json()
129+
self.assertIn("check_session_iframe", response_data.keys())
130+
119131
def test_get_connect_discovery_info_without_issuer_url(self):
120132
self.oauth2_settings.OIDC_ISS_ENDPOINT = None
121133
self.oauth2_settings.OIDC_USERINFO_ENDPOINT = None
@@ -216,29 +228,31 @@ def test_get_jwks_info_multiple_rsa_keys(self):
216228

217229
@pytest.mark.usefixtures("oauth2_settings")
218230
@pytest.mark.oauth2_settings(presets.OIDC_SETTINGS_SESSION_MANAGEMENT)
219-
class TestAuthorizationView(TestCase):
220-
def test_session_state_is_present_in_url(self):
231+
class TestSessionManagement(TestCase):
232+
def setUp(self):
221233
User = get_user_model()
222234
Application = get_application_model()
223235

224-
User.objects.create_user("test_user", "[email protected]", "123456")
225-
dev_user = User.objects.create_user("dev_user", "[email protected]", "123456")
236+
self.user = User.objects.create_user("test_user", "[email protected]", "123456")
237+
self.developer = User.objects.create_user("dev_user", "[email protected]", "123456")
226238

227-
application = Application.objects.create(
239+
self.application = Application.objects.create(
228240
name="Test Application",
229241
redirect_uris=(
230242
"http://localhost http://example.com http://example.org custom-scheme://example.com"
231243
),
232-
user=dev_user,
244+
user=self.developer,
233245
client_type=Application.CLIENT_CONFIDENTIAL,
234246
authorization_grant_type=Application.GRANT_AUTHORIZATION_CODE,
235247
client_secret="1234567890qwertyuiop",
236248
)
249+
250+
def test_session_state_is_present_in_authorization(self):
237251
self.client.login(username="test_user", password="123456")
238252
response = self.client.post(
239253
reverse("oauth2_provider:authorize"),
240254
{
241-
"client_id": application.client_id,
255+
"client_id": self.application.client_id,
242256
"response_type": "code",
243257
"state": "random_state_string",
244258
"scope": "read write",
@@ -247,7 +261,16 @@ def test_session_state_is_present_in_url(self):
247261
},
248262
)
249263
self.assertEqual(response.status_code, 302)
250-
self.assertTrue("session_state" in response["Location"])
264+
self.assertIn("session_state", response["Location"])
265+
266+
def test_cookie_name_is_included_in_iframe_endpoint(self):
267+
request = RequestFactory().get(reverse("oauth2_provider:session-iframe"))
268+
request.user = self.user
269+
view = SessionIFrameView()
270+
view.setup(request)
271+
context = view.get_context_data()
272+
self.assertIn("cookie_name", context)
273+
self.assertEqual(context["cookie_name"], "oidc_ua_agent_state")
251274

252275

253276
def mock_request():

tests/test_session_management.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ class TestOIDCSessionManagementMiddleware(TestCase):
2222
def setUp(self):
2323
User.objects.create_user("test_user", "[email protected]", "123456")
2424

25+
def test_response_is_intact_if_session_management_is_disabled(self):
26+
self.oauth2_settings.OIDC_SESSION_MANAGEMENT_ENABLED = False
27+
response = self.client.get("/a-resource")
28+
self.assertFalse("oidc-session-test" in response.cookies.keys())
29+
2530
def test_session_cookie_is_set_for_logged_users(self):
2631
self.client.login(username="test_user", password="123456")
2732
response = self.client.get("/a-resource")

0 commit comments

Comments
 (0)