- Add app/db/ abstraction layer: Backend enum, DbConn wrapper, dialect helper (q() for ? vs %s paramstyle), get_conn(), tenant_id() - Auto-detect backend from DATABASE_URL; SQLite remains default when unset — no config change for local deployments - Add tenant_id column to all three logical DBs (main, context, incidents); idempotent ALTER TABLE migration runs before schema scripts on existing DBs - All INSERTs inject tenant_id; SELECTs use (tenant_id = ? OR tenant_id = '') for backward compat with pre-namespacing rows - Add docker-compose.yml with named volume turnstone_pgdata (survives rebuilds) and optional external Postgres support via DATABASE_URL override - Add scripts/migrate_sqlite_to_postgres.py — one-shot idempotent migration for existing SQLite data; ON CONFLICT DO NOTHING for safe re-runs - Fix SSH glean path in pipeline.py to use ensure_schema + get_conn (was still using raw sqlite3.connect + old _SCHEMA without tenant_id) - Fix FTS5 JOIN ambiguity: qualify repeat_count as f.repeat_count in search - Update all tests to use ensure_*_schema fixtures; add row_factory where needed - 394/394 tests passing Closes: #42 Closes: #50
24 lines
741 B
Python
24 lines
741 B
Python
"""Verify the three context tables are created by ensure_context_schema."""
|
|
import sqlite3
|
|
from pathlib import Path
|
|
import pytest
|
|
from app.db.schema import ensure_context_schema
|
|
|
|
|
|
def test_context_tables_created(tmp_path):
|
|
db = tmp_path / "t.db"
|
|
ensure_context_schema(db)
|
|
conn = sqlite3.connect(str(db))
|
|
tables = {r[0] for r in conn.execute(
|
|
"SELECT name FROM sqlite_master WHERE type='table'"
|
|
).fetchall()}
|
|
conn.close()
|
|
assert "context_facts" in tables
|
|
assert "context_documents" in tables
|
|
assert "context_chunks" in tables
|
|
|
|
|
|
def test_context_schema_idempotent(tmp_path):
|
|
db = tmp_path / "t.db"
|
|
ensure_context_schema(db)
|
|
ensure_context_schema(db) # second call must not raise
|