def _apply_recalculate_subsection_grade(self, mock_score=(1.0, 2.0)): """ Calls the recalculate_subsection_grade task with necessary mocking in place. """ with self.mock_get_score(mock_score): recalculate_subsection_grade.apply(kwargs=self.recalculate_subsection_grade_kwargs)
def _apply_recalculate_subsection_grade(self): """ Calls the recalculate_subsection_grade task with necessary mocking in place. """ with self.mock_get_score(): recalculate_subsection_grade.apply(args=tuple(self.recalculate_subsection_grade_kwargs.values()))
def _apply_recalculate_subsection_grade(self, mock_score=(1.0, 2.0)): """ Calls the recalculate_subsection_grade task with necessary mocking in place. """ with self.mock_get_score(mock_score): recalculate_subsection_grade.apply(kwargs=self.recalculate_subsection_grade_kwargs)
def test_query_counts_with_feature_flag(self, default_store, feature_flag): PersistentGradesEnabledFlag.objects.create(enabled=feature_flag) with self.store.default_store(default_store): self.set_up_course() with check_mongo_calls(0) and self.assertNumQueries( 3 if feature_flag else 2): recalculate_subsection_grade.apply( args=tuple(self.score_changed_kwargs.values()))
def test_subsection_grades_not_enabled_on_course(self, default_store): with self.store.default_store(default_store): self.set_up_course(enable_subsection_grades=False) self.assertFalse( PersistentGradesEnabledFlag.feature_enabled(self.course.id)) with check_mongo_calls(2) and self.assertNumQueries(0): recalculate_subsection_grade.apply( args=tuple(self.score_changed_kwargs.values()))
def _apply_recalculate_subsection_grade(self): """ Calls the recalculate_subsection_grade task with necessary mocking in place. """ with self.mock_get_score(): recalculate_subsection_grade.apply( args=tuple(self.recalculate_subsection_grade_kwargs.values()))
def test_retry_on_integrity_error(self, mock_update, mock_retry): """ Ensures that tasks will be retried if IntegrityErrors are encountered. """ self.set_up_course() mock_update.side_effect = IntegrityError("WHAMMY") recalculate_subsection_grade.apply( args=tuple(self.score_changed_kwargs.values())) self.assertTrue(mock_retry.called)
def test_subsection_grade_updated(self, default_store): with self.store.default_store(default_store): self.set_up_course() self.assertTrue( PersistentGradesEnabledFlag.feature_enabled(self.course.id)) with check_mongo_calls(2) and self.assertNumQueries(13): recalculate_subsection_grade.apply(args=( self.score_changed_kwargs['user_id'], self.score_changed_kwargs['course_id'], self.score_changed_kwargs['usage_id'], ))
def test_single_call_to_create_block_structure(self): self.set_up_course() self.assertTrue( PersistentGradesEnabledFlag.feature_enabled(self.course.id)) with patch( 'openedx.core.lib.block_structure.factory.BlockStructureFactory.create_from_cache', return_value=None, ) as mock_block_structure_create: recalculate_subsection_grade.apply( args=tuple(self.score_changed_kwargs.values())) self.assertEquals(mock_block_structure_create.call_count, 2)
def test_query_count_does_not_change_with_more_problems( self, default_store): with self.store.default_store(default_store): self.set_up_course() self.assertTrue( PersistentGradesEnabledFlag.feature_enabled(self.course.id)) ItemFactory.create(parent=self.sequential, category='problem', display_name='problem2') ItemFactory.create(parent=self.sequential, category='problem', display_name='problem3') with check_mongo_calls(2) and self.assertNumQueries(13): recalculate_subsection_grade.apply( args=tuple(self.score_changed_kwargs.values()))
def test_subsection_update_triggers_course_update(self, mock_course_signal): """ Ensures that the subsection update operation also updates the course grade. """ self.set_up_course() mock_return = uuid4() course_key = CourseLocator.from_string(unicode(self.course.id)) course = modulestore().get_course(course_key, depth=0) with patch( 'lms.djangoapps.grades.new.subsection_grade.SubsectionGradeFactory.update', return_value=mock_return): recalculate_subsection_grade.apply( args=tuple(self.score_changed_kwargs.values())) mock_course_signal.assert_called_once_with( sender=recalculate_subsection_grade, course=course, user=self.user, subsection_grade=mock_return, )
def test_query_counts_with_feature_flag(self, default_store, feature_flag): PersistentGradesEnabledFlag.objects.create(enabled=feature_flag) with self.store.default_store(default_store): self.set_up_course() with check_mongo_calls(0) and self.assertNumQueries(3 if feature_flag else 2): recalculate_subsection_grade.apply(kwargs=self.recalculate_subsection_grade_kwargs)
def test_retry_subsection_grade_on_no_score(self, mock_retry): self.set_up_course() with self.mock_get_score(score=None): recalculate_subsection_grade.apply(args=tuple(self.recalculate_subsection_grade_kwargs.values())) self.assertTrue(mock_retry.called)
def test_retry_subsection_grade_on_no_score(self, mock_retry): self.set_up_course() with self.mock_get_score(score=None): recalculate_subsection_grade.apply( args=tuple(self.recalculate_subsection_grade_kwargs.values())) self.assertTrue(mock_retry.called)