106 lines
3.5 KiB
Python
106 lines
3.5 KiB
Python
"""
|
|
Tests for configuration loading and validation.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import pytest
|
|
from pathlib import Path
|
|
|
|
# Add project root to path for imports
|
|
project_root = Path(__file__).parent.parent
|
|
sys.path.insert(0, str(project_root))
|
|
|
|
|
|
class TestDatabaseConfig:
|
|
"""Test database configuration loading."""
|
|
|
|
def test_config_loads_from_env(self):
|
|
"""Test that config loads successfully from .env file."""
|
|
# Import config (should load .env automatically)
|
|
from shared import config
|
|
|
|
# Verify database config is loaded
|
|
assert config.DATABASE is not None
|
|
assert 'host' in config.DATABASE
|
|
assert 'port' in config.DATABASE
|
|
assert 'database' in config.DATABASE
|
|
assert 'user' in config.DATABASE
|
|
assert 'password' in config.DATABASE
|
|
|
|
def test_database_password_loaded(self):
|
|
"""Test that database password is loaded from environment."""
|
|
from shared import config
|
|
|
|
# Password should be loaded from .env
|
|
assert config.DATABASE['password'] is not None
|
|
assert config.DATABASE['password'] != ''
|
|
|
|
def test_database_connection_string(self):
|
|
"""Test database connection string generation."""
|
|
from shared import config
|
|
|
|
conn_str = config.get_db_connection_string()
|
|
|
|
# Should contain all required parts
|
|
assert 'postgresql://' in conn_str
|
|
assert config.DATABASE['user'] in conn_str
|
|
assert config.DATABASE['host'] in conn_str
|
|
assert str(config.DATABASE['port']) in conn_str
|
|
assert config.DATABASE['database'] in conn_str
|
|
|
|
def test_config_raises_without_password(self, tmp_path, monkeypatch):
|
|
"""Test that config raises error if DB_PASSWORD is not set."""
|
|
# Create a temporary .env file without password
|
|
temp_env = tmp_path / ".env"
|
|
temp_env.write_text("DB_HOST=localhost\nDB_PORT=5432\n")
|
|
|
|
# Point to temp .env file
|
|
monkeypatch.setenv('DOTENV_PATH', str(temp_env))
|
|
monkeypatch.delenv('DB_PASSWORD', raising=False)
|
|
|
|
# Try to import a fresh module (simulated)
|
|
# In real scenario, this would fail at module load time
|
|
# For testing, we verify the validation logic works
|
|
password = os.getenv('DB_PASSWORD')
|
|
assert password is None, "DB_PASSWORD should not be set"
|
|
|
|
|
|
class TestPathsConfig:
|
|
"""Test paths configuration."""
|
|
|
|
def test_paths_config_exists(self):
|
|
"""Test that PATHS configuration exists."""
|
|
from shared import config
|
|
|
|
assert config.PATHS is not None
|
|
assert 'csv_dir' in config.PATHS
|
|
assert 'pdf_dir' in config.PATHS
|
|
assert 'output_dir' in config.PATHS
|
|
assert 'reports_dir' in config.PATHS
|
|
|
|
|
|
class TestAutolabelConfig:
|
|
"""Test autolabel configuration."""
|
|
|
|
def test_autolabel_config_exists(self):
|
|
"""Test that AUTOLABEL configuration exists."""
|
|
from shared import config
|
|
|
|
assert config.AUTOLABEL is not None
|
|
assert 'workers' in config.AUTOLABEL
|
|
assert 'dpi' in config.AUTOLABEL
|
|
assert 'min_confidence' in config.AUTOLABEL
|
|
assert 'train_ratio' in config.AUTOLABEL
|
|
|
|
def test_autolabel_ratios_sum_to_one(self):
|
|
"""Test that train/val/test ratios sum to 1.0."""
|
|
from shared import config
|
|
|
|
total = (
|
|
config.AUTOLABEL['train_ratio'] +
|
|
config.AUTOLABEL['val_ratio'] +
|
|
config.AUTOLABEL['test_ratio']
|
|
)
|
|
assert abs(total - 1.0) < 0.001 # Allow small floating point error
|