- 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
77 lines
2.8 KiB
Python
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"] == []
|