Skip to content

Commit 3a9769b

Browse files
author
Massimiliano Pippi
committed
tests for backend and middleware
1 parent 9b1a5f9 commit 3a9769b

File tree

2 files changed

+115
-0
lines changed

2 files changed

+115
-0
lines changed

oauth2_provider/tests/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@
1111
from .test_application_views import *
1212
from .test_decorators import *
1313
from .test_oauth2_backends import *
14+
15+
from .test_auth_backends import *
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
from django.test import TestCase, RequestFactory
2+
from django.test.utils import override_settings
3+
from django.contrib.auth import get_user_model
4+
from django.contrib.auth.models import AnonymousUser
5+
from django.utils.timezone import now, timedelta
6+
from django.conf.global_settings import MIDDLEWARE_CLASSES
7+
8+
from ..models import get_application_model
9+
from ..models import AccessToken
10+
from ..backends import OAuth2Backend
11+
from ..middleware import OAuth2TokenMiddleware
12+
13+
UserModel = get_user_model()
14+
ApplicationModel = get_application_model()
15+
16+
17+
class BaseTest(TestCase):
18+
"""
19+
Base class for cases in this module
20+
"""
21+
def setUp(self):
22+
self.user = UserModel.objects.create_user("user", "[email protected]", "123456")
23+
self.app = ApplicationModel.objects.create(
24+
name='app',
25+
client_type=ApplicationModel.CLIENT_CONFIDENTIAL,
26+
authorization_grant_type=ApplicationModel.GRANT_CLIENT_CREDENTIALS,
27+
user=self.user
28+
)
29+
self.token = AccessToken.objects.create(user=self.user,
30+
token='tokstr',
31+
application=self.app,
32+
expires=now() + timedelta(days=365))
33+
self.factory = RequestFactory()
34+
35+
def tearDown(self):
36+
self.user.delete()
37+
self.app.delete()
38+
self.token.delete()
39+
40+
41+
class TestOAuth2Backend(BaseTest):
42+
43+
def test_authenticate(self):
44+
auth_headers = {
45+
'HTTP_AUTHORIZATION': 'Bearer ' + 'tokstr',
46+
}
47+
request = self.factory.get("/a-resource", **auth_headers)
48+
49+
backend = OAuth2Backend()
50+
credentials = {'request': request}
51+
u = backend.authenticate(**credentials)
52+
self.assertEqual(u, self.user)
53+
54+
def test_authenticate_fail(self):
55+
auth_headers = {
56+
'HTTP_AUTHORIZATION': 'Bearer ' + 'badstring',
57+
}
58+
request = self.factory.get("/a-resource", **auth_headers)
59+
60+
backend = OAuth2Backend()
61+
credentials = {'request': request}
62+
self.assertIsNone(backend.authenticate(**credentials))
63+
64+
credentials = {'username': 'u', 'password': 'p'}
65+
self.assertIsNone(backend.authenticate(**credentials))
66+
67+
def test_get_user(self):
68+
backend = OAuth2Backend()
69+
self.assertEqual(self.user, backend.get_user(self.user.pk))
70+
71+
72+
@override_settings(
73+
AUTHENTICATION_BACKENDS=(
74+
'oauth2_provider.backends.OAuth2Backend',
75+
'django.contrib.auth.backends.ModelBackend',
76+
),
77+
MIDDLEWARE_CLASSES=MIDDLEWARE_CLASSES+('oauth2_provider.middleware.OAuth2TokenMiddleware',)
78+
)
79+
class TestOAuth2Middleware(BaseTest):
80+
81+
def setUp(self):
82+
super(TestOAuth2Middleware, self).setUp()
83+
self.anon_user = AnonymousUser()
84+
85+
def test_middleware_wrong_headers(self):
86+
m = OAuth2TokenMiddleware()
87+
request = self.factory.get("/a-resource")
88+
self.assertIsNone(m.process_request(request))
89+
auth_headers = {
90+
'HTTP_AUTHORIZATION': 'Beerer ' + 'badstring', # a Beer token for you!
91+
}
92+
request = self.factory.get("/a-resource", **auth_headers)
93+
self.assertIsNone(m.process_request(request))
94+
95+
def test_middleware_user_is_set(self):
96+
m = OAuth2TokenMiddleware()
97+
auth_headers = {
98+
'HTTP_AUTHORIZATION': 'Bearer ' + 'tokstr',
99+
}
100+
request = self.factory.get("/a-resource", **auth_headers)
101+
request.user = self.user
102+
self.assertIsNone(m.process_request(request))
103+
request.user = self.anon_user
104+
self.assertIsNone(m.process_request(request))
105+
106+
def test_middleware_success(self):
107+
m = OAuth2TokenMiddleware()
108+
auth_headers = {
109+
'HTTP_AUTHORIZATION': 'Bearer ' + 'tokstr',
110+
}
111+
request = self.factory.get("/a-resource", **auth_headers)
112+
m.process_request(request)
113+
self.assertEqual(request.user, self.user)

0 commit comments

Comments
 (0)