def test_dashboard_rendering(self): """ Tests that the dashboard renders the recent enrollment messages appropriately. """ config = DashboardConfiguration(recent_enrollment_time_delta=600) config.save() self.client = Client() self.client.login(username=self.student.username, password='******') response = self.client.get(reverse("dashboard")) self.assertContains(response, "You have successfully enrolled in")
def test_zero_second_delta(self): """ Tests that the recent enrollment list is empty if configured to zero seconds. """ config = DashboardConfiguration(recent_enrollment_time_delta=0) config.save() courses_list = list(get_course_enrollment_pairs(self.student, None, [])) self.assertEqual(len(courses_list), 2) recent_course_list = _get_recently_enrolled_courses(courses_list) self.assertEqual(len(recent_course_list), 0)
def test_recently_enrolled_courses(self): """ Test if the function for filtering recent enrollments works appropriately. """ config = DashboardConfiguration(recent_enrollment_time_delta=60) config.save() # get courses through iterating all courses courses_list = list(get_course_enrollment_pairs(self.student, None, [])) self.assertEqual(len(courses_list), 2) recent_course_list = _get_recently_enrolled_courses(courses_list) self.assertEqual(len(recent_course_list), 1)
def test_enrollments_sorted_most_recent(self): """ Test that the list of newly created courses are properly sorted to show the most recent enrollments first. """ config = DashboardConfiguration(recent_enrollment_time_delta=600) config.save() # Create a number of new enrollments and courses, and force their creation behind # the first enrollment course_location = locator.CourseLocator('Org2', 'Course2', 'Run2') _, enrollment2 = self._create_course_and_enrollment(course_location) enrollment2.created = datetime.datetime.now(UTC) - datetime.timedelta(seconds=5) enrollment2.save() course_location = locator.CourseLocator('Org3', 'Course3', 'Run3') _, enrollment3 = self._create_course_and_enrollment(course_location) enrollment3.created = datetime.datetime.now(UTC) - datetime.timedelta(seconds=10) enrollment3.save() course_location = locator.CourseLocator('Org4', 'Course4', 'Run4') _, enrollment4 = self._create_course_and_enrollment(course_location) enrollment4.created = datetime.datetime.now(UTC) - datetime.timedelta(seconds=15) enrollment4.save() course_location = locator.CourseLocator('Org5', 'Course5', 'Run5') _, enrollment5 = self._create_course_and_enrollment(course_location) enrollment5.created = datetime.datetime.now(UTC) - datetime.timedelta(seconds=20) enrollment5.save() courses_list = list(get_course_enrollment_pairs(self.student, None, [])) self.assertEqual(len(courses_list), 6) recent_course_list = _get_recently_enrolled_courses(courses_list) self.assertEqual(len(recent_course_list), 5) self.assertEqual(recent_course_list[1][1], enrollment2) self.assertEqual(recent_course_list[2][1], enrollment3) self.assertEqual(recent_course_list[3][1], enrollment4) self.assertEqual(recent_course_list[4][1], enrollment5)
def _get_recently_enrolled_courses(course_enrollments): """ Given a list of enrollments, filter out all but recent enrollments. Args: course_enrollments (list[CourseEnrollment]): A list of course enrollments. Returns: list[CourseEnrollment]: A list of recent course enrollments. """ seconds = DashboardConfiguration.current().recent_enrollment_time_delta time_delta = (datetime.datetime.now(UTC) - datetime.timedelta(seconds=seconds)) return [ enrollment for enrollment in course_enrollments # If the enrollment has no created date, we are explicitly excluding the course # from the list of recent enrollments. if enrollment.is_active and enrollment.created > time_delta ]
def _configure_message_timeout(self, timeout): """Configure the amount of time the enrollment message will be displayed. """ config = DashboardConfiguration(recent_enrollment_time_delta=timeout) config.save()