Files
pigway-frame-flow/tests/test_poetry.py
T

54 lines
1.9 KiB
Python
Raw Permalink Normal View History

from io import BytesIO
import pytest
from PIL import Image
from pigway_frame_flow.providers.poetry import catalog, get_poem
def test_daily_selection_is_stable_and_changes_next_day():
today = get_poem("2026-10-02")
assert today == get_poem("2026-10-02")
assert today["id"] != get_poem("2026-10-03")["id"]
assert len({p["id"] for p in catalog()}) == 20
@pytest.mark.parametrize("profile", ["color", "grayscale"])
def test_poetry_native_size(service, profile):
image = Image.open(BytesIO(service.renderer.render("daily-poetry", {}, profile)))
assert image.size == (1200, 1600)
def test_selected_poem_and_custom_poem(service):
selected = service.renderer.resolve("daily-poetry", {"poem_id": "jing-ye-si"})
assert selected["poem_title"] == "静夜思" and selected["poem_author"] == "李白"
custom = service.renderer.resolve(
"daily-poetry", {"poem_title": "Custom", "poem_lines": "User text"}
)
assert custom["poem_title"] == "Custom" and custom["poem_lines"] == "User text"
def test_poetry_api_validation(client):
assert client.get("/api/v1/providers/poetry").status_code == 200
assert client.get("/api/v1/providers/poetry?date=wrong").status_code == 400
assert client.get("/api/v1/providers/poetry?poem_id=missing").status_code == 400
def test_poetry_does_not_fetch_unrelated_weather(service):
def unwanted():
raise AssertionError("Poetry must not fetch weather")
service.renderer.weather.get_current = unwanted
assert service.renderer.render("daily-poetry", {})
def test_final_write_gate_blocks_queued_writes(service):
from pigway_frame_flow.errors import FlowError
service.settings.mock = False
service.settings.write_enabled = False
with pytest.raises(FlowError):
service._start_write("queued-operation")
# Disabled writes leave pending override restoration intact.
service.expire()