first commit
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
"""File deliverer: archive writes, receipts, errors.log alerting."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
|
||||
import pytest
|
||||
from _fakes import make_payload
|
||||
|
||||
from sebrief.config import Settings
|
||||
from sebrief.deliver import build_deliverers
|
||||
from sebrief.deliver.base import DeliveryError
|
||||
from sebrief.deliver.file import FileDeliverer
|
||||
from sebrief.models import DigestResult
|
||||
|
||||
|
||||
def make_result() -> DigestResult:
|
||||
return DigestResult(payload=make_payload(), digest=None, markdown="# 다이제스트\n", model_used="m")
|
||||
|
||||
|
||||
def test_deliver_writes_md_and_json_keyed_by_week(tmp_path):
|
||||
deliverer = FileDeliverer(tmp_path / "reports")
|
||||
receipt = deliverer.deliver(make_result())
|
||||
|
||||
md = tmp_path / "reports" / "2026-W36.md"
|
||||
js = tmp_path / "reports" / "2026-W36.json"
|
||||
assert receipt == str(md)
|
||||
assert md.read_text(encoding="utf-8") == "# 다이제스트\n"
|
||||
data = json.loads(js.read_text(encoding="utf-8"))
|
||||
assert data["payload"]["week"] == "2026-W36"
|
||||
assert data["markdown"].startswith("# 다이제스트")
|
||||
|
||||
|
||||
def test_deliver_raises_delivery_error_on_os_error(tmp_path):
|
||||
blocker = tmp_path / "reports"
|
||||
blocker.write_text("file, not a dir")
|
||||
deliverer = FileDeliverer(blocker)
|
||||
with pytest.raises(DeliveryError):
|
||||
deliverer.deliver(make_result())
|
||||
|
||||
|
||||
def test_notify_error_appends_flattened_line(tmp_path):
|
||||
deliverer = FileDeliverer(tmp_path / "reports")
|
||||
deliverer.notify_error("제목", "줄1\n줄2\n")
|
||||
deliverer.notify_error("두번째", "detail")
|
||||
lines = (tmp_path / "reports" / "errors.log").read_text(encoding="utf-8").splitlines()
|
||||
assert len(lines) == 2
|
||||
ts, subject, detail = lines[0].split("\t")
|
||||
assert subject == "제목" and detail == "줄1 | 줄2" and ts
|
||||
assert lines[1].split("\t")[1] == "두번째"
|
||||
|
||||
|
||||
def test_notify_error_never_raises(tmp_path):
|
||||
blocker = tmp_path / "reports"
|
||||
blocker.write_text("file, not a dir")
|
||||
FileDeliverer(blocker).notify_error("s", "d") # must not raise
|
||||
|
||||
|
||||
def test_build_deliverers_is_file_only(tmp_path):
|
||||
settings = Settings(_env_file=None, SEBRIEF_REPORTS_DIR=str(tmp_path / "reports"))
|
||||
deliverers = build_deliverers(settings)
|
||||
assert [d.name for d in deliverers] == ["file"]
|
||||
Reference in New Issue
Block a user