diff --git a/backend/app/services/feed_generator.py b/backend/app/services/feed_generator.py index d740a9e..4a4e2c2 100644 --- a/backend/app/services/feed_generator.py +++ b/backend/app/services/feed_generator.py @@ -25,6 +25,7 @@ def generate_feed(db: Session, newsletter_id: str): fg.logo(logo_url) fg.icon(icon_url) fg.link(href=feed_url, rel="self") + fg.link(href=settings.app_base_url, rel="alternate") sender_emails = ", ".join([s.email for s in newsletter.senders]) fg.description(f"A feed of newsletters from {sender_emails}") diff --git a/backend/app/tests/test_routers.py b/backend/app/tests/test_routers.py index 5ae8b7a..6e9a0df 100644 --- a/backend/app/tests/test_routers.py +++ b/backend/app/tests/test_routers.py @@ -182,6 +182,11 @@ def test_get_newsletter_feed(client: TestClient): root = ET.fromstring(response.text) # Atom feed uses a namespace, so we need to include it in our tag searches ns = {"atom": "http://www.w3.org/2005/Atom"} + links = root.findall("atom:link", ns) + assert any( + link.get("rel") == "alternate" and link.get("href") == "http://localhost:8000" + for link in links + ) logo = root.find("atom:logo", ns) assert logo is not None assert logo.text == "http://localhost:8000/logo.png" diff --git a/backend/app/tests/test_services.py b/backend/app/tests/test_services.py index a0c47bf..3f57a3a 100644 --- a/backend/app/tests/test_services.py +++ b/backend/app/tests/test_services.py @@ -40,6 +40,7 @@ def test_generate_feed(db_session: Session): # In a real scenario, you'd use an XML parser to validate structure and content more thoroughly assert f"