Beispiel #1
0
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)
Beispiel #2
0
 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})
Beispiel #3
0
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)
Beispiel #4
0
 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)
Beispiel #5
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)
Beispiel #6
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)
Beispiel #7
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)
Beispiel #8
0
 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)
Beispiel #9
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
         )
Beispiel #10
0
 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})