journal-bot/tests/test_process.py

74 lines
2.4 KiB
Python

from datetime import date
from pathlib import Path
from journal_bot.process import process_once
from journal_bot.queue import Queue, QueueItem
from journal_bot.processor_protocol import ProcessorOutput
from journal_bot.vault_writer import VaultWriter
class FakeProcessor:
def __init__(self, output: ProcessorOutput | None = None, healthy=True, raises=None):
self._output = output
self._healthy = healthy
self._raises = raises
def health_check(self):
return self._healthy
def process(self, payload):
if self._raises:
raise self._raises
return self._output
def make_item(update_id=1, text="Hallo"):
return QueueItem(
update_id=update_id,
received_at="2026-06-14T14:32:17+02:00",
type="text",
text=text,
)
def test_process_writes_to_vault_and_completes(tmp_path):
vault = tmp_path / "vault"
(vault / "05 Daily Notes").mkdir(parents=True)
queue = Queue(tmp_path / "q")
queue.enqueue(make_item(1))
processor = FakeProcessor(ProcessorOutput(
target_date="2026-06-14",
target_path="05 Daily Notes/2026-06-14.md",
entry_markdown="## 14:32\nHallo",
))
writer = VaultWriter(vault)
n = process_once(processor, queue, writer, vault_path=vault, today=date(2026, 6, 14))
assert n == 1
assert (tmp_path / "q" / "done" / "1.json").exists()
assert (vault / "05 Daily Notes" / "2026-06-14.md").exists()
def test_process_skips_when_unhealthy(tmp_path):
vault = tmp_path / "vault"
(vault / "05 Daily Notes").mkdir(parents=True)
queue = Queue(tmp_path / "q")
queue.enqueue(make_item(1))
processor = FakeProcessor(healthy=False)
writer = VaultWriter(vault)
n = process_once(processor, queue, writer, vault_path=vault, today=date(2026, 6, 14))
assert n == 0
assert (tmp_path / "q" / "pending" / "1.json").exists()
def test_process_fails_item_on_error(tmp_path):
vault = tmp_path / "vault"
(vault / "05 Daily Notes").mkdir(parents=True)
queue = Queue(tmp_path / "q")
queue.enqueue(make_item(1))
processor = FakeProcessor(raises=RuntimeError("boom"))
writer = VaultWriter(vault)
process_once(processor, queue, writer, vault_path=vault, today=date(2026, 6, 14))
assert (tmp_path / "q" / "pending" / "1.json").exists()
import json
data = json.loads((tmp_path / "q" / "pending" / "1.json").read_text(encoding="utf-8"))
assert data["attempts"] == 1