def set_required_content(course_key, gated_content_key, prereq_content_key, min_score): """ Adds a `requires` milestone relationship for the given gated_content_key if a prerequisite prereq_content_key is provided. If prereq_content_key is None, removes the `requires` milestone relationship. Arguments: course_key (str|CourseKey): The course key gated_content_key (str|UsageKey): The gated content usage key prereq_content_key (str|UsageKey): The prerequisite content usage key min_score (str|int): The minimum score Returns: None """ milestone = None for gating_milestone in find_gating_milestones(course_key, gated_content_key, 'requires'): if not prereq_content_key or prereq_content_key not in gating_milestone.get('namespace'): milestones_api.remove_course_content_milestone(course_key, gated_content_key, gating_milestone) else: milestone = gating_milestone if prereq_content_key: _validate_min_score(min_score) requirements = {'min_score': min_score} if not milestone: milestone = _get_prerequisite_milestone(prereq_content_key) milestones_api.add_course_content_milestone(course_key, gated_content_key, 'requires', milestone, requirements)
def test_add_course_content_milestone_inactive_to_active_update_requirements(self): """ Unit Test: test_add_course_content_milestone_inactive_to_active_update_requirement """ api.add_course_content_milestone( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'], self.test_milestone, {'min_score': 60} ) api.remove_course_content_milestone( self.test_course_key, self.test_content_key, self.test_milestone ) with self.assertNumQueries(3): api.add_course_content_milestone( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'], self.test_milestone, {'min_score': 80} ) milestone = api.get_course_content_milestones( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'] ) for m in milestone: self.assertEqual(m['requirements'], {'min_score': 80})
def set_required_content(course_key, gated_content_key, prereq_content_key, min_score='', min_completion=''): """ Adds a `requires` milestone relationship for the given gated_content_key if a prerequisite prereq_content_key is provided. If prereq_content_key is None, removes the `requires` milestone relationship. Arguments: course_key (str|CourseKey): The course key gated_content_key (str|UsageKey): The gated content usage key prereq_content_key (str|UsageKey): The prerequisite content usage key min_score (str|int): The minimum score min_completion (str|int): The minimum completion percentage Returns: None """ milestone = None for gating_milestone in find_gating_milestones(course_key, gated_content_key, 'requires'): if not prereq_content_key or prereq_content_key not in gating_milestone.get('namespace'): milestones_api.remove_course_content_milestone(course_key, gated_content_key, gating_milestone) else: milestone = gating_milestone if prereq_content_key: _validate_min_score(min_score) requirements = {'min_score': min_score, 'min_completion': min_completion} if not milestone: milestone = _get_prerequisite_milestone(prereq_content_key) milestones_api.add_course_content_milestone(course_key, gated_content_key, 'requires', milestone, requirements)
def test_remove_course_content_milestone(self): """ Unit Test: test_remove_course_content_milestone """ api.add_course_content_milestone( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'], self.test_milestone ) requirer_milestones = api.get_course_content_milestones( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'] ) self.assertEqual(len(requirer_milestones), 1) with self.assertNumQueries(2): api.remove_course_content_milestone( self.test_course_key, self.test_content_key, self.test_milestone ) requirer_milestones = api.get_course_content_milestones( self.test_course_key, self.test_content_key ) self.assertEqual(len(requirer_milestones), 0)
def test_remove_course_content_milestone_missing_milestone(self): """ Unit Test: test_remove_course_content_milestone_missing_milestone """ with self.assertNumQueries(1): api.remove_course_content_milestone(self.test_course_key, self.test_content_key, self.test_milestone) requirer_milestones = api.get_course_content_milestones( self.test_course_key, self.test_content_key) self.assertEqual(len(requirer_milestones), 0)
def test_remove_course_content_milestone_missing_milestone(self): """ Unit Test: test_remove_course_content_milestone_missing_milestone """ with self.assertNumQueries(1): api.remove_course_content_milestone( self.test_course_key, self.test_content_key, self.test_milestone ) requirer_milestones = api.get_course_content_milestones( self.test_course_key, self.test_content_key ) self.assertEqual(len(requirer_milestones), 0)
def test_add_course_content_milestone_inactive_to_active(self): """ Unit Test: test_add_course_content_milestone_inactive_to_active """ api.add_course_content_milestone(self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'], self.test_milestone) api.remove_course_content_milestone(self.test_course_key, self.test_content_key, self.test_milestone) with self.assertNumQueries(3): api.add_course_content_milestone( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'], self.test_milestone)
def test_remove_course_content_milestone(self): """ Unit Test: test_remove_course_content_milestone """ api.add_course_content_milestone(self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'], self.test_milestone) requirer_milestones = api.get_course_content_milestones( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES']) self.assertEqual(len(requirer_milestones), 1) with self.assertNumQueries(2): api.remove_course_content_milestone(self.test_course_key, self.test_content_key, self.test_milestone) requirer_milestones = api.get_course_content_milestones( self.test_course_key, self.test_content_key) self.assertEqual(len(requirer_milestones), 0)
def test_add_course_content_milestone_inactive_to_active(self): """ Unit Test: test_add_course_content_milestone_inactive_to_active """ api.add_course_content_milestone( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'], self.test_milestone ) api.remove_course_content_milestone( self.test_course_key, self.test_content_key, self.test_milestone ) with self.assertNumQueries(3): api.add_course_content_milestone( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'], self.test_milestone )
def test_add_course_content_milestone_inactive_to_active_update_requirements( self): """ Unit Test: test_add_course_content_milestone_inactive_to_active_update_requirement """ api.add_course_content_milestone(self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'], self.test_milestone, {'min_score': 60}) api.remove_course_content_milestone(self.test_course_key, self.test_content_key, self.test_milestone) with self.assertNumQueries(3): api.add_course_content_milestone( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES'], self.test_milestone, {'min_score': 80}) milestone = api.get_course_content_milestones( self.test_course_key, self.test_content_key, self.relationship_types['REQUIRES']) for m in milestone: self.assertEqual(m['requirements'], {'min_score': 80})