From 6be024db3f6b96fbf8f297bfbc082efbb81c3320 Mon Sep 17 00:00:00 2001 From: Arslan Date: Fri, 28 Jan 2022 17:22:16 +0500 Subject: [PATCH] fix: catch and log the CourseOverview.DoesNotExist instead of raising --- openedx/core/djangoapps/credit/services.py | 17 ++++++++++++----- .../djangoapps/credit/tests/test_services.py | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/openedx/core/djangoapps/credit/services.py b/openedx/core/djangoapps/credit/services.py index 4db8a944a5..2aed03b0f6 100644 --- a/openedx/core/djangoapps/credit/services.py +++ b/openedx/core/djangoapps/credit/services.py @@ -100,11 +100,18 @@ class CreditService: } if return_course_info: - course_overview = CourseOverview.get_from_id(course_key) - result.update({ - 'course_name': course_overview.display_name, - 'course_end_date': course_overview.end, - }) + try: + course_overview = CourseOverview.get_from_id(course_key) + result.update({ + 'course_name': course_overview.display_name, + 'course_end_date': course_overview.end, + }) + except CourseOverview.DoesNotExist: + log.exception( + "Could not get name and end_date for course %s, This happened because we were unable to " + "get/create CourseOverview object for the course. It's possible that the Course has been deleted.", + str(course_key), + ) return result def set_credit_requirement_status(self, user_id, course_key_or_id, req_namespace, diff --git a/openedx/core/djangoapps/credit/tests/test_services.py b/openedx/core/djangoapps/credit/tests/test_services.py index edd3d82676..4a365c2097 100644 --- a/openedx/core/djangoapps/credit/tests/test_services.py +++ b/openedx/core/djangoapps/credit/tests/test_services.py @@ -3,9 +3,11 @@ Tests for the Credit xBlock service """ +from unittest.mock import patch import ddt from common.djangoapps.course_modes.models import CourseMode +from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.credit.api.eligibility import set_credit_requirements from openedx.core.djangoapps.credit.models import CreditCourse from openedx.core.djangoapps.credit.services import CreditService @@ -261,6 +263,22 @@ class CreditServiceTests(ModuleStoreTestCase): assert 'course_name' in credit_state assert credit_state['course_name'] == self.course.display_name + @patch("openedx.core.djangoapps.credit.services.log") + def test_course_exception_log(self, exception_log): + """ + Make sure we catch the CourseOverview.DoesNotExist exception and log it instead of raising + """ + with patch("openedx.core.djangoapps.content.course_overviews.models.CourseOverview.get_from_id", + side_effect=CourseOverview.DoesNotExist): + + self.enroll() + credit_state = self.service.get_credit_state(self.user.id, self.course.id, return_course_info=True) + assert credit_state is not None + exception_log.exception.assert_called_once_with( + "Could not get name and end_date for course %s, This happened because we were unable to " + "get/create CourseOverview object for the course. It's possible that the Course has been deleted.", + str(self.course.id)) + def test_set_status_non_credit(self): """ assert that we can still try to update a credit status but return quickly if