[feat] MB-1192: Add user_has_passing_grade to outline API (#28198)
* [feat] add user_has_passing_grade to outline API * default to false * add tests * linting
This commit is contained in:
@@ -126,3 +126,4 @@ class OutlineTabSerializer(DatesBannerSerializerMixin, VerifiedModeSerializerMix
|
||||
offer = serializers.DictField()
|
||||
resume_course = ResumeCourseSerializer()
|
||||
welcome_message_html = serializers.CharField()
|
||||
user_has_passing_grade = serializers.BooleanField()
|
||||
|
||||
@@ -4,6 +4,7 @@ Tests for Outline Tab API in the Course Home API
|
||||
|
||||
import itertools
|
||||
from datetime import datetime, timezone
|
||||
from lms.djangoapps.grades.course_grade_factory import CourseGradeFactory
|
||||
from unittest.mock import Mock, patch
|
||||
|
||||
import ddt
|
||||
@@ -387,3 +388,12 @@ class OutlineTabTestViews(BaseCourseHomeTests):
|
||||
response = self.client.get(self.url)
|
||||
blocks = response.data['course_blocks']['blocks']
|
||||
assert seq_block_id not in blocks
|
||||
|
||||
def test_user_has_passing_grade(self):
|
||||
CourseEnrollment.enroll(self.user, self.course.id)
|
||||
self.course._grading_policy['GRADE_CUTOFFS']['Pass'] = 0
|
||||
self.update_course(self.course, self.user.id)
|
||||
CourseGradeFactory().update(self.user, self.course)
|
||||
response = self.client.get(self.url)
|
||||
assert response.status_code == 200
|
||||
assert response.data['user_has_passing_grade'] is True
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
Outline Tab Views
|
||||
"""
|
||||
from datetime import datetime, timezone
|
||||
from lms.djangoapps.grades.course_grade_factory import CourseGradeFactory
|
||||
|
||||
from completion.exceptions import UnavailableCompletionData
|
||||
from completion.utilities import get_key_to_last_completed_block
|
||||
@@ -146,6 +147,7 @@ class OutlineTabView(RetrieveAPIView):
|
||||
has_visited_course: (bool) Whether the user has ever visited the course
|
||||
url: (str) The display name of the course block to resume
|
||||
welcome_message_html: (str) Raw HTML for the course updates banner
|
||||
user_has_passing_grade: (bool) Whether the user currently is passing the course
|
||||
|
||||
**Returns**
|
||||
|
||||
@@ -313,6 +315,12 @@ class OutlineTabView(RetrieveAPIView):
|
||||
)
|
||||
] if 'children' in chapter_data else []
|
||||
|
||||
user_has_passing_grade = False
|
||||
if not request.user.is_anonymous:
|
||||
user_grade = CourseGradeFactory().read(request.user, course)
|
||||
if user_grade:
|
||||
user_has_passing_grade = user_grade.passed
|
||||
|
||||
data = {
|
||||
'access_expiration': access_expiration,
|
||||
'cert_data': cert_data,
|
||||
@@ -325,6 +333,7 @@ class OutlineTabView(RetrieveAPIView):
|
||||
'has_ended': course.has_ended(),
|
||||
'offer': offer_data,
|
||||
'resume_course': resume_course,
|
||||
'user_has_passing_grade': user_has_passing_grade,
|
||||
'welcome_message_html': welcome_message_html,
|
||||
}
|
||||
context = self.get_serializer_context()
|
||||
|
||||
Reference in New Issue
Block a user