kiwi/tests/services/community/test_feed.py

51 lines
1.6 KiB
Python

# tests/services/community/test_feed.py
import pytest
from datetime import datetime, timezone
from app.services.community.feed import posts_to_rss
def make_post_dict(**kwargs):
defaults = dict(
slug="kiwi-plan-test-pasta-week",
title="Pasta Week",
description="Seven days of carbs",
published=datetime(2026, 4, 12, 12, 0, 0, tzinfo=timezone.utc),
post_type="plan",
pseudonym="PastaWitch",
)
defaults.update(kwargs)
return defaults
def test_rss_is_valid_xml():
import xml.etree.ElementTree as ET
rss = posts_to_rss([make_post_dict()], base_url="https://menagerie.circuitforge.tech/kiwi")
root = ET.fromstring(rss)
assert root.tag == "rss"
assert root.attrib.get("version") == "2.0"
def test_rss_contains_item():
import xml.etree.ElementTree as ET
rss = posts_to_rss([make_post_dict()], base_url="https://menagerie.circuitforge.tech/kiwi")
root = ET.fromstring(rss)
items = root.findall(".//item")
assert len(items) == 1
def test_rss_item_has_required_fields():
import xml.etree.ElementTree as ET
rss = posts_to_rss([make_post_dict()], base_url="https://menagerie.circuitforge.tech/kiwi")
root = ET.fromstring(rss)
item = root.find(".//item")
assert item.find("title") is not None
assert item.find("link") is not None
assert item.find("pubDate") is not None
def test_rss_empty_posts():
import xml.etree.ElementTree as ET
rss = posts_to_rss([], base_url="https://menagerie.circuitforge.tech/kiwi")
root = ET.fromstring(rss)
items = root.findall(".//item")
assert len(items) == 0