def setUpTestData(cls): super().setUpTestData() cls.password = '******' cls.staff = User.objects.create(username='******', password=cls.password) cls.course_id = 'course-v1:testX+sg101+2019' cls.subsections = list( grades_api.graded_subsections_for_course_id(cls.course_id)) cls.subsection_short_ids = [ subsection.location.block_id[:8] for subsection in cls.subsections ] cls.learners = cls._make_enrollments() cls.audit_learner, cls.verified_learner, cls.masters_learner = cls.learners
def test_export_override(self): subsections = list(grades_api.graded_subsections_for_course_id(None)) subsection = subsections[1] processor = api.InterventionCSVProcessor(course_id=self.course_id) mock_grade = make_mock_grade(override=Mock(earned_graded_override=.9), earned_graded=.4) grades = chain((make_mock_grade(), mock_grade), repeat(make_mock_grade())) with patch('lms.djangoapps.grades.api.get_subsection_grades') as mock_subsection_grades: mock_subsection_grades.side_effect = mock_subsection_grade(grades) rows = list(processor.get_iterator()) grade_column_index = rows[0].split(',').index('grade-123402db') assert len(rows) == 3 row = rows[1].split(',') assert row[0] == str(self.masters_learner.id) assert row[grade_column_index] == '0.9'
def test_filter_subsection_grade_no_subsection_grade(self): subsections = list(grades_api.graded_subsections_for_course_id(None)) filter_subsection = subsections[1] processor = api.InterventionCSVProcessor( course_id=self.course_id, subsection=str(filter_subsection.location), subsection_grade_min=1, subsection_grade_max=100, ) grades = chain([make_mock_grade(), None], repeat(make_mock_grade())) with patch('lms.djangoapps.grades.api.get_subsection_grades') as mock_subsection_grades: mock_subsection_grades.side_effect = mock_subsection_grade(grades) rows = list(processor.get_iterator()) assert len(rows) == 2 row = rows[1].split(',') assert row[0] == str(self.masters_learner_2.id)
def test_filter_subsection_grade(self, subsection_grade_min, subsection_grade_max, expected_rows): subsections = list(grades_api.graded_subsections_for_course_id(None)) filter_subsection = subsections[1] processor = api.InterventionCSVProcessor( course_id=self.course_id, subsection=str(filter_subsection.location), subsection_grade_min=subsection_grade_min, subsection_grade_max=subsection_grade_max, ) grades = [ make_mock_grade(), make_mock_grade(earned_graded=0.9), make_mock_grade(), make_mock_grade(), make_mock_grade(earned_graded=0.5), make_mock_grade(), ] with patch('lms.djangoapps.grades.api.get_subsection_grades') as mock_subsection_grades: mock_subsection_grades.side_effect = mock_subsection_grade(iter(grades)) rows = list(processor.get_iterator()) assert len(rows) == expected_rows
def _get_graded_subsections(course_id, filter_subsection=None, filter_assignment_type=None): """ Return list of graded subsections. If filter_subsection (block usage id) is set, return only that subsection. If filter_assignment_type (string) is set, return only subsections of the appropriate type. """ subsections = OrderedDict() for subsection in grades_api.graded_subsections_for_course_id( course_id): block_id = str(subsection.location.block_id) if ( # pragma: no branch (filter_subsection and (block_id != filter_subsection.block_id)) or (filter_assignment_type and (filter_assignment_type != str(subsection.format)))): continue # pragma: no cover short_block_id = block_id[:8] if short_block_id not in subsections: subsections[short_block_id] = (subsection, subsection.display_name) return subsections
def f(user_id, course_key): result = {} for subsection in grades_api.graded_subsections_for_course_id(course_key): result[subsection.location] = next(grade_iter) return result