Add 'View Consent' button to dashboard when required

Enterprise customers can require user to agree to Data Sharing Consent
form before they can access a course. We now add it conditionally to
Course Dashboard when it's required so it's apparent to user and they
have a way to revist the consent form if they've previously declined or
the course has not yet started.

WL-1281
This commit is contained in:
Bill Filler
2017-09-05 10:47:56 -04:00
parent dbad9fbcd4
commit f9f4876bee
6 changed files with 194 additions and 100 deletions

View File

@@ -7,6 +7,7 @@ import json
import unittest
import ddt
import mock
import pytz
from django.conf import settings
from django.core.urlresolvers import reverse
@@ -335,3 +336,43 @@ class StudentDashboardTests(SharedModuleStoreTestCase, MilestonesTestCaseMixin):
remove_prerequisite_course(self.course.id, get_course_milestones(self.course.id)[0])
response = self.client.get(reverse('dashboard'))
self.assertNotIn('<div class="prerequisites">', response.content)
@mock.patch('student.views.consent_needed_for_course')
@mock.patch('student.views.enterprise_customer_for_request')
@ddt.data(
(True, True, True),
(True, True, False),
(True, False, False),
(False, True, False),
(False, False, False),
)
@ddt.unpack
def test_enterprise_view_consent_for_course(
self,
enterprise_enabled,
consent_needed,
future_course,
mock_enterprise_customer,
mock_consent_necessary
):
"""
Verify that the 'View Consent' icon show up if data sharing consent turned on
for enterprise customer
"""
if future_course:
self.course = CourseFactory.create(start=self.TOMORROW, emit_signals=True)
else:
self.course = CourseFactory.create(emit_signals=True)
self.course_enrollment = CourseEnrollmentFactory(course_id=self.course.id, user=self.user)
if enterprise_enabled:
mock_enterprise_customer.return_value = {'name': 'TestEnterprise', 'uuid': 'abc123xxx'}
else:
mock_enterprise_customer.return_value = None
mock_consent_necessary.return_value = consent_needed
# Assert 'View Consent' button shows up appropriately
response = self.client.get(reverse('dashboard'))
self.assertEquals('View Consent' in response.content, enterprise_enabled and consent_needed)
self.assertEquals('TestEnterprise' in response.content, enterprise_enabled and consent_needed)

View File

@@ -87,7 +87,11 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers
from openedx.core.djangoapps.user_api.preferences import api as preferences_api
from openedx.core.djangolib.markup import HTML
from openedx.features.course_experience import course_home_url_name
from openedx.features.enterprise_support.api import get_dashboard_consent_notification
from openedx.features.enterprise_support.api import (
consent_needed_for_course,
enterprise_customer_for_request,
get_dashboard_consent_notification
)
from shoppingcart.api import order_history
from shoppingcart.models import CourseRegistrationCode, DonationConfiguration
from student.cookies import delete_logged_in_cookies, set_logged_in_cookies, set_user_info_cookie
@@ -729,6 +733,16 @@ def dashboard(request):
enterprise_message = get_dashboard_consent_notification(request, user, course_enrollments)
enterprise_customer = enterprise_customer_for_request(request)
consent_required_courses = set()
enterprise_customer_name = None
if enterprise_customer:
consent_required_courses = {
enrollment.course_id for enrollment in course_enrollments
if consent_needed_for_course(request, request.user, str(enrollment.course_id), True)
}
enterprise_customer_name = enterprise_customer['name']
# Account activation message
account_activation_messages = [
message for message in messages.get_messages(request) if 'account-activation' in message.tags
@@ -847,6 +861,8 @@ def dashboard(request):
context = {
'enterprise_message': enterprise_message,
'consent_required_courses': consent_required_courses,
'enterprise_customer_name': enterprise_customer_name,
'enrollment_message': enrollment_message,
'redirect_message': redirect_message,
'account_activation_messages': account_activation_messages,