Skip to content

Commit 9d9d588

Browse files
committed
Unit tests for extended request
1 parent 171c3f3 commit 9d9d588

File tree

1 file changed

+48
-2
lines changed

1 file changed

+48
-2
lines changed

oauth2_provider/tests/test_client_credential.py

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@
22

33
import json
44

5-
from django.test import TestCase, RequestFactory
65
from django.core.urlresolvers import reverse
6+
from django.test import TestCase, RequestFactory
7+
from django.views.generic import View
8+
9+
from oauthlib.oauth2 import BackendApplicationServer
710

811
from ..compat import get_user_model
912
from ..models import Application
13+
from ..oauth2_validators import OAuth2Validator
1014
from ..settings import oauth2_settings
1115
from ..views import ProtectedResourceView
12-
16+
from ..views.mixins import OAuthLibMixin
1317
from .test_utils import TestCaseUtils
1418

1519

@@ -53,6 +57,7 @@ def test_client_credential_access_allowed(self):
5357

5458
response = self.client.post(reverse('token'), data=token_request_data, **auth_headers)
5559
self.assertEqual(response.status_code, 200)
60+
5661
content = json.loads(response.content.decode("utf-8"))
5762
access_token = content['access_token']
5863

@@ -66,3 +71,44 @@ def test_client_credential_access_allowed(self):
6671
view = ResourceView.as_view()
6772
response = view(request)
6873
self.assertEqual(response, "This is a protected resource")
74+
75+
76+
class TestExtendedRequest(BaseTest):
77+
@classmethod
78+
def setUpClass(cls):
79+
cls.request_factory = RequestFactory()
80+
81+
def test_extended_request(self):
82+
class TestView(OAuthLibMixin, View):
83+
server_class = BackendApplicationServer
84+
validator_class = OAuth2Validator
85+
86+
def get_scopes(self):
87+
return ['read', 'write']
88+
89+
token_request_data = {
90+
'grant_type': 'client_credentials',
91+
}
92+
auth_headers = self.get_basic_auth_header(self.application.client_id, self.application.client_secret)
93+
response = self.client.post(reverse('token'), data=token_request_data, **auth_headers)
94+
self.assertEqual(response.status_code, 200)
95+
96+
content = json.loads(response.content.decode("utf-8"))
97+
access_token = content['access_token']
98+
99+
# use token to access the resource
100+
auth_headers = {
101+
'HTTP_AUTHORIZATION': 'Bearer ' + access_token,
102+
}
103+
104+
request = self.request_factory.get("/fake-req", **auth_headers)
105+
request.user = "fake"
106+
107+
test_view = TestView()
108+
self.assertIsInstance(test_view.get_server(), BackendApplicationServer)
109+
110+
valid, r = test_view.verify_request(request)
111+
self.assertTrue(valid)
112+
self.assertEqual(r.user, self.dev_user)
113+
self.assertEqual(r.client, self.application)
114+
self.assertEqual(r.scopes, ['read', 'write'])

0 commit comments

Comments
 (0)