"""Extended tests for database error paths.""" import os import pytest import sqlite3 import tempfile from factsdb.database import DatabaseManager from factsdb.config import DatabaseConfig class TestDatabaseInitError: def test_init_readonly_path(self, tmp_path, monkeypatch): """Test that database init handles permission errors gracefully.""" ro_dir = tmp_path / "readonly" ro_dir.mkdir() ro_dir.chmod(0o000) db_path = str(ro_dir / "test.db") config = DatabaseConfig(path=db_path) try: with pytest.raises(Exception): DatabaseManager(config) finally: ro_dir.chmod(0o755) def test_init_creates_dir(self, tmp_path): """Test that database init creates parent directory.""" subdir = tmp_path / "new_sub" subdir.mkdir() db_path = str(subdir / "test.db") config = DatabaseConfig(path=db_path) mgr = DatabaseManager(config) assert mgr is not None class TestGetFactByIdJsonErrors: def test_get_fact_bad_key_entities(self, tmp_path): """Test get_fact_by_id handles bad JSON in key_entities.""" db_path = str(tmp_path / "test.db") config = DatabaseConfig(path=db_path) dm = DatabaseManager(config) dm.create_table("t1") dm.insert_fact("t1", {"fact": "F1", "key_entities": ["e"]}) with dm.get_connection() as conn: conn.execute("UPDATE facts SET key_entities = 'bad_json' WHERE id = 1") conn.commit() fact = dm.get_fact_by_id(1) assert fact is not None assert fact["key_entities"] == [] def test_get_fact_bad_key_dates(self, tmp_path): """Test get_fact_by_id handles bad JSON in key_dates.""" db_path = str(tmp_path / "test.db") config = DatabaseConfig(path=db_path) dm = DatabaseManager(config) dm.create_table("t1") dm.insert_fact("t1", {"fact": "F1", "key_dates": ["d"]}) with dm.get_connection() as conn: conn.execute("UPDATE facts SET key_dates = 'bad_json' WHERE id = 1") conn.commit() fact = dm.get_fact_by_id(1) assert fact is not None assert fact["key_dates"] == [] def test_get_facts_bad_key_dates(self, tmp_path): """Test get_facts handles bad JSON in key_dates.""" db_path = str(tmp_path / "test.db") config = DatabaseConfig(path=db_path) dm = DatabaseManager(config) dm.create_table("t1") dm.insert_fact("t1", {"fact": "F1", "key_dates": ["d"]}) with dm.get_connection() as conn: conn.execute("UPDATE facts SET key_dates = 'bad_json' WHERE id = 1") conn.commit() facts = dm.get_facts("t1") assert facts[0]["key_dates"] == []