From c151e1bbd9ddf9b087bbf621e92855954c42b241 Mon Sep 17 00:00:00 2001 From: rjv31 Date: Tue, 31 Mar 2026 07:18:24 +0000 Subject: [PATCH] fix: prevent 'null' display when instructor family_name is missing --- .../apps/course_metadata/people.py | 12 +++++- .../apps/course_metadata/tests/test_people.py | 37 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/course_discovery/apps/course_metadata/people.py b/course_discovery/apps/course_metadata/people.py index e35a1de346..e76b05290d 100644 --- a/course_discovery/apps/course_metadata/people.py +++ b/course_discovery/apps/course_metadata/people.py @@ -19,9 +19,19 @@ def _get_api_client(self, partner): ) def _get_node_data(self, person): + # Build full name safely to avoid "null" appearing on marketing site + full_name = " ".join( + part for part in [person.given_name, person.family_name] + if part + ) + + # Preserve salutation if present + if person.salutation: + full_name = f"{person.salutation} {full_name}" + return { 'field_person_slug': person.slug, - 'title': person.full_name, + 'title': full_name.strip(), 'type': 'person', 'status': 1 if person.published else 0 } diff --git a/course_discovery/apps/course_metadata/tests/test_people.py b/course_discovery/apps/course_metadata/tests/test_people.py index a27545cea7..80777c9393 100644 --- a/course_discovery/apps/course_metadata/tests/test_people.py +++ b/course_discovery/apps/course_metadata/tests/test_people.py @@ -148,6 +148,43 @@ def test_person_create_json(self, mock_create_node): }) self.assertDictEqual(data, expected) + def test_person_without_family_name(self): + person = PersonFactory( + partner=self.partner, + given_name='User', + family_name=None + ) + + people = MarketingSitePeople() + data = people._get_node_data(person) # pylint: disable=protected-access + + assert data['title'] == 'User' + + def test_person_with_empty_family_name(self): + person = PersonFactory( + partner=self.partner, + given_name='User', + family_name='' + ) + + people = MarketingSitePeople() + data = people._get_node_data(person) # pylint: disable=protected-access + + assert data['title'] == 'User' + + def test_person_with_salutation(self): + person = PersonFactory( + partner=self.partner, + salutation='Dr.', + given_name='Jane', + family_name='Smith' + ) + + people = MarketingSitePeople() + data = people._get_node_data(person) # pylint: disable=protected-access + + assert data['title'] == 'Dr. Jane Smith' + @responses.activate def test_person_create_failed(self): self.mock_api_client(200)