FactsDB/tests/test_database_ext.py
Jarian Cottingham 93e287f88b test: add comprehensive test suite with 95% coverage
- Add pytest test suite across all modules (config, database, file_processor,
  ai_processor, api, scheduler, monitoring, ftp_server)
- 145 tests covering normal paths, error handling, edge cases
- Mock external dependencies (AI endpoint, requests, pyftpdlib)
- 95% code coverage with fail-under=90 threshold in CI
- Update CI workflow to run pytest with coverage enforcement
- Add pyproject.toml with pytest/coverage configuration
2026-07-06 16:27:51 +00:00

77 lines
2.8 KiB
Python

"""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"] == []