Skip to content

Commit 6c7768a

Browse files
committed
add unittest
1 parent 894e86f commit 6c7768a

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
2+
from django.contrib.auth.models import AnonymousUser
3+
from django.contrib.messages.storage.fallback import FallbackStorage
4+
from django.contrib.sessions.middleware import SessionMiddleware
5+
from django.http import HttpResponse
6+
from django.test import RequestFactory, override_settings
7+
from requests.exceptions import ConnectionError as RequestsConnectionError
8+
9+
from dojo.middleware import CustomSocialAuthExceptionMiddleware
10+
11+
from .dojo_test_case import DojoTestCase
12+
13+
14+
@override_settings(
15+
SOCIAL_AUTH_OIDC_AUTH_ENABLED=True,
16+
SOCIAL_AUTH_AUTH0_OAUTH2_ENABLED=True,
17+
GOOGLE_OAUTH_ENABLED=True,
18+
SOCIAL_AUTH_OKTA_OAUTH2_ENABLED=True,
19+
AZUREAD_TENANT_OAUTH2_ENABLED=True,
20+
GITLAB_OAUTH2_ENABLED=True,
21+
KEYCLOAK_OAUTH2_ENABLED=True,
22+
GITHUB_ENTERPRISE_OAUTH2_ENABLED=True,
23+
)
24+
class TestSocialAuthFailureHandling(DojoTestCase):
25+
26+
def setUp(self):
27+
self.factory = RequestFactory()
28+
self.middleware = CustomSocialAuthExceptionMiddleware(lambda *_: HttpResponse("OK"))
29+
30+
def _prepare_request(self, path):
31+
request = self.factory.get(path)
32+
request.user = AnonymousUser()
33+
SessionMiddleware(lambda *_: None).process_request(request)
34+
request.session.save()
35+
request._messages = FallbackStorage(request)
36+
return request
37+
38+
def test_social_auth_exception_redirects_to_login(self):
39+
login_paths = [
40+
"/login/oidc/",
41+
"/login/auth0/",
42+
"/login/google-oauth2/",
43+
"/login/okta-oauth2/",
44+
"/login/azuread-tenant-oauth2/",
45+
"/login/gitlab/",
46+
"/login/keycloak-oauth2/",
47+
"/login/github/",
48+
]
49+
50+
for path in login_paths:
51+
with self.subTest(path=path):
52+
request = self._prepare_request(path)
53+
response = self.middleware.process_exception(request, RequestsConnectionError("Host unreachable"))
54+
self.assertEqual(response.status_code, 302)
55+
self.assertEqual(response.url, "/login")

0 commit comments

Comments
 (0)