Example #1
0
    def setUp(self):
        super().setUp()

        self.course = CourseFactory.create(
            start=datetime(2020, 1, 1),
            end=datetime(2028, 1, 1),
            enrollment_start=datetime(2020, 1, 1),
            enrollment_end=datetime(2028, 1, 1),
            emit_signals=True,
            modulestore=self.store,
        )
        chapter = ItemFactory(parent=self.course, category='chapter')
        ItemFactory(parent=chapter, category='sequential')

        CourseModeFactory(course_id=self.course.id, mode_slug=CourseMode.AUDIT)
        CourseModeFactory(
            course_id=self.course.id,
            mode_slug=CourseMode.VERIFIED,
            expiration_datetime=datetime(2028, 1, 1),
            min_price=149,
            sku='ABCD1234',
        )
        VerificationDeadline.objects.create(course_key=self.course.id,
                                            deadline=datetime(2028, 1, 1))

        CourseOverviewFactory.create(run='1T2020')
        update_outline_from_modulestore(self.course.id)

        self.staff_user = self.user
        self.user, password = self.create_non_staff_user()
        self.client.login(username=self.user.username, password=password)
Example #2
0
    def test_assignment(self):
        course = CourseFactory.create()
        with self.store.bulk_operations(course.id):
            chapter = ItemFactory.create(category='chapter', parent_location=course.location)
            sequential = ItemFactory.create(display_name='Test', category='sequential', graded=True, has_score=True,
                                            parent_location=chapter.location)
            ItemFactory.create(category='problem', graded=True, has_score=True, parent_location=sequential.location)
            ItemFactory.create(category='problem', graded=True, has_score=True, parent_location=sequential.location)
            sequential2 = ItemFactory.create(display_name='Ungraded', category='sequential',
                                             parent_location=chapter.location)
            ItemFactory.create(category='problem', parent_location=sequential2.location)
        update_outline_from_modulestore(course.id)
        url = reverse('course-home:outline-tab', args=[course.id])

        CourseEnrollment.enroll(self.user, course.id)
        response = self.client.get(url)
        assert response.status_code == 200

        exam_data = response.data['course_blocks']['blocks'][str(sequential.location)]
        assert exam_data['display_name'] == 'Test (2 Questions)'
        assert exam_data['icon'] == 'fa-pencil-square-o'

        ungraded_data = response.data['course_blocks']['blocks'][str(sequential2.location)]
        assert ungraded_data['display_name'] == 'Ungraded'
        assert ungraded_data['icon'] is None
Example #3
0
    def test_proctored_exam(self, mock_summary):
        course = CourseFactory.create(
            org='edX',
            course='900',
            run='test_run',
            enable_proctored_exams=True,
            proctoring_provider=settings.PROCTORING_BACKENDS['DEFAULT'],
        )
        chapter = ItemFactory.create(parent=course,
                                     category='chapter',
                                     display_name='Test Section')
        sequence = ItemFactory.create(
            parent=chapter,
            category='sequential',
            display_name='Test Proctored Exam',
            graded=True,
            is_time_limited=True,
            default_time_limit_minutes=10,
            is_practice_exam=True,
            due=datetime.now(),
            exam_review_rules='allow_use_of_paper',
            hide_after_due=False,
            is_onboarding_exam=False,
        )
        sequence.is_proctored_exam = True
        update_outline_from_modulestore(course.id)
        mock_summary.return_value = {
            'short_description': 'My Exam',
            'suggested_icon': 'fa-foo-bar',
        }
        url = reverse('course-home:outline-tab', args=[course.id])

        CourseEnrollment.enroll(self.user, course.id)
        response = self.client.get(url)
        assert response.status_code == 200

        exam_data = response.data['course_blocks']['blocks'][str(
            sequence.location)]
        assert not exam_data['complete']
        assert exam_data['description'] == 'My Exam'
        assert exam_data['display_name'] == 'Test Proctored Exam'
        assert exam_data['due'] is not None
        assert exam_data['icon'] == 'fa-foo-bar'