""" 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"