diff --git a/common/djangoapps/student/tests/tests.py b/common/djangoapps/student/tests/tests.py
index 1a8c105c01..c28a54afe8 100644
--- a/common/djangoapps/student/tests/tests.py
+++ b/common/djangoapps/student/tests/tests.py
@@ -12,10 +12,11 @@ import pytz
from django.conf import settings
from django.test import TestCase
from django.test.utils import override_settings
-from django.test.client import RequestFactory
+from django.test.client import RequestFactory, Client
from django.contrib.auth.models import User, AnonymousUser
-from django.core.urlresolvers import reverse
+from django.core.urlresolvers import reverse, NoReverseMatch
from django.http import HttpResponse
+from unittest.case import SkipTest
from xmodule.modulestore.tests.factories import CourseFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
@@ -146,12 +147,58 @@ class DashboardTest(TestCase):
def setUp(self):
self.course = CourseFactory.create(org=self.COURSE_ORG, display_name=self.COURSE_NAME, number=self.COURSE_SLUG)
self.assertIsNotNone(self.course)
- self.user = UserFactory.create(username="jack", email="jack@fake.edx.org")
+ self.user = UserFactory.create(username="jack", email="jack@fake.edx.org", password='test')
CourseModeFactory.create(
course_id=self.course.id,
mode_slug='honor',
mode_display_name='Honor Code',
)
+ self.client = Client()
+
+ def check_verification_status_on(self, mode, value):
+ """
+ Check that the css class and the status message are in the dashboard html.
+ """
+ CourseEnrollment.enroll(self.user, self.course.location.course_id, mode=mode)
+ try:
+ response = self.client.get(reverse('dashboard'))
+ except NoReverseMatch:
+ raise SkipTest("Skip this test if url cannot be found (ie running from CMS tests)")
+ self.assertContains(response, "class=\"course {0}\"".format(mode))
+ self.assertContains(response, value)
+
+ @patch.dict("django.conf.settings.FEATURES", {'ENABLE_VERIFIED_CERTIFICATES': True})
+ def test_verification_status_visible(self):
+ """
+ Test that the certificate verification status for courses is visible on the dashboard.
+ """
+ self.client.login(username="jack", password="test")
+ self.check_verification_status_on('verified', 'You\'re enrolled as a verified student')
+ self.check_verification_status_on('honor', 'You\'re enrolled as an honor code student')
+ self.check_verification_status_on('audit', 'You\'re auditing this course')
+
+ def check_verification_status_off(self, mode, value):
+ """
+ Check that the css class and the status message are not in the dashboard html.
+ """
+ CourseEnrollment.enroll(self.user, self.course.location.course_id, mode=mode)
+ try:
+ response = self.client.get(reverse('dashboard'))
+ except NoReverseMatch:
+ raise SkipTest("Skip this test if url cannot be found (ie running from CMS tests)")
+ self.assertNotContains(response, "class=\"course {0}\"".format(mode))
+ self.assertNotContains(response, value)
+
+ @patch.dict("django.conf.settings.FEATURES", {'ENABLE_VERIFIED_CERTIFICATES': False})
+ def test_verification_status_invisible(self):
+ """
+ Test that the certificate verification status for courses is not visible on the dashboard
+ if the verified certificates setting is off.
+ """
+ self.client.login(username="jack", password="test")
+ self.check_verification_status_off('verified', 'You\'re enrolled as a verified student')
+ self.check_verification_status_off('honor', 'You\'re enrolled as an honor code student')
+ self.check_verification_status_off('audit', 'You\'re auditing this course')
def test_course_mode_info(self):
verified_mode = CourseModeFactory.create(
diff --git a/lms/djangoapps/courseware/features/certificates.py b/lms/djangoapps/courseware/features/certificates.py
index 91e4f394c5..06d77e8008 100644
--- a/lms/djangoapps/courseware/features/certificates.py
+++ b/lms/djangoapps/courseware/features/certificates.py
@@ -6,6 +6,7 @@ from lettuce.django import django_url
from course_modes.models import CourseMode
from nose.tools import assert_equal
+
UPSELL_LINK_CSS = '.message-upsell a.action-upgrade[href*="edx/999/Certificates"]'
def create_cert_course():
diff --git a/lms/envs/common.py b/lms/envs/common.py
index 74646b0173..bb4956e980 100644
--- a/lms/envs/common.py
+++ b/lms/envs/common.py
@@ -172,6 +172,9 @@ FEATURES = {
# Enable instructor dash beta version link
'ENABLE_INSTRUCTOR_BETA_DASHBOARD': True,
+ # Toggle to enable certificates of courses on dashboard
+ 'ENABLE_VERIFIED_CERTIFICATES': False,
+
# Allow use of the hint managment instructor view.
'ENABLE_HINTER_INSTRUCTOR_VIEW': False,
diff --git a/lms/envs/test.py b/lms/envs/test.py
index f0f734532d..a1bc567964 100644
--- a/lms/envs/test.py
+++ b/lms/envs/test.py
@@ -37,6 +37,8 @@ FEATURES['ENABLE_INSTRUCTOR_BETA_DASHBOARD'] = True
FEATURES['ENABLE_SHOPPING_CART'] = True
+FEATURES['ENABLE_VERIFIED_CERTIFICATES'] = True
+
# Enable this feature for course staff grade downloads, to enable acceptance tests
FEATURES['ENABLE_S3_GRADE_DOWNLOADS'] = True
FEATURES['ALLOW_COURSE_STAFF_GRADE_DOWNLOADS'] = True
diff --git a/lms/templates/dashboard/_dashboard_course_listing.html b/lms/templates/dashboard/_dashboard_course_listing.html
index 082c510f25..229fed81d4 100644
--- a/lms/templates/dashboard/_dashboard_course_listing.html
+++ b/lms/templates/dashboard/_dashboard_course_listing.html
@@ -21,7 +21,11 @@
<%namespace name='static' file='../static_content.html'/>
-
+ % if settings.FEATURES.get('ENABLE_VERIFIED_CERTIFICATES'):
+
+ % else:
+
+ %endif
<%
course_target = reverse('info', args=[course.id])
%>
@@ -35,23 +39,24 @@
% endif
-
- % if enrollment.mode == "verified":
-
- ${_("Enrolled as: ")}
-
- ${_("Verified")}
-
- % elif enrollment.mode == "honor":
-
- ${_("Enrolled as: ")}
- ${_("Honor Code")}
-
- % elif enrollment.mode == "audit":
-
- ${_("Enrolled as: ")}
- ${_("Auditing")}
-
+ % if settings.FEATURES.get('ENABLE_VERIFIED_CERTIFICATES'):
+ % if enrollment.mode == "verified":
+
+ ${_("Enrolled as: ")}
+
+ ${_("Verified")}
+
+ % elif enrollment.mode == "honor":
+
+ ${_("Enrolled as: ")}
+ ${_("Honor Code")}
+
+ % elif enrollment.mode == "audit":
+
+ ${_("Enrolled as: ")}
+ ${_("Auditing")}
+
+ % endif
% endif