Available backends: * django-oauth-toolkit (DOT) * django-oauth2-provider (DOP) * Use provided client ID to select backend for * AccessToken requests * third party auth-token exchange * Create adapters to isolate library-dependent functionality * Handle django-oauth-toolkit tokens in edX DRF authenticator class MA-1998 MA-2000
77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
"""
|
|
Tests for DOT Adapter
|
|
"""
|
|
|
|
from datetime import timedelta
|
|
|
|
import ddt
|
|
from django.test import TestCase
|
|
from django.utils.timezone import now
|
|
from oauth2_provider import models
|
|
|
|
from student.tests.factories import UserFactory
|
|
|
|
from ..adapters import DOTAdapter
|
|
from .constants import DUMMY_REDIRECT_URL
|
|
|
|
|
|
@ddt.ddt
|
|
class DOTAdapterTestCase(TestCase):
|
|
"""
|
|
Test class for DOTAdapter.
|
|
"""
|
|
|
|
adapter = DOTAdapter()
|
|
|
|
def setUp(self):
|
|
super(DOTAdapterTestCase, self).setUp()
|
|
self.user = UserFactory()
|
|
self.public_client = self.adapter.create_public_client(
|
|
name='public app',
|
|
user=self.user,
|
|
redirect_uri=DUMMY_REDIRECT_URL,
|
|
client_id='public-client-id',
|
|
)
|
|
self.confidential_client = self.adapter.create_confidential_client(
|
|
name='confidential app',
|
|
user=self.user,
|
|
redirect_uri=DUMMY_REDIRECT_URL,
|
|
client_id='confidential-client-id',
|
|
)
|
|
|
|
@ddt.data(
|
|
('confidential', models.Application.CLIENT_CONFIDENTIAL),
|
|
('public', models.Application.CLIENT_PUBLIC),
|
|
)
|
|
@ddt.unpack
|
|
def test_create_client(self, client_name, client_type):
|
|
client = getattr(self, '{}_client'.format(client_name))
|
|
self.assertIsInstance(client, models.Application)
|
|
self.assertEqual(client.client_id, '{}-client-id'.format(client_name))
|
|
self.assertEqual(client.client_type, client_type)
|
|
|
|
def test_get_client(self):
|
|
client = self.adapter.get_client(client_type=models.Application.CLIENT_CONFIDENTIAL)
|
|
self.assertIsInstance(client, models.Application)
|
|
self.assertEqual(client.client_type, models.Application.CLIENT_CONFIDENTIAL)
|
|
|
|
def test_get_client_not_found(self):
|
|
with self.assertRaises(models.Application.DoesNotExist):
|
|
self.adapter.get_client(client_id='not-found')
|
|
|
|
def test_get_client_for_token(self):
|
|
token = models.AccessToken(
|
|
user=self.user,
|
|
application=self.public_client,
|
|
)
|
|
self.assertEqual(self.adapter.get_client_for_token(token), self.public_client)
|
|
|
|
def test_get_access_token(self):
|
|
token = models.AccessToken.objects.create(
|
|
token='token-id',
|
|
application=self.public_client,
|
|
user=self.user,
|
|
expires=now() + timedelta(days=30),
|
|
)
|
|
self.assertEqual(self.adapter.get_access_token(token_string='token-id'), token)
|