[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:
Thomas Tracy
2021-07-16 15:03:35 -04:00
committed by GitHub
parent a2a2a1f433
commit 3ecd233c11
3 changed files with 20 additions and 0 deletions

View File

@@ -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()

View File

@@ -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

View File

@@ -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()