From 66b3e3828f034fca695676d2a1f481d10f240f3c Mon Sep 17 00:00:00 2001 From: Dennis Jen Date: Wed, 5 Nov 2014 17:14:33 -0500 Subject: [PATCH] added tests for instructor_dashboard.py, added docstring for _is_small_course, removed check for settings.ANALYTICS_DASHBOARD_URL when creating dashboard link --- .../tests/test_instructor_dashboard.py | 125 ++++++++++++++++++ .../instructor/views/instructor_dashboard.py | 9 +- 2 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 lms/djangoapps/instructor/tests/test_instructor_dashboard.py 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