republisher/tests/test_config.py
2026-03-29 13:52:23 +02:00

131 lines
3.8 KiB
Python

from pathlib import Path
from repub.config import (
FeedConfig,
RepublisherConfig,
build_base_settings,
build_feed_settings,
load_config,
)
def test_load_config_resolves_relative_out_dir_against_config_path(
tmp_path: Path,
) -> None:
config_path = tmp_path / "configs" / "repub.toml"
config_path.parent.mkdir(parents=True)
config_path.write_text(
"""
out_dir = "../mirror"
[[feeds]]
name = "gp-pod"
url = "https://guardianproject.info/podcast/podcast.xml"
[[feeds]]
name = "nasa"
url = "https://www.nasa.gov/rss/dyn/breaking_news.rss"
""".strip()
+ "\n",
encoding="utf-8",
)
config = load_config(config_path)
assert config.out_dir == (tmp_path / "mirror").resolve()
assert config.feeds == (
FeedConfig(
name="gp-pod",
url="https://guardianproject.info/podcast/podcast.xml",
),
FeedConfig(
name="nasa",
url="https://www.nasa.gov/rss/dyn/breaking_news.rss",
),
)
def test_load_config_preserves_absolute_out_dir(tmp_path: Path) -> None:
absolute_out_dir = (tmp_path / "absolute-out").resolve()
config_path = tmp_path / "repub.toml"
config_path.write_text(
f"""
out_dir = "{absolute_out_dir}"
[[feeds]]
name = "nasa"
url = "https://www.nasa.gov/rss/dyn/breaking_news.rss"
""".strip()
+ "\n",
encoding="utf-8",
)
config = load_config(config_path)
assert config.out_dir == absolute_out_dir
def test_build_feed_settings_derives_output_paths_from_out_dir(tmp_path: Path) -> None:
out_dir = (tmp_path / "mirror").resolve()
config = RepublisherConfig(
config_path=tmp_path / "repub.toml",
out_dir=out_dir,
feeds=(
FeedConfig(
name="nasa",
url="https://www.nasa.gov/rss/dyn/breaking_news.rss",
),
),
scrapy_settings={"LOG_LEVEL": "DEBUG"},
)
base_settings = build_base_settings(config)
feed_settings = build_feed_settings(
base_settings, out_dir=out_dir, feed_name="nasa"
)
assert base_settings["LOG_LEVEL"] == "DEBUG"
assert feed_settings["REPUBLISHER_OUT_DIR"] == str(out_dir)
assert feed_settings["LOG_FILE"] == str(out_dir / "logs" / "nasa.log")
assert feed_settings["HTTPCACHE_DIR"] == str(out_dir / "httpcache")
assert feed_settings["IMAGES_STORE"] == str(out_dir / "nasa" / "images")
assert feed_settings["AUDIO_STORE"] == str(out_dir / "nasa" / "audio")
assert feed_settings["VIDEO_STORE"] == str(out_dir / "nasa" / "video")
assert feed_settings["FILES_STORE"] == str(out_dir / "nasa" / "files")
assert feed_settings["FEEDS"] == {
str(out_dir / "nasa.rss"): {
"format": "rss",
"postprocessing": [],
"feed_name": "nasa",
}
}
def test_build_feed_settings_uses_runtime_media_dir_overrides(tmp_path: Path) -> None:
out_dir = (tmp_path / "mirror").resolve()
config = RepublisherConfig(
config_path=tmp_path / "repub.toml",
out_dir=out_dir,
feeds=(
FeedConfig(
name="gp-pod",
url="https://guardianproject.info/podcast/podcast.xml",
),
),
scrapy_settings={
"REPUBLISHER_VIDEO_DIR": "videos-custom",
"REPUBLISHER_AUDIO_DIR": "audio-custom",
},
)
base_settings = build_base_settings(config)
feed_settings = build_feed_settings(
base_settings,
out_dir=out_dir,
feed_name="gp-pod",
)
assert feed_settings["REPUBLISHER_VIDEO_DIR"] == "videos-custom"
assert feed_settings["REPUBLISHER_AUDIO_DIR"] == "audio-custom"
assert feed_settings["VIDEO_STORE"] == str(out_dir / "gp-pod" / "videos-custom")
assert feed_settings["AUDIO_STORE"] == str(out_dir / "gp-pod" / "audio-custom")