"""Tests for automatic and backfilled note titles.""" import sqlite3 from kb.ingest.note import auto_title from kb.maintenance import backfill_note_titles from kb.maintenance.backfill_note_titles import find_repairs def test_auto_title_strips_markdown_and_limits_length(): assert auto_title("## Useful heading\nBody") == "Useful heading" assert auto_title("x" * 100) == "x" * 80 def test_find_repairs_only_selects_synthetic_note_titles(): conn = sqlite3.connect(":memory:") conn.row_factory = sqlite3.Row conn.executescript( """ CREATE TABLE documents ( id INTEGER PRIMARY KEY, title TEXT, original_filename TEXT, doc_type TEXT ); CREATE TABLE chunks ( id INTEGER PRIMARY KEY, document_id INTEGER, chunk_index INTEGER, text TEXT, metadata TEXT ); INSERT INTO documents VALUES (1, '7dec828a-1234-4567-89ab-123456789abc_note.note', '7dec828a-1234-4567-89ab-123456789abc_note.note', 'note'), (2, 'A deliberate title', 'named.note', 'note'); INSERT INTO chunks VALUES (1, 1, 0, '# Derived title\nBody', '{}'), (2, 2, 0, 'Must not replace', '{}'); """ ) assert find_repairs(conn) == [{ "document_id": 1, "old_title": "7dec828a-1234-4567-89ab-123456789abc_note.note", "new_title": "Derived title", "original_filename": "7dec828a-1234-4567-89ab-123456789abc_note.note", }] def test_apply_repairs_refreshes_title_search_text_and_vector(monkeypatch): conn = sqlite3.connect(":memory:") conn.row_factory = sqlite3.Row conn.executescript( """ CREATE TABLE documents (id INTEGER PRIMARY KEY, title TEXT, updated_at TEXT); CREATE TABLE chunks ( id INTEGER PRIMARY KEY, document_id INTEGER, chunk_index INTEGER, text TEXT, metadata TEXT, enriched_text TEXT ); CREATE TABLE chunks_vec (embedding BLOB, chunk_id INTEGER); INSERT INTO documents VALUES (1, 'old', NULL); INSERT INTO chunks VALUES (3, 1, 0, 'New title\nBody', '{}', 'old text'); INSERT INTO chunks_vec VALUES (X'00', 3); """ ) monkeypatch.setattr( backfill_note_titles.embeddings, "embed_texts", lambda texts: [[1.0, 2.0, 3.0] for _ in texts], ) backfill_note_titles.apply_repairs(conn, [{ "document_id": 1, "new_title": "New title" }]) assert conn.execute("SELECT title FROM documents").fetchone()[0] == "New title" assert conn.execute("SELECT enriched_text FROM chunks").fetchone()[0] == ( "New title\n\nNew title\nBody" ) assert len(conn.execute("SELECT embedding FROM chunks_vec").fetchone()[0]) == 12