44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
"""Unit tests for SQLite WAL state persistence and native backup/restore."""
|
|
|
|
from pathlib import Path
|
|
|
|
from src.runtime.storage.sqlite_store import SQLiteStore
|
|
|
|
|
|
def test_sqlite_claim_and_transitions(tmp_path: Path):
|
|
db_file = tmp_path / "test.db"
|
|
store = SQLiteStore(db_file)
|
|
|
|
fp = "e" * 64
|
|
is_new, rec = store.claim_or_get_execution(fp, "https://example.com", "trafilatura", "1.0.0")
|
|
assert is_new is True
|
|
assert rec["current_status"] == "received"
|
|
|
|
# Transition to validated
|
|
store.record_transition(fp, "validated", reason="Passed pre-call checks")
|
|
updated = store.get_execution(fp)
|
|
assert updated is not None
|
|
assert updated["current_status"] == "validated"
|
|
|
|
|
|
def test_sqlite_native_backup_and_restore(tmp_path: Path):
|
|
db_file = tmp_path / "main.db"
|
|
backup_file = tmp_path / "backup.db"
|
|
|
|
store = SQLiteStore(db_file)
|
|
fp = "b" * 64
|
|
store.claim_or_get_execution(fp, "https://example.com/backup", "trafilatura", "1.0.0")
|
|
|
|
# Native backup
|
|
store.backup_db(backup_file)
|
|
assert backup_file.exists()
|
|
|
|
# Create new store from restored db
|
|
restore_target = tmp_path / "restored.db"
|
|
new_store = SQLiteStore(restore_target)
|
|
new_store.restore_db(backup_file)
|
|
|
|
rec = new_store.get_execution(fp)
|
|
assert rec is not None
|
|
assert rec["source_url"] == "https://example.com/backup"
|