Files
drt/tests/test_config.py
2026-01-03 22:05:49 +07:00

207 lines
6.7 KiB
Python
Executable File

"""
Unit tests for configuration management
"""
import pytest
from pathlib import Path
from drt.config.models import (
DatabaseConnection,
DatabasePair,
ComparisonSettings,
RowCountSettings,
SchemaSettings,
AggregateSettings,
ReportingSettings,
LoggingSettings,
Config
)
class TestDatabaseConnection:
"""Test DatabaseConnection model"""
def test_database_connection_minimal(self):
"""Test creating a minimal database connection"""
conn = DatabaseConnection(
server="SQLSERVER01",
database="TestDB"
)
assert conn.server == "SQLSERVER01"
assert conn.database == "TestDB"
assert conn.timeout.connection == 30
assert conn.timeout.query == 300
def test_database_connection_with_timeout(self):
"""Test database connection with custom timeout"""
conn = DatabaseConnection(
server="SQLSERVER01",
database="TestDB",
timeout={"connection": 60, "query": 600}
)
assert conn.timeout.connection == 60
assert conn.timeout.query == 600
class TestDatabasePair:
"""Test DatabasePair model"""
def test_database_pair_creation(self):
"""Test creating a database pair"""
pair = DatabasePair(
name="Test_Pair",
enabled=True,
baseline=DatabaseConnection(
server="SQLSERVER01",
database="PROD_DB"
),
target=DatabaseConnection(
server="SQLSERVER01",
database="TEST_DB"
)
)
assert pair.name == "Test_Pair"
assert pair.enabled is True
assert pair.baseline.database == "PROD_DB"
assert pair.target.database == "TEST_DB"
class TestComparisonSettings:
"""Test ComparisonSettings model"""
def test_comparison_settings_health_check(self):
"""Test health check mode settings"""
settings = ComparisonSettings(
mode="health_check",
row_count=RowCountSettings(enabled=True, tolerance_percent=0.0),
schema=SchemaSettings(
enabled=True,
checks={
"column_names": True,
"data_types": True
}
),
aggregates=AggregateSettings(enabled=False)
)
assert settings.mode == "health_check"
assert settings.row_count.enabled is True
assert settings.aggregates.enabled is False
def test_comparison_settings_full_mode(self):
"""Test full mode settings"""
settings = ComparisonSettings(
mode="full",
row_count=RowCountSettings(enabled=True, tolerance_percent=0.0),
schema=SchemaSettings(enabled=True),
aggregates=AggregateSettings(enabled=True, tolerance_percent=0.01)
)
assert settings.mode == "full"
assert settings.aggregates.enabled is True
assert settings.aggregates.tolerance_percent == 0.01
class TestReportingSettings:
"""Test ReportingSettings model"""
def test_reporting_settings_defaults(self):
"""Test default reporting settings"""
settings = ReportingSettings()
assert settings.output_dir == "./reports"
assert settings.formats.html is True
assert settings.formats.csv is True
assert settings.formats.pdf is False
assert settings.include_timestamp is True
def test_reporting_settings_custom(self):
"""Test custom reporting settings"""
settings = ReportingSettings(
output_dir="./custom_reports",
filename_prefix="custom_test",
formats={"html": True, "csv": False, "pdf": True}
)
assert settings.output_dir == "./custom_reports"
assert settings.filename_prefix == "custom_test"
assert settings.formats.pdf is True
class TestLoggingSettings:
"""Test LoggingSettings model"""
def test_logging_settings_defaults(self):
"""Test default logging settings"""
settings = LoggingSettings()
assert settings.level == "INFO"
assert settings.output_dir == "./logs"
assert settings.console.enabled is True
assert settings.file.enabled is True
def test_logging_settings_custom(self):
"""Test custom logging settings"""
settings = LoggingSettings(
level="DEBUG",
console={"enabled": True, "level": "WARNING"}
)
assert settings.level == "DEBUG"
assert settings.console.level == "WARNING"
class TestConfig:
"""Test Config model"""
def test_config_minimal(self):
"""Test creating a minimal config"""
config = Config(
database_pairs=[
DatabasePair(
name="Test",
enabled=True,
baseline=DatabaseConnection(
server="SERVER01",
database="PROD"
),
target=DatabaseConnection(
server="SERVER01",
database="TEST"
)
)
],
comparison=ComparisonSettings(
mode="health_check",
row_count=RowCountSettings(enabled=True),
schema=SchemaSettings(enabled=True),
aggregates=AggregateSettings(enabled=False)
),
tables=[]
)
assert len(config.database_pairs) == 1
assert config.comparison.mode == "health_check"
assert len(config.tables) == 0
def test_config_with_tables(self):
"""Test config with table definitions"""
from drt.models.table import TableInfo
config = Config(
database_pairs=[
DatabasePair(
name="Test",
enabled=True,
baseline=DatabaseConnection(server="S1", database="D1"),
target=DatabaseConnection(server="S1", database="D2")
)
],
comparison=ComparisonSettings(
mode="health_check",
row_count=RowCountSettings(enabled=True),
schema=SchemaSettings(enabled=True),
aggregates=AggregateSettings(enabled=False)
),
tables=[
TableInfo(
schema="dbo",
name="TestTable",
enabled=True,
expected_in_target=True
)
]
)
assert len(config.tables) == 1
assert config.tables[0].name == "TestTable"