output to out/feeds/*
This commit is contained in:
parent
beac981047
commit
6fd3b598ab
11 changed files with 298 additions and 16 deletions
|
|
@ -1,6 +1,8 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from pathlib import Path
|
||||
from typing import Any, cast
|
||||
|
||||
|
|
@ -205,6 +207,7 @@ def test_render_dashboard_shows_dashboard_information_architecture(
|
|||
|
||||
assert "Operational snapshot" in body
|
||||
assert "Running executions" in body
|
||||
assert "Published feeds" in body
|
||||
assert 'href="/sources"' in body
|
||||
assert 'href="/runs"' in body
|
||||
assert "Create source" in body
|
||||
|
|
@ -246,6 +249,141 @@ def test_render_dashboard_describes_log_artifact_footprint(
|
|||
asyncio.run(run())
|
||||
|
||||
|
||||
def test_load_dashboard_view_lists_source_feed_artifacts(
|
||||
monkeypatch, tmp_path: Path
|
||||
) -> None:
|
||||
db_path = tmp_path / "dashboard-feeds.db"
|
||||
monkeypatch.setenv("REPUBLISHER_DB_PATH", str(db_path))
|
||||
app = create_app()
|
||||
out_dir = tmp_path / "out"
|
||||
log_dir = out_dir / "logs"
|
||||
app.config["REPUB_LOG_DIR"] = log_dir
|
||||
log_dir.mkdir(parents=True)
|
||||
|
||||
create_source(
|
||||
name="Available source",
|
||||
slug="available-source",
|
||||
source_type="feed",
|
||||
notes="",
|
||||
spider_arguments="",
|
||||
enabled=False,
|
||||
cron_minute="*/5",
|
||||
cron_hour="*",
|
||||
cron_day_of_month="*",
|
||||
cron_day_of_week="*",
|
||||
cron_month="*",
|
||||
feed_url="https://example.com/available.xml",
|
||||
)
|
||||
create_source(
|
||||
name="Missing source",
|
||||
slug="missing-source",
|
||||
source_type="feed",
|
||||
notes="",
|
||||
spider_arguments="",
|
||||
enabled=False,
|
||||
cron_minute="*/5",
|
||||
cron_hour="*",
|
||||
cron_day_of_month="*",
|
||||
cron_day_of_week="*",
|
||||
cron_month="*",
|
||||
feed_url="https://example.com/missing.xml",
|
||||
)
|
||||
|
||||
feed_dir = out_dir / "feeds" / "available-source"
|
||||
feed_dir.mkdir(parents=True)
|
||||
feed_path = feed_dir / "feed.rss"
|
||||
feed_path.write_bytes(b"x" * 1024)
|
||||
(feed_dir / "audio.mp3").write_bytes(b"y" * 2048)
|
||||
reference_time = datetime(2026, 3, 30, 12, 30, tzinfo=UTC)
|
||||
updated_at = reference_time - timedelta(minutes=32)
|
||||
updated_at_epoch = updated_at.timestamp()
|
||||
os.utime(feed_path, (updated_at_epoch, updated_at_epoch))
|
||||
|
||||
source_feeds = cast(
|
||||
tuple[dict[str, object], ...],
|
||||
load_dashboard_view(log_dir=log_dir, now=reference_time)["source_feeds"],
|
||||
)
|
||||
|
||||
assert source_feeds == (
|
||||
{
|
||||
"source": "Available source",
|
||||
"slug": "available-source",
|
||||
"feed_href": "/feeds/available-source/feed.rss",
|
||||
"feed_status_label": "Available",
|
||||
"feed_status_tone": "done",
|
||||
"feed_exists": True,
|
||||
"last_updated": "32 minutes ago",
|
||||
"last_updated_iso": updated_at.isoformat(),
|
||||
"artifact_footprint": "3.0 KB",
|
||||
},
|
||||
{
|
||||
"source": "Missing source",
|
||||
"slug": "missing-source",
|
||||
"feed_href": "/feeds/missing-source/feed.rss",
|
||||
"feed_status_label": "Missing",
|
||||
"feed_status_tone": "failed",
|
||||
"feed_exists": False,
|
||||
"last_updated": "Never published",
|
||||
"last_updated_iso": None,
|
||||
"artifact_footprint": "0 B",
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
def test_render_dashboard_shows_source_feed_links_and_statuses(
|
||||
monkeypatch, tmp_path: Path
|
||||
) -> None:
|
||||
db_path = tmp_path / "dashboard-feed-links.db"
|
||||
monkeypatch.setenv("REPUBLISHER_DB_PATH", str(db_path))
|
||||
app = create_app()
|
||||
app.config["REPUB_LOG_DIR"] = tmp_path / "out" / "logs"
|
||||
|
||||
create_source(
|
||||
name="Published source",
|
||||
slug="published-source",
|
||||
source_type="feed",
|
||||
notes="",
|
||||
spider_arguments="",
|
||||
enabled=False,
|
||||
cron_minute="*/5",
|
||||
cron_hour="*",
|
||||
cron_day_of_month="*",
|
||||
cron_day_of_week="*",
|
||||
cron_month="*",
|
||||
feed_url="https://example.com/published.xml",
|
||||
)
|
||||
create_source(
|
||||
name="Missing source",
|
||||
slug="missing-source",
|
||||
source_type="feed",
|
||||
notes="",
|
||||
spider_arguments="",
|
||||
enabled=False,
|
||||
cron_minute="*/5",
|
||||
cron_hour="*",
|
||||
cron_day_of_month="*",
|
||||
cron_day_of_week="*",
|
||||
cron_month="*",
|
||||
feed_url="https://example.com/missing.xml",
|
||||
)
|
||||
|
||||
async def run() -> None:
|
||||
published_feed = tmp_path / "out" / "feeds" / "published-source" / "feed.rss"
|
||||
published_feed.parent.mkdir(parents=True)
|
||||
published_feed.write_text("<rss/>\n", encoding="utf-8")
|
||||
|
||||
body = str(await render_dashboard(app))
|
||||
|
||||
assert "Published feeds" in body
|
||||
assert 'href="/feeds/published-source/feed.rss"' in body
|
||||
assert 'href="/feeds/missing-source/feed.rss"' in body
|
||||
assert "Available" in body
|
||||
assert "Missing" in body
|
||||
assert "Never published" in body
|
||||
|
||||
asyncio.run(run())
|
||||
|
||||
|
||||
def test_render_sources_shows_table_and_create_link() -> None:
|
||||
async def run() -> None:
|
||||
body = str(await render_sources())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue