from __future__ import annotations import asyncio from pathlib import Path from repub.web import create_app def test_dev_mode_serves_published_feeds(monkeypatch, tmp_path: Path) -> None: db_path = tmp_path / "dev-mode.db" feeds_dir = tmp_path / "out" / "feeds" monkeypatch.setenv("REPUBLISHER_DB_PATH", str(db_path)) async def run() -> None: app = create_app(dev_mode=True) app.config["REPUB_FEEDS_DIR"] = feeds_dir feed_path = feeds_dir / "demo-source" / "feed.rss" feed_path.parent.mkdir(parents=True) feed_path.write_text("\n", encoding="utf-8") client = app.test_client() response = await client.get("/feeds/demo-source/feed.rss") assert response.status_code == 200 assert response.mimetype == "application/rss+xml" assert await response.get_data(as_text=True) == "\n" asyncio.run(run()) def test_dev_mode_serves_feed_enclosure_assets(monkeypatch, tmp_path: Path) -> None: db_path = tmp_path / "dev-mode-assets.db" feeds_dir = tmp_path / "out" / "feeds" monkeypatch.setenv("REPUBLISHER_DB_PATH", str(db_path)) async def run() -> None: app = create_app(dev_mode=True) app.config["REPUB_FEEDS_DIR"] = feeds_dir enclosure_path = feeds_dir / "demo-source" / "audio" / "episode.mp3" enclosure_path.parent.mkdir(parents=True) enclosure_path.write_bytes(b"mp3-data") client = app.test_client() response = await client.get("/feeds/demo-source/audio/episode.mp3") assert response.status_code == 200 assert await response.get_data() == b"mp3-data" asyncio.run(run()) def test_default_mode_does_not_serve_published_feeds( monkeypatch, tmp_path: Path ) -> None: db_path = tmp_path / "default-mode.db" feeds_dir = tmp_path / "out" / "feeds" monkeypatch.setenv("REPUBLISHER_DB_PATH", str(db_path)) async def run() -> None: app = create_app() app.config["REPUB_FEEDS_DIR"] = feeds_dir feed_path = feeds_dir / "demo-source" / "feed.rss" feed_path.parent.mkdir(parents=True) feed_path.write_text("\n", encoding="utf-8") client = app.test_client() response = await client.get("/feeds/demo-source/feed.rss") assert response.status_code == 404 asyncio.run(run())