import pytest from audita.core.config import ( AuditaConfig, ConfigOverrides, DEFAULT_GLOSSARY_CONFIDENCE_THRESHOLD, DEFAULT_HOMOPHONES_CONFIDENCE_THRESHOLD, DEFAULT_NORMALIZE_MAX_SEGMENT_GAP, DEFAULT_WORK_DIR_RETENTION, ) from audita.core.errors import AuditaConfigError def test_default_config_allows_missing_api_key(): config = AuditaConfig.from_sources(env={}) assert config.api_key is None assert config.glossary_confidence_threshold == DEFAULT_GLOSSARY_CONFIDENCE_THRESHOLD assert config.homophones_confidence_threshold == DEFAULT_HOMOPHONES_CONFIDENCE_THRESHOLD assert config.normalize_max_segment_gap == DEFAULT_NORMALIZE_MAX_SEGMENT_GAP assert config.work_dir_retention == DEFAULT_WORK_DIR_RETENTION def test_cli_overrides_take_precedence(): config = AuditaConfig.from_sources( env={"AUDITA_MAX_SECTION_TOKENS": "1000"}, overrides=ConfigOverrides(max_section_tokens=2000), ) assert config.max_section_tokens == 2000 def test_invalid_work_dir_retention_is_rejected(): with pytest.raises(AuditaConfigError): AuditaConfig.from_sources(env={"AUDITA_WORK_DIR_RETENTION": "sometimes"}) def test_threshold_overrides_take_precedence(): config = AuditaConfig.from_sources( env={ "AUDITA_GLOSSARY_CONFIDENCE_THRESHOLD": "0.6", "AUDITA_HOMOPHONES_CONFIDENCE_THRESHOLD": "0.7", }, overrides=ConfigOverrides( glossary_confidence_threshold=0.85, homophones_confidence_threshold=0.9, ), ) assert config.glossary_confidence_threshold == 0.85 assert config.homophones_confidence_threshold == 0.9 @pytest.mark.parametrize( "env_name", [ "AUDITA_GLOSSARY_CONFIDENCE_THRESHOLD", "AUDITA_HOMOPHONES_CONFIDENCE_THRESHOLD", ], ) def test_invalid_thresholds_are_rejected(env_name): with pytest.raises(AuditaConfigError): AuditaConfig.from_sources(env={env_name: "1.5"})