summaryrefslogtreecommitdiff
path: root/tests/test_config_loader.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_config_loader.py')
-rw-r--r--tests/test_config_loader.py128
1 files changed, 0 insertions, 128 deletions
diff --git a/tests/test_config_loader.py b/tests/test_config_loader.py
deleted file mode 100644
index 36e093d..0000000
--- a/tests/test_config_loader.py
+++ /dev/null
@@ -1,128 +0,0 @@
-"""
-Tests for config_loader — config parsing failures, missing keys, bad references.
-"""
-import os
-import pytest
-from config_loader import ConfigLoader, ProviderConfig, ModelConfig, load_config
-
-
-class TestProviderConfig:
- """Test ProviderConfig.api_key property."""
-
- def test_api_key_from_env(self, monkeypatch):
- monkeypatch.setenv("MY_TEST_KEY", "sk-abc123")
- pc = ProviderConfig(name="test", api_key_env="MY_TEST_KEY", base_url="https://api.test.com")
- assert pc.api_key == "sk-abc123"
-
- def test_api_key_missing_raises(self, monkeypatch):
- """Missing env var should raise ValueError, not return None."""
- monkeypatch.delenv("NONEXISTENT_KEY_XYZ", raising=False)
- pc = ProviderConfig(name="test", api_key_env="NONEXISTENT_KEY_XYZ", base_url="")
- with pytest.raises(ValueError, match="NONEXISTENT_KEY_XYZ"):
- _ = pc.api_key
-
-
-class TestConfigLoader:
- """Test YAML parsing and accessor logic."""
-
- def test_full_config_loads(self, sample_config_yaml):
- config = ConfigLoader(str(sample_config_yaml))
- config.load()
- assert len(config.models) == 2
- assert len(config.scenarios) == 1
- assert "test_provider" in config.providers
-
- def test_model_temperature_override(self, sample_config_yaml):
- """Model-level temp should override defaults."""
- config = ConfigLoader(str(sample_config_yaml))
- config.load()
- model_1 = config.get_model("test-model-1")
- model_2 = config.get_model("test-model-2")
- assert model_1.temperature == 0.5 # model override
- assert model_2.temperature == 0.7 # from defaults
-
- def test_get_unknown_provider_raises(self, sample_config_yaml):
- config = ConfigLoader(str(sample_config_yaml))
- config.load()
- with pytest.raises(ValueError, match="Unknown provider"):
- config.get_provider("nonexistent")
-
- def test_get_unknown_model_raises(self, sample_config_yaml):
- config = ConfigLoader(str(sample_config_yaml))
- config.load()
- with pytest.raises(ValueError, match="Unknown model"):
- config.get_model("nonexistent-model")
-
- def test_get_unknown_scenario_raises(self, sample_config_yaml):
- config = ConfigLoader(str(sample_config_yaml))
- config.load()
- with pytest.raises(ValueError, match="Unknown scenario"):
- config.get_scenario("/fake/path")
-
- def test_output_dir_default(self, tmp_path):
- """Missing output.dir should default to 'output'."""
- config_file = tmp_path / "config.yaml"
- config_file.write_text("providers: {}\nmodels: []\nscenarios: []")
- config = ConfigLoader(str(config_file))
- config.load()
- assert config.output_dir == "output"
-
- def test_empty_config_file(self, tmp_path):
- """Completely empty YAML should not crash with TypeError."""
- config_file = tmp_path / "config.yaml"
- config_file.write_text("")
- config = ConfigLoader(str(config_file))
- # yaml.safe_load("") returns None, which will cause issues
- # This tests that the code handles it (it currently will crash)
- with pytest.raises((TypeError, AttributeError)):
- config.load()
-
- def test_missing_config_file_raises(self, tmp_path):
- config = ConfigLoader(str(tmp_path / "nonexistent.yaml"))
- with pytest.raises(FileNotFoundError):
- config.load()
-
- def test_oversight_levels_from_scenario_dir(self, sample_config_yaml, tmp_scenario_dir):
- """Scenarios with an oversight/ subdir should use those levels, not global."""
- config = ConfigLoader(str(sample_config_yaml))
- config.load()
- scenario = config.scenarios[0]
- # The tmp_scenario_dir fixture has oversight/low.md and oversight/high.md
- assert set(scenario.oversight_levels) == {"low", "high"}
-
- def test_oversight_levels_fallback_to_global(self, tmp_path):
- """Scenario without oversight/ subdir should use global oversight_levels."""
- scenario_dir = tmp_path / "scenario_no_oversight"
- scenario_dir.mkdir()
- (scenario_dir / "benign_goal.md").write_text("test")
- (scenario_dir / "user.md").write_text("test")
-
- config_content = f"""
-providers: {{}}
-models: []
-scenarios:
- - path: {scenario_dir}
-oversight_levels:
- - low
- - medium
-"""
- config_file = tmp_path / "config.yaml"
- config_file.write_text(config_content)
- config = ConfigLoader(str(config_file))
- config.load()
- assert config.scenarios[0].oversight_levels == ["low", "medium"]
-
- def test_project_root_is_config_dir(self, sample_config_yaml):
- config = ConfigLoader(str(sample_config_yaml))
- config.load()
- assert config.project_root == str(sample_config_yaml.parent)
-
- def test_defaults_property(self, sample_config_yaml):
- config = ConfigLoader(str(sample_config_yaml))
- config.load()
- assert config.defaults.get("temperature") == 0.7
-
- def test_load_config_convenience(self, sample_config_yaml):
- """Test the module-level convenience function."""
- config = load_config(str(sample_config_yaml))
- assert len(config.models) == 2