diff --git a/lms/djangoapps/instructor/tests/test_instructor_dashboard.py b/lms/djangoapps/instructor/tests/test_instructor_dashboard.py
new file mode 100644
index 0000000000..957c577433
--- /dev/null
+++ b/lms/djangoapps/instructor/tests/test_instructor_dashboard.py
@@ -0,0 +1,125 @@
+"""
+Unit tests for instructor_dashboard.py.
+"""
+from mock import patch
+
+from django.conf import settings
+from django.core.urlresolvers import reverse
+from django.test.utils import override_settings
+from courseware.tests.helpers import LoginEnrollmentTestCase
+
+from student.tests.factories import AdminFactory
+from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
+from xmodule.modulestore.tests.factories import CourseFactory
+
+
+class TestInstructorDashboard(ModuleStoreTestCase, LoginEnrollmentTestCase):
+ """
+ Tests for the instructor dashboard (not legacy).
+ """
+
+ def setUp(self):
+ """
+ Set up tests
+ """
+ self.course = CourseFactory.create()
+
+ # Create instructor account
+ instructor = AdminFactory.create()
+ self.client.login(username=instructor.username, password="test")
+
+ # URL for instructor dash
+ self.url = reverse('instructor_dashboard', kwargs={'course_id': self.course.id.to_deprecated_string()})
+
+ def tearDown(self):
+ """
+ Undo patches.
+ """
+ patch.stopall()
+
+ def get_dashboard_enrollment_message(self):
+ return 'Enrollment data is now available in Example.'.format(unicode(self.course.id))
+
+ def get_dashboard_demographic_message(self):
+ return 'Demographic data is now available in Example.'.format(unicode(self.course.id))
+
+ @patch.dict(settings.FEATURES, {'DISPLAY_ANALYTICS_ENROLLMENTS': False})
+ @override_settings(ANALYTICS_DASHBOARD_URL='')
+ def test_no_enrollments(self):
+ """
+ Test enrollment section is hidden.
+ """
+ response = self.client.get(self.url)
+ # no enrollment information should be visible
+ self.assertFalse('
Enrollment Information
' in response.content)
+
+ @patch.dict(settings.FEATURES, {'DISPLAY_ANALYTICS_ENROLLMENTS': True})
+ @override_settings(ANALYTICS_DASHBOARD_URL='')
+ def test_show_enrollments_data(self):
+ """
+ Test enrollment data is shown.
+ """
+ response = self.client.get(self.url)
+
+ # enrollment information visible
+ self.assertTrue('Enrollment Information
' in response.content)
+ self.assertTrue('Verified | ' in response.content)
+ self.assertTrue('Audit | ' in response.content)
+ self.assertTrue('Honor | ' in response.content)
+
+ # dashboard link hidden
+ self.assertFalse(self.get_dashboard_enrollment_message() in response.content)
+
+ @patch.dict(settings.FEATURES, {'DISPLAY_ANALYTICS_ENROLLMENTS': False})
+ @override_settings(ANALYTICS_DASHBOARD_URL='http://example.com')
+ @override_settings(ANALYTICS_DASHBOARD_NAME='Example')
+ def test_show_dashboard_enrollment_message(self):
+ """
+ Test enrollment dashboard message is shown and data is hidden.
+ """
+ response = self.client.get(self.url)
+
+ # enrollment information hidden
+ self.assertFalse('Verified | ' in response.content)
+ self.assertFalse('Audit | ' in response.content)
+ self.assertFalse('Honor | ' in response.content)
+
+ # link to dashboard shown
+ expected_message = self.get_dashboard_enrollment_message()
+ self.assertTrue(expected_message in response.content)
+
+ @patch.dict(settings.FEATURES, {'DISPLAY_ANALYTICS_DEMOGRAPHICS': True})
+ @override_settings(ANALYTICS_DASHBOARD_URL='')
+ @override_settings(ANALYTICS_DASHBOARD_NAME='')
+ def test_show_dashboard_demographic_data(self):
+ """
+ Test enrollment demographic data is shown.
+ """
+ response = self.client.get(self.url)
+ # demographic information displayed
+ self.assertTrue('data-feature="year_of_birth"' in response.content)
+ self.assertTrue('data-feature="gender"' in response.content)
+ self.assertTrue('data-feature="level_of_education"' in response.content)
+
+ # dashboard link hidden
+ self.assertFalse(self.get_dashboard_demographic_message() in response.content)
+
+ @patch.dict(settings.FEATURES, {'DISPLAY_ANALYTICS_DEMOGRAPHICS': False})
+ @override_settings(ANALYTICS_DASHBOARD_URL='http://example.com')
+ @override_settings(ANALYTICS_DASHBOARD_NAME='Example')
+ def test_show_dashboard_demographic_message(self):
+ """
+ Test enrollment demographic dashboard message is shown and data is hidden.
+ """
+ response = self.client.get(self.url)
+
+ # demographics are hidden
+ self.assertFalse('data-feature="year_of_birth"' in response.content)
+ self.assertFalse('data-feature="gender"' in response.content)
+ self.assertFalse('data-feature="level_of_education"' in response.content)
+
+ # link to dashboard shown
+ expected_message = self.get_dashboard_demographic_message()
+ self.assertTrue(expected_message in response.content)
diff --git a/lms/djangoapps/instructor/views/instructor_dashboard.py b/lms/djangoapps/instructor/views/instructor_dashboard.py
index f894304954..585b2fffb6 100644
--- a/lms/djangoapps/instructor/views/instructor_dashboard.py
+++ b/lms/djangoapps/instructor/views/instructor_dashboard.py
@@ -263,6 +263,7 @@ def _section_membership(course, access):
def _is_small_course(course_key):
+ """ Compares against MAX_ENROLLMENT_INSTR_BUTTONS to determine if course enrollment is considered small. """
is_small_course = False
enrollment_count = CourseEnrollment.num_enrolled_in(course_key)
max_enrollment_for_buttons = settings.FEATURES.get("MAX_ENROLLMENT_INSTR_BUTTONS")
@@ -364,11 +365,9 @@ def _section_send_email(course, access):
def _get_dashboard_link(course_key):
# Construct a URL to the external analytics dashboard
- link = None
- if settings.ANALYTICS_DASHBOARD_URL:
- analytics_dashboard_url = '{0}/courses/{1}'.format(settings.ANALYTICS_DASHBOARD_URL, unicode(course_key))
- link = "{1}".format(analytics_dashboard_url,
- settings.ANALYTICS_DASHBOARD_NAME)
+ analytics_dashboard_url = '{0}/courses/{1}'.format(settings.ANALYTICS_DASHBOARD_URL, unicode(course_key))
+ link = "{1}".format(analytics_dashboard_url,
+ settings.ANALYTICS_DASHBOARD_NAME)
return link