import re import xml.etree.ElementTree as ET from pathlib import Path import pytest from generate_episode_pages import build_sitemap from website_gen.feed import parse_feed FIXTURE_FEED = Path(__file__).parent / "fixtures" / "feed_sample.xml" @pytest.fixture def episodes(): return parse_feed(FIXTURE_FEED.read_text(encoding="utf-8")) @pytest.fixture def generated_sitemap(episodes): return build_sitemap(episodes) def test_sitemap_contains_no_query_param_urls(generated_sitemap): assert "episode.html?slug=" not in generated_sitemap def test_sitemap_has_one_entry_per_episode(generated_sitemap, episodes): assert generated_sitemap.count("https://lukeattheroost.com/episode/") == len(episodes) def test_static_pages_survive_regeneration(generated_sitemap): for path in ["", "/how-it-works", "/clips", "/stats", "/privacy", "/terms", "/llms.txt"]: assert f"https://lukeattheroost.com{path}" in generated_sitemap def test_lastmod_is_date_only_not_a_timestamp(generated_sitemap): for m in re.findall(r"([^<]*)", generated_sitemap): assert re.fullmatch(r"\d{4}-\d{2}-\d{2}", m), f"bad lastmod: {m}" def test_sitemap_is_valid_xml(generated_sitemap): root = ET.fromstring(generated_sitemap) assert root.tag.endswith("urlset") def test_episode_urls_have_trailing_slash(generated_sitemap): for loc in re.findall(r"(https://lukeattheroost\.com/episode/[^<]*)", generated_sitemap): assert loc.endswith("/"), loc def test_404_page_is_not_listed(generated_sitemap): assert "/404" not in generated_sitemap def test_static_pages_come_before_episodes(generated_sitemap): first_episode = generated_sitemap.index("https://lukeattheroost.com/episode/") last_static = generated_sitemap.index("https://lukeattheroost.com/privacy") assert last_static < first_episode def test_episodes_are_newest_first(generated_sitemap): locs = re.findall(r"https://lukeattheroost\.com/episode/([^<]*)/", generated_sitemap) assert locs[0].startswith("episode-58-") assert locs[1].startswith("episode-57-") def test_declares_xml_and_sitemap_namespace(generated_sitemap): assert generated_sitemap.startswith('') assert 'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"' in generated_sitemap