You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
motief/tests/test_qa_similarity.py

51 lines
1.5 KiB

import json
from pathlib import Path
def test_qa_similarity_creates_ledger(tmp_path, monkeypatch):
# Prepare monkeypatched database.db
class DummyDB:
def sample_motions(self, sample_size):
assert sample_size == 2
return [1, 2]
def get_cached_similarities(self, motion_id, top_k):
# return deterministic neighbors
return [
{"id": motion_id * 10 + i, "score": 1.0 - i * 0.1} for i in range(top_k)
]
dummy = DummyDB()
# Monkeypatch the database module to provide .db — use monkeypatch.setitem
# so the override is active for this test and auto-reverts after.
import types
fake_db_module = types.SimpleNamespace(db=dummy)
import sys
monkeypatch.setitem(sys.modules, "database", fake_db_module)
# Ensure thoughts/ledgers inside tmp_path
base = tmp_path
(base / "thoughts" / "ledgers").mkdir(parents=True)
# Monkeypatch cwd so ledger writes to tmp_path/thoughts
monkeypatch.chdir(base)
from scripts.qa_similarity import main
summary = main(db_path=":memory:", sample_size=2, top_k=3)
assert summary["sample_size"] == 2
assert summary["top_k"] == 3
assert 1 in summary["motions"]
assert 2 in summary["motions"]
ledger_path = Path(summary["ledger_path"])
assert ledger_path.exists()
data = json.loads(ledger_path.read_text(encoding="utf-8"))
assert "motions" in data
assert len(data["motions"]) == 2