Modify Enterprise API to accept list of course_ids for consent_required endpoint
WL-1491
This commit is contained in:
@@ -22,7 +22,8 @@ from third_party_auth.pipeline import get as get_partial_pipeline
|
||||
from third_party_auth.provider import Registry
|
||||
|
||||
try:
|
||||
from enterprise.models import EnterpriseCustomer
|
||||
from consent.models import DataSharingConsent
|
||||
from enterprise.models import EnterpriseCustomer, EnterpriseCustomerUser
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
@@ -430,6 +431,31 @@ def consent_needed_for_course(request, user, course_id, enrollment_exists=False)
|
||||
return consent_needed
|
||||
|
||||
|
||||
def get_consent_required_courses(user, course_ids):
|
||||
"""
|
||||
Returns a set of course_ids that require consent
|
||||
Note that this function makes use of the Enterprise models directly instead of using the API calls
|
||||
"""
|
||||
result = set()
|
||||
if not enterprise_enabled():
|
||||
return result
|
||||
|
||||
enterprise_learner = EnterpriseCustomerUser.objects.filter(user_id=user.id).first()
|
||||
if not enterprise_learner or not enterprise_learner.enterprise_customer:
|
||||
return result
|
||||
|
||||
enterprise_uuid = enterprise_learner.enterprise_customer.uuid
|
||||
data_sharing_consent = DataSharingConsent.objects.filter(username=user.username,
|
||||
course_id__in=course_ids,
|
||||
enterprise_customer__uuid=enterprise_uuid)
|
||||
|
||||
for consent in data_sharing_consent:
|
||||
if consent.consent_required():
|
||||
result.add(consent.course_id)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def get_enterprise_consent_url(request, course_id, user=None, return_to=None, enrollment_exists=False):
|
||||
"""
|
||||
Build a URL to redirect the user to the Enterprise app to provide data sharing
|
||||
|
||||
@@ -14,11 +14,13 @@ from django.core.urlresolvers import reverse
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.test.utils import override_settings
|
||||
|
||||
from consent.models import DataSharingConsent
|
||||
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase
|
||||
from openedx.features.enterprise_support.api import (
|
||||
ConsentApiClient,
|
||||
ConsentApiServiceClient,
|
||||
consent_needed_for_course,
|
||||
get_consent_required_courses,
|
||||
data_sharing_consent_required,
|
||||
EnterpriseApiClient,
|
||||
EnterpriseApiServiceClient,
|
||||
@@ -28,6 +30,7 @@ from openedx.features.enterprise_support.api import (
|
||||
insert_enterprise_pipeline_elements,
|
||||
enterprise_enabled,
|
||||
)
|
||||
from openedx.features.enterprise_support.tests.factories import EnterpriseCustomerUserFactory
|
||||
from openedx.features.enterprise_support.tests.mixins.enterprise import EnterpriseServiceMockMixin
|
||||
from openedx.features.enterprise_support.utils import get_cache_key
|
||||
from student.tests.factories import UserFactory
|
||||
@@ -183,6 +186,30 @@ class TestEnterpriseApi(EnterpriseServiceMockMixin, CacheIsolationTestCase):
|
||||
httpretty.reset()
|
||||
self.assertFalse(consent_needed_for_course(request, user, 'fake-course'))
|
||||
|
||||
@httpretty.activate
|
||||
@mock.patch('enterprise.models.EnterpriseCustomer.catalog_contains_course')
|
||||
def test_get_consent_required_courses(self, mock_catalog_contains_course):
|
||||
mock_catalog_contains_course.return_value = True
|
||||
user = UserFactory()
|
||||
enterprise_customer_user = EnterpriseCustomerUserFactory(user_id=user.id)
|
||||
|
||||
course_id = 'fake-course'
|
||||
data_sharing_consent = DataSharingConsent(
|
||||
course_id=course_id,
|
||||
enterprise_customer=enterprise_customer_user.enterprise_customer,
|
||||
username=user.username,
|
||||
granted=False
|
||||
)
|
||||
data_sharing_consent.save()
|
||||
consent_required = get_consent_required_courses(user, [course_id])
|
||||
self.assertTrue(course_id in consent_required)
|
||||
|
||||
# now grant consent and call our method again
|
||||
data_sharing_consent.granted = True
|
||||
data_sharing_consent.save()
|
||||
consent_required = get_consent_required_courses(user, [course_id])
|
||||
self.assertFalse(course_id in consent_required)
|
||||
|
||||
@httpretty.activate
|
||||
@mock.patch('openedx.features.enterprise_support.api.get_enterprise_learner_data')
|
||||
@mock.patch('openedx.features.enterprise_support.api.EnterpriseCustomer')
|
||||
|
||||
Reference in New Issue
Block a user