generated from john/python-template
ui/homepage_store.py was the only storage path in the codebase derived from Path(__file__).parents[3] rather than from Settings. That made it the one storage root the operator could not relocate, and it resolved incorrectly outside a source checkout - an installed distribution would have written homepage content into the package directory in site-packages. - config.py: add homepage_dir, defaulting to ./data/homepage so the location is unchanged for anyone launching from the repository root. - homepage_store.py: resolve the directory and markdown path from Settings, with an optional settings parameter on every function so callers and tests can override without patching module constants. HOME_PAGE_DIR and HOME_PAGE_MARKDOWN_PATH constants are replaced by homepage_dir() and homepage_markdown_path(). - tests/ui/test_homepage_store.py: covers the setting being honored, markdown round-tripping, image storage and listing, and two configurations not sharing storage. Note: the default is now CWD-relative, matching artifact_dir and upload_dir, rather than anchored to the repository root. Verification: ruff check src tests clean; 292 passed, 4 skipped. Co-authored-by: Copilot App <[email protected]>
66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
"""Homepage storage resolves its root from settings rather than from `__file__`.
|
|
|
|
The previous module derived its directory from ``Path(__file__).parents[3]``,
|
|
which could not be configured and resolved into the installed package directory
|
|
outside a source checkout.
|
|
"""
|
|
|
|
import pytest
|
|
|
|
from transcription.config import Settings
|
|
from transcription.ui.homepage_store import homepage_dir
|
|
from transcription.ui.homepage_store import latest_homepage_image
|
|
from transcription.ui.homepage_store import list_homepage_images
|
|
from transcription.ui.homepage_store import read_homepage_markdown
|
|
from transcription.ui.homepage_store import save_homepage_markdown
|
|
from transcription.ui.homepage_store import store_homepage_image
|
|
|
|
PNG_BYTES = bytes.fromhex(
|
|
"89504e470d0a1a0a0000000d49484452000000010000000108060000001f15c4890000000a49444154789c6360000002000100"
|
|
"05fe02fea7b1b8000000004945"
|
|
) + b"NDAE\xae\x42\x60\x82"
|
|
|
|
|
|
def _settings(tmp_path) -> Settings:
|
|
return Settings(openrouter_api_key="test-key-abc123", homepage_dir=tmp_path / "homepage")
|
|
|
|
|
|
def test_homepage_dir_follows_the_configured_setting(tmp_path):
|
|
settings = _settings(tmp_path)
|
|
|
|
assert homepage_dir(settings) == tmp_path / "homepage"
|
|
|
|
|
|
def test_markdown_round_trips_through_the_configured_directory(tmp_path):
|
|
settings = _settings(tmp_path)
|
|
|
|
assert read_homepage_markdown(settings) == ""
|
|
|
|
save_homepage_markdown("# Archive", settings)
|
|
|
|
assert (tmp_path / "homepage" / "homepage.md").read_text(encoding="utf-8") == "# Archive"
|
|
assert read_homepage_markdown(settings) == "# Archive"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_images_are_stored_and_listed_from_the_configured_directory(tmp_path):
|
|
settings = _settings(tmp_path)
|
|
|
|
assert list_homepage_images(settings) == []
|
|
assert latest_homepage_image(settings) is None
|
|
|
|
stored = await store_homepage_image(filename="banner.png", file_bytes=PNG_BYTES, settings=settings)
|
|
|
|
assert stored.parent == tmp_path / "homepage"
|
|
assert list_homepage_images(settings) == [stored]
|
|
assert latest_homepage_image(settings) == stored
|
|
|
|
|
|
def test_two_configurations_do_not_share_storage(tmp_path):
|
|
first = Settings(openrouter_api_key="test-key-abc123", homepage_dir=tmp_path / "a")
|
|
second = Settings(openrouter_api_key="test-key-abc123", homepage_dir=tmp_path / "b")
|
|
|
|
save_homepage_markdown("first", first)
|
|
|
|
assert read_homepage_markdown(second) == ""
|