def update_milestone(milestone, usage_key, prereq_milestone, user, grade_percentage=None, completion_percentage=None): """ Updates the milestone record based on evaluation of prerequisite met. Arguments: milestone: The gated milestone being evaluated usage_key: Usage key of the prerequisite subsection prereq_milestone: The gating milestone user: The user who has fulfilled milestone grade_percentage: Grade percentage of prerequisite subsection completion_percentage: Completion percentage of prerequisite subsection Returns: True if prerequisite has been met, False if not """ min_score, min_completion = _get_minimum_required_percentage(milestone) if not grade_percentage: grade_percentage = get_subsection_grade_percentage(usage_key, user) if min_score > 0 else 0 if not completion_percentage: completion_percentage = get_subsection_completion_percentage(usage_key, user) if min_completion > 0 else 0 if grade_percentage >= min_score and completion_percentage >= min_completion: milestones_helpers.add_user_milestone({'id': user.id}, prereq_milestone) return True else: milestones_helpers.remove_user_milestone({'id': user.id}, prereq_milestone) return False
def evaluate_entrance_exam(course_grade, user): """ Evaluates any entrance exam milestone relationships attached to the given course. If the course_grade meets the minimum score required, the dependent milestones will be marked fulfilled for the user. """ course = course_grade.course_data.course if ENTRANCE_EXAMS.is_enabled() and getattr(course, 'entrance_exam_enabled', False): if get_entrance_exam_content(user, course): exam_chapter_key = get_entrance_exam_usage_key(course) exam_score_ratio = get_entrance_exam_score_ratio( course_grade, exam_chapter_key) if exam_score_ratio >= course.entrance_exam_minimum_score_pct: relationship_types = milestones_helpers.get_milestone_relationship_types( ) content_milestones = milestones_helpers.get_course_content_milestones( course.id, exam_chapter_key, relationship=relationship_types['FULFILLS']) # Mark each entrance exam dependent milestone as fulfilled by the user. for milestone in content_milestones: milestones_helpers.add_user_milestone({'id': user.id}, milestone)
def test_add_user_milestone_returns_none_when_app_disabled(self): response = milestones_helpers.add_user_milestone( self.user, self.milestone) assert response is None