From 2f10ba099282edb774553c4e1d12615cf6efb7c5 Mon Sep 17 00:00:00 2001 From: Nathan Sprenkle Date: Wed, 5 Oct 2022 15:56:08 -0400 Subject: [PATCH] fix: learner home entitlement image fallback (#31107) * fix: add default for pseudo session image This keeps the serializer from breaking when image is not present in a pseudo session. --- lms/djangoapps/learner_home/serializers.py | 2 +- .../learner_home/test_serializers.py | 36 +++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/lms/djangoapps/learner_home/serializers.py b/lms/djangoapps/learner_home/serializers.py index e9e4c1c208..d6eb201048 100644 --- a/lms/djangoapps/learner_home/serializers.py +++ b/lms/djangoapps/learner_home/serializers.py @@ -462,7 +462,7 @@ class UnfulfilledEntitlementSerializer(serializers.Serializer): 'Private' Serializer for the 'course' key data. This data comes from the pseudo session """ - bannerImgSrc = serializers.URLField(source="image.src") + bannerImgSrc = serializers.URLField(source="image.src", default=None) courseName = serializers.CharField(source="title") courseNumber = serializers.CharField(source="key") diff --git a/lms/djangoapps/learner_home/test_serializers.py b/lms/djangoapps/learner_home/test_serializers.py index 1010c686e5..8dc9eca7ad 100644 --- a/lms/djangoapps/learner_home/test_serializers.py +++ b/lms/djangoapps/learner_home/test_serializers.py @@ -765,9 +765,7 @@ class TestProgramsSerializer(TestCase): output_data = RelatedProgramSerializer(input_data).data # Test the output - self.assertEqual( - output_data['bannerImgSrc'], None - ) + self.assertEqual(output_data["bannerImgSrc"], None) def test_empty_sessions(self): input_data = {"relatedPrograms": []} @@ -883,6 +881,38 @@ class TestUnfulfilledEntitlementSerializer(LearnerDashboardBaseTest): assert output_data["courseProvider"] is not None assert output_data["programs"] == {"relatedPrograms": []} + def test_no_image(self): + # Given entitlements + ( + unfulfilled_entitlement, + pseudo_sessions, + available_sessions, + ) = self.make_unfulfilled_entitlement() + + # where pseudo sessions don't have images + for course_uuid in pseudo_sessions: + pseudo_session = pseudo_sessions[course_uuid] + pseudo_session["image"] = None + + pseudo_session_course_overviews = self.make_pseudo_session_course_overviews( + unfulfilled_entitlement, pseudo_sessions + ) + + context = { + "unfulfilled_entitlement_pseudo_sessions": pseudo_sessions, + "course_entitlement_available_sessions": available_sessions, + "pseudo_session_course_overviews": pseudo_session_course_overviews, + "programs": {}, + } + + # When I serialize + output_data = UnfulfilledEntitlementSerializer( + unfulfilled_entitlement, context=context + ).data + + # Then I get None for bannerImgSrc instead of throwing an exception + self.assertIsNone(output_data["course"]["bannerImgSrc"]) + def test_programs(self): ( unfulfilled_entitlement,