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.
51 lines
1.5 KiB
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
|
|
|