fixes for front end saml work and to align with data requirements.
This commit is contained in:
@@ -11,7 +11,7 @@ from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
from enterprise.models import EnterpriseCustomer, EnterpriseCustomerIdentityProvider
|
||||
from enterprise.constants import ENTERPRISE_ADMIN_ROLE
|
||||
from enterprise.constants import ENTERPRISE_ADMIN_ROLE, ENTERPRISE_LEARNER_ROLE
|
||||
|
||||
from third_party_auth.tests import testutil
|
||||
from third_party_auth.models import SAMLProviderData, SAMLProviderConfig
|
||||
@@ -39,6 +39,7 @@ SINGLE_PROVIDER_DATA_2['entity_id'] = 'http://entity-id-2'
|
||||
SINGLE_PROVIDER_DATA_2['sso_url'] = 'http://test2.url'
|
||||
|
||||
ENTERPRISE_ID = str(uuid4())
|
||||
BAD_ENTERPRISE_ID = str(uuid4())
|
||||
|
||||
|
||||
@unittest.skipUnless(testutil.AUTH_FEATURE_ENABLED, testutil.AUTH_FEATURES_KEY + ' not enabled')
|
||||
@@ -67,7 +68,7 @@ class SAMLProviderDataTests(APITestCase):
|
||||
fetched_at=SINGLE_PROVIDER_DATA['fetched_at']
|
||||
)
|
||||
cls.enterprise_customer_idp, _ = EnterpriseCustomerIdentityProvider.objects.get_or_create(
|
||||
provider_id=cls.saml_provider_config.id,
|
||||
provider_id=cls.saml_provider_config.slug,
|
||||
enterprise_customer_id=ENTERPRISE_ID
|
||||
)
|
||||
|
||||
@@ -141,12 +142,12 @@ class SAMLProviderDataTests(APITestCase):
|
||||
|
||||
def test_delete_one_provider_data(self):
|
||||
# DELETE auth/saml/v0/providerdata/ -d data
|
||||
url = reverse('saml_provider_data-detail', kwargs={'pk': self.saml_provider_data.id})
|
||||
data = {}
|
||||
data['enterprise_customer_uuid'] = ENTERPRISE_ID
|
||||
url_base = reverse('saml_provider_data-detail', kwargs={'pk': self.saml_provider_data.id})
|
||||
query_kwargs = {'enterprise_customer_uuid': ENTERPRISE_ID}
|
||||
url = '{}?{}'.format(url_base, urlencode(query_kwargs))
|
||||
orig_count = SAMLProviderData.objects.count()
|
||||
|
||||
response = self.client.delete(url, data)
|
||||
response = self.client.delete(url)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
|
||||
self.assertEqual(SAMLProviderData.objects.count(), orig_count - 1)
|
||||
@@ -154,3 +155,29 @@ class SAMLProviderDataTests(APITestCase):
|
||||
# ensure only the sso_url was updated
|
||||
query_set_count = SAMLProviderData.objects.filter(pk=self.saml_provider_data.id).count()
|
||||
self.assertEqual(query_set_count, 0)
|
||||
|
||||
def test_get_one_provider_data_failure(self):
|
||||
set_jwt_cookie(self.client, self.user, [(ENTERPRISE_ADMIN_ROLE, BAD_ENTERPRISE_ID)])
|
||||
self.client.force_authenticate(user=self.user)
|
||||
url_base = reverse('saml_provider_data-list')
|
||||
query_kwargs = {'enterprise_customer_uuid': BAD_ENTERPRISE_ID}
|
||||
url = '{}?{}'.format(url_base, urlencode(query_kwargs))
|
||||
|
||||
response = self.client.get(url, format='json')
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||
|
||||
def test_unauthenticated_request_is_forbidden(self):
|
||||
self.client.logout()
|
||||
urlbase = reverse('saml_provider_data-list')
|
||||
query_kwargs = {'enterprise_customer_uuid': ENTERPRISE_ID}
|
||||
url = '{}?{}'.format(urlbase, urlencode(query_kwargs))
|
||||
set_jwt_cookie(self.client, self.user, [(ENTERPRISE_LEARNER_ROLE, ENTERPRISE_ID)])
|
||||
response = self.client.get(url, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
|
||||
|
||||
# manually running second case as DDT is having issues.
|
||||
self.client.logout()
|
||||
set_jwt_cookie(self.client, self.user, [(ENTERPRISE_ADMIN_ROLE, BAD_ENTERPRISE_ID)])
|
||||
response = self.client.get(url, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"""
|
||||
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.http import Http404
|
||||
from edx_rbac.mixins import PermissionRequiredMixin
|
||||
from edx_rest_framework_extensions.auth.jwt.authentication import JwtAuthentication
|
||||
from rest_framework import permissions, viewsets
|
||||
@@ -52,7 +53,10 @@ class SAMLProviderDataViewSet(PermissionRequiredMixin, SAMLProviderDataMixin, vi
|
||||
EnterpriseCustomerIdentityProvider,
|
||||
enterprise_customer__uuid=self.requested_enterprise_uuid
|
||||
)
|
||||
saml_provider = SAMLProviderConfig.objects.get(pk=enterprise_customer_idp.provider_id)
|
||||
try:
|
||||
saml_provider = SAMLProviderConfig.objects.current_set().get(slug=enterprise_customer_idp.provider_id)
|
||||
except SAMLProviderConfig.DoesNotExist:
|
||||
raise Http404('No matching SAML provider found.')
|
||||
return SAMLProviderData.objects.filter(entity_id=saml_provider.entity_id)
|
||||
|
||||
@property
|
||||
@@ -60,7 +64,7 @@ class SAMLProviderDataViewSet(PermissionRequiredMixin, SAMLProviderDataMixin, vi
|
||||
"""
|
||||
The enterprise customer uuid from request params or post body
|
||||
"""
|
||||
if self.request.method in ('POST', 'PATCH', 'DELETE'):
|
||||
if self.request.method in ('POST', 'PATCH'):
|
||||
uuid_str = self.request.POST.get('enterprise_customer_uuid')
|
||||
if uuid_str is None:
|
||||
raise ParseError('Required enterprise_customer_uuid is missing')
|
||||
|
||||
Reference in New Issue
Block a user