Add file URL RSS feed coverage

This commit is contained in:
Abel Luck 2026-03-29 14:10:20 +02:00
parent 20b9759193
commit fc102d9445
3 changed files with 69 additions and 0 deletions

View file

@ -15,3 +15,20 @@ Because `out_dir` in [`demo/repub.toml`](/home/abel/src/guardianproject/anynews/
## Files
- `repub.toml`: example runtime config with feed definitions and Scrapy overrides
- `fixtures/local-feed.rss`: simple local RSS fixture for `file://` feed testing
## Local File Feed
`repub` already accepts absolute `file://` feed URIs. To point it at the demo fixture, generate an absolute URI like this from the repo root:
```shell
python3 -c 'from pathlib import Path; print(Path("demo/fixtures/local-feed.rss").resolve().as_uri())'
```
Then use that value in a config entry:
```toml
[[feeds]]
name = "local-demo"
url = "file:///absolute/path/to/demo/fixtures/local-feed.rss"
```

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Local Demo Feed</title>
<link>https://example.com/</link>
<description>Simple local RSS fixture for file:// testing</description>
<language>en</language>
<item>
<title>Local Demo Entry</title>
<link>https://example.com/local-demo-entry</link>
<description>Hello from a local file feed.</description>
<guid isPermaLink="true">https://example.com/local-demo-entry</guid>
<pubDate>Sat, 29 Mar 2026 12:00:00 GMT</pubDate>
</item>
</channel>
</rss>

36
tests/test_file_feeds.py Normal file
View file

@ -0,0 +1,36 @@
from pathlib import Path
from repub import entrypoint as entrypoint_module
def test_entrypoint_supports_file_feed_urls(tmp_path: Path, monkeypatch) -> None:
fixture_path = (
Path(__file__).resolve().parents[1] / "demo" / "fixtures" / "local-feed.rss"
).resolve()
config_path = tmp_path / "repub.toml"
config_path.write_text(
f"""
out_dir = "out"
[[feeds]]
name = "local-file"
url = "{fixture_path.as_uri()}"
[scrapy.settings]
LOG_LEVEL = "ERROR"
DOWNLOAD_TIMEOUT = 5
""".strip()
+ "\n",
encoding="utf-8",
)
monkeypatch.setattr(entrypoint_module, "check_runtime", lambda *_: True)
exit_code = entrypoint_module.entrypoint(["--config", str(config_path)])
output_path = tmp_path / "out" / "local-file.rss"
assert exit_code == 0
assert output_path.exists()
output = output_path.read_text(encoding="utf-8")
assert "<title>Local Demo Feed</title>" in output
assert "<title>Local Demo Entry</title>" in output