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())