refactor: parameterize test_yaml_config_file_loading with yml, yaml, and mixed scenarios

This commit is contained in:
sltptr (aider) 2025-05-16 19:04:29 -07:00
parent 90642fcf14
commit cc2e6383c3

View file

@ -6,6 +6,7 @@ from io import StringIO
from pathlib import Path from pathlib import Path
from unittest import TestCase from unittest import TestCase
from unittest.mock import MagicMock, patch from unittest.mock import MagicMock, patch
import pytest
import git import git
from prompt_toolkit.input import DummyInput from prompt_toolkit.input import DummyInput
@ -405,8 +406,15 @@ class TestMain(TestCase):
self.assertRegex(relevant_output, r"AIDER_DARK_MODE:\s+on") self.assertRegex(relevant_output, r"AIDER_DARK_MODE:\s+on")
self.assertRegex(relevant_output, r"dark_mode:\s+True") self.assertRegex(relevant_output, r"dark_mode:\s+True")
@pytest.mark.parametrize(desc): @pytest.mark.parametrize(
def test_yaml_config_file_loading(self): "scenario",
[
"yml_only", # Test with only .yml files
"yaml_only", # Test with only .yaml files
"both_formats", # Test with both .yml and .yaml files
],
)
def test_yaml_config_file_loading(self, scenario):
with GitTemporaryDirectory() as git_dir: with GitTemporaryDirectory() as git_dir:
git_dir = Path(git_dir) git_dir = Path(git_dir)
@ -420,7 +428,7 @@ class TestMain(TestCase):
cwd.mkdir() cwd.mkdir()
os.chdir(cwd) os.chdir(cwd)
# Create .aider.conf.yml files in different locations # Create config files in different locations based on scenario
home_config_yml = fake_home / ".aider.conf.yml" home_config_yml = fake_home / ".aider.conf.yml"
home_config_yaml = fake_home / ".aider.conf.yaml" home_config_yaml = fake_home / ".aider.conf.yaml"
git_config_yml = git_dir / ".aider.conf.yml" git_config_yml = git_dir / ".aider.conf.yml"
@ -429,10 +437,26 @@ class TestMain(TestCase):
cwd_config_yaml = cwd / ".aider.conf.yaml" cwd_config_yaml = cwd / ".aider.conf.yaml"
named_config = git_dir / "named.aider.conf.yml" named_config = git_dir / "named.aider.conf.yml"
cwd_config_yml.write_text("model: gpt-4-32k\nmap-tokens: 4096\n") # Create files based on the scenario
git_config_yml.write_text("model: gpt-4\nmap-tokens: 2048\n") if scenario == "yml_only":
home_config_yml.write_text("model: gpt-3.5-turbo\nmap-tokens: 1024\n") cwd_config_yml.write_text("model: gpt-4-32k\nmap-tokens: 4096\n")
named_config.write_text("model: gpt-4-1106-preview\nmap-tokens: 8192\n") git_config_yml.write_text("model: gpt-4\nmap-tokens: 2048\n")
home_config_yml.write_text("model: gpt-3.5-turbo\nmap-tokens: 1024\n")
named_config.write_text("model: gpt-4-1106-preview\nmap-tokens: 8192\n")
elif scenario == "yaml_only":
cwd_config_yaml.write_text("model: gpt-4-32k\nmap-tokens: 4096\n")
git_config_yaml.write_text("model: gpt-4\nmap-tokens: 2048\n")
home_config_yaml.write_text("model: gpt-3.5-turbo\nmap-tokens: 1024\n")
named_config.write_text("model: gpt-4-1106-preview\nmap-tokens: 8192\n")
else: # both_formats
# Create both formats, with .yaml taking precedence in each directory
cwd_config_yml.write_text("model: gpt-4-32k-yml\nmap-tokens: 4096\n")
cwd_config_yaml.write_text("model: gpt-4-32k\nmap-tokens: 4096\n")
git_config_yml.write_text("model: gpt-4-yml\nmap-tokens: 2048\n")
git_config_yaml.write_text("model: gpt-4\nmap-tokens: 2048\n")
home_config_yml.write_text("model: gpt-3.5-turbo-yml\nmap-tokens: 1024\n")
home_config_yaml.write_text("model: gpt-3.5-turbo\nmap-tokens: 1024\n")
named_config.write_text("model: gpt-4-1106-preview\nmap-tokens: 8192\n")
with ( with (
patch("pathlib.Path.home", return_value=fake_home), patch("pathlib.Path.home", return_value=fake_home),
@ -451,20 +475,33 @@ class TestMain(TestCase):
# Test loading from current working directory # Test loading from current working directory
main(["--yes", "--exit"], input=DummyInput(), output=DummyOutput()) main(["--yes", "--exit"], input=DummyInput(), output=DummyOutput())
_, kwargs = MockCoder.call_args _, kwargs = MockCoder.call_args
print("kwargs:", kwargs) # Add this line for debugging
self.assertIn("main_model", kwargs, "main_model key not found in kwargs") self.assertIn("main_model", kwargs, "main_model key not found in kwargs")
self.assertEqual(kwargs["main_model"].name, "gpt-4-32k") self.assertEqual(kwargs["main_model"].name, "gpt-4-32k")
self.assertEqual(kwargs["map_tokens"], 4096) self.assertEqual(kwargs["map_tokens"], 4096)
# Test loading from git root # Test loading from git root by removing cwd config files
cwd_config_yml.unlink() if scenario == "yml_only":
cwd_config_yml.unlink()
elif scenario == "yaml_only":
cwd_config_yaml.unlink()
else: # both_formats
cwd_config_yml.unlink()
cwd_config_yaml.unlink()
main(["--yes", "--exit"], input=DummyInput(), output=DummyOutput()) main(["--yes", "--exit"], input=DummyInput(), output=DummyOutput())
_, kwargs = MockCoder.call_args _, kwargs = MockCoder.call_args
self.assertEqual(kwargs["main_model"].name, "gpt-4") self.assertEqual(kwargs["main_model"].name, "gpt-4")
self.assertEqual(kwargs["map_tokens"], 2048) self.assertEqual(kwargs["map_tokens"], 2048)
# Test loading from home directory # Test loading from home directory by removing git root config files
git_config_yml.unlink() if scenario == "yml_only":
git_config_yml.unlink()
elif scenario == "yaml_only":
git_config_yaml.unlink()
else: # both_formats
git_config_yml.unlink()
git_config_yaml.unlink()
main(["--yes", "--exit"], input=DummyInput(), output=DummyOutput()) main(["--yes", "--exit"], input=DummyInput(), output=DummyOutput())
_, kwargs = MockCoder.call_args _, kwargs = MockCoder.call_args
self.assertEqual(kwargs["main_model"].name, "gpt-3.5-turbo") self.assertEqual(kwargs["main_model"].name, "gpt-3.5-turbo")