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
71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
# pylint: disable=missing-docstring
|
|
from django.core.urlresolvers import reverse
|
|
from django.test import TestCase
|
|
import mock
|
|
from edx_oauth2_provider.tests.factories import AccessTokenFactory, ClientFactory
|
|
|
|
from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin
|
|
from student.tests.factories import UserFactory
|
|
|
|
|
|
class IssueProgramCertificatesViewTests(TestCase, ProgramsApiConfigMixin):
|
|
password = 'password'
|
|
|
|
def setUp(self):
|
|
super(IssueProgramCertificatesViewTests, self).setUp()
|
|
|
|
self.create_programs_config()
|
|
|
|
self.path = reverse('support:programs-certify')
|
|
self.user = UserFactory(password=self.password, is_staff=True)
|
|
self.data = {'username': self.user.username}
|
|
self.headers = {}
|
|
|
|
self.client.login(username=self.user.username, password=self.password)
|
|
|
|
def _verify_response(self, status_code):
|
|
"""Verify that the endpoint returns the provided status code and enqueues the task if appropriate."""
|
|
with mock.patch('lms.djangoapps.support.views.programs.award_program_certificates.delay') as mock_task:
|
|
response = self.client.post(self.path, self.data, **self.headers)
|
|
|
|
self.assertEqual(response.status_code, status_code)
|
|
self.assertEqual(status_code == 200, mock_task.called)
|
|
|
|
def test_authentication_required(self):
|
|
"""Verify that the endpoint requires authentication."""
|
|
self.client.logout()
|
|
|
|
self._verify_response(403)
|
|
|
|
def test_session_auth(self):
|
|
"""Verify that the endpoint supports session auth."""
|
|
self._verify_response(200)
|
|
|
|
def test_oauth(self):
|
|
"""Verify that the endpoint supports OAuth 2.0."""
|
|
access_token = AccessTokenFactory(user=self.user, client=ClientFactory()).token # pylint: disable=no-member
|
|
self.headers['HTTP_AUTHORIZATION'] = 'Bearer ' + access_token
|
|
|
|
self.client.logout()
|
|
|
|
self._verify_response(200)
|
|
|
|
def test_staff_permissions_required(self):
|
|
"""Verify that staff permissions are required to access the endpoint."""
|
|
self.user.is_staff = False
|
|
self.user.save() # pylint: disable=no-member
|
|
|
|
self._verify_response(403)
|
|
|
|
def test_certification_disabled(self):
|
|
"""Verify that the endpoint returns a 400 when program certification is disabled."""
|
|
self.create_programs_config(enable_certification=False)
|
|
|
|
self._verify_response(400)
|
|
|
|
def test_username_required(self):
|
|
"""Verify that the endpoint returns a 400 when a username isn't provided."""
|
|
self.data.pop('username')
|
|
|
|
self._verify_response(400)
|