From 535a60233ad07c05cd4451a7bd26fbdabde4c1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Z=C3=BCbeyde=20Civelek?= Date: Mon, 16 Feb 2026 13:36:55 +0100 Subject: [PATCH] fix(serializer): do not remove HTML tags for titles Co-authored-by: Cursor --- cds/modules/records/serializers/json.py | 8 +------- tests/unit/test_records.py | 2 +- tests/unit/test_serializer.py | 17 +++++------------ 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/cds/modules/records/serializers/json.py b/cds/modules/records/serializers/json.py index ef5a103c7..e4843faaf 100644 --- a/cds/modules/records/serializers/json.py +++ b/cds/modules/records/serializers/json.py @@ -31,7 +31,7 @@ has_read_record_eos_path_permission, has_read_record_permission, ) -from ..utils import HTMLTagRemover, parse_video_chapters, remove_html_tags +from ..utils import HTMLTagRemover, parse_video_chapters from marshmallow_utils.html import sanitize_html, ALLOWED_HTML_ATTRS, ALLOWED_CSS_STYLES CUSTOM_ALLOWED_ATTRS = { @@ -61,9 +61,6 @@ def _sanitize_metadata(self, metadata): if "title" in metadata and "title" in metadata["title"]: title = metadata["title"]["title"] title = self.html_tag_remover.unescape(title) - metadata["title"]["title"] = remove_html_tags( - self.html_tag_remover, title - ) if "description" in metadata: description = metadata["description"] @@ -79,9 +76,6 @@ def _sanitize_metadata(self, metadata): if "title" in t and "title" in t["title"]: t_title = t["title"]["title"] t_title = self.html_tag_remover.unescape(t_title) - t["title"]["title"] = remove_html_tags( - self.html_tag_remover, t_title - ) if "description" in t: t_desc = t["description"] diff --git a/tests/unit/test_records.py b/tests/unit/test_records.py index 626156cc0..ecc55476c 100644 --- a/tests/unit/test_records.py +++ b/tests/unit/test_records.py @@ -158,7 +158,7 @@ def test_records_rest( res = client.get(url2, headers=json_headers) assert res.status_code == 200 video_dict = json.loads(res.data.decode("utf-8")) - assert video_dict["metadata"]["title"]["title"] == "My english title" + assert video_dict["metadata"]["title"]["title"] == "My english title" expect_desc = "in tempor reprehenderit enim eiusmod html" assert video_dict["metadata"]["description"] == expect_desc diff --git a/tests/unit/test_serializer.py b/tests/unit/test_serializer.py index 9c39f94b8..3e61446a9 100644 --- a/tests/unit/test_serializer.py +++ b/tests/unit/test_serializer.py @@ -191,20 +191,13 @@ def test_cds_json_serializer_sanitization(video_record_metadata): assert 'Safe content' in description # Keep safe HTML tags like assert 'bold' in description - - # Remove everything in title + + # Title: only unescape, no HTML tag removal title = result['metadata']['title']['title'] - assert '' not in title assert 'Test' in title and 'Title' in title - assert '' not in title - - # --- Translations checks --- + assert 'bold' in title + + # Translations: descriptions sanitized, titles only unescaped translations = result['metadata']['translations'] for tr in translations: - # description assert '