from pathlib import Path import pytest from audita.config import AuditaConfig, ConfigOverrides from audita.config import DEFAULT_GLOSSARY_MAX_LLM_PASSES, DEFAULT_MAX_RETRIES, DEFAULT_MAX_SECTION_TOKENS, DEFAULT_WORK_DIR from audita.errors import AuditaConfigError def test_config_uses_defaults_with_api_key(): config = AuditaConfig.from_sources(env={"OPENROUTER_API_KEY": "key"}) assert config.max_section_tokens == DEFAULT_MAX_SECTION_TOKENS assert config.max_retries == DEFAULT_MAX_RETRIES assert config.glossary_max_llm_passes == DEFAULT_GLOSSARY_MAX_LLM_PASSES assert config.work_dir == Path(DEFAULT_WORK_DIR) def test_config_env_overrides_defaults(): config = AuditaConfig.from_sources( env={ "OPENROUTER_API_KEY": "key", "AUDITA_MAX_SECTION_TOKENS": "42", "AUDITA_CONFIDENCE_THRESHOLD": "0.9", "AUDITA_MAX_RETRIES": "5", "AUDITA_GLOSSARY_MAX_LLM_PASSES": "7", "AUDITA_WORK_DIR": "/tmp/custom-audita", } ) assert config.max_section_tokens == 42 assert config.confidence_threshold == 0.9 assert config.max_retries == 5 assert config.glossary_max_llm_passes == 7 assert config.work_dir == Path("/tmp/custom-audita") def test_config_cli_overrides_env(): config = AuditaConfig.from_sources( env={ "OPENROUTER_API_KEY": "key", "AUDITA_MAX_SECTION_TOKENS": "42", "AUDITA_MAX_RETRIES": "5", "AUDITA_GLOSSARY_MAX_LLM_PASSES": "7", "AUDITA_WORK_DIR": "/tmp/env-audita", }, overrides=ConfigOverrides( max_section_tokens=100, max_retries=3, glossary_max_llm_passes=2, work_dir=Path("/tmp/cli-audita"), ), ) assert config.max_section_tokens == 100 assert config.max_retries == 3 assert config.glossary_max_llm_passes == 2 assert config.work_dir == Path("/tmp/cli-audita") def test_config_requires_api_key(): with pytest.raises(AuditaConfigError): AuditaConfig.from_sources(env={}) def test_config_rejects_bad_env_int(): with pytest.raises(AuditaConfigError): AuditaConfig.from_sources( env={"OPENROUTER_API_KEY": "key", "AUDITA_MAX_SECTION_TOKENS": "many"} ) def test_config_rejects_invalid_glossary_pass_count(): with pytest.raises(AuditaConfigError): AuditaConfig.from_sources( env={"OPENROUTER_API_KEY": "key", "AUDITA_GLOSSARY_MAX_LLM_PASSES": "0"} )