Added tests and fix for env file precedence #868

This commit is contained in:
Paul Gauthier 2024-07-18 17:20:58 +01:00
parent c9bcc1aa57
commit e36d47cfdb
2 changed files with 24 additions and 30 deletions

View file

@ -276,7 +276,7 @@ def load_dotenv_files(git_root, dotenv_fname):
for fname in dotenv_files: for fname in dotenv_files:
if Path(fname).exists(): if Path(fname).exists():
loaded.append(fname) loaded.append(fname)
load_dotenv(fname) load_dotenv(fname, override=True)
return loaded return loaded

View file

@ -173,40 +173,34 @@ class TestMain(TestCase):
def test_env_file_override(self): def test_env_file_override(self):
with GitTemporaryDirectory() as git_dir: with GitTemporaryDirectory() as git_dir:
os.chdir(git_dir) git_dir = Path(git_dir)
git_env = git_dir / ".env"
# Create .env files with different priorities fake_home = git_dir / "fake_home"
Path(git_dir, ".env").write_text("TEST_VAR=home\nAIDER_MODEL=home_model\n") fake_home.mkdir()
Path(git_dir, "repo_root", ".env").mkdir(parents=True, exist_ok=True) os.environ["HOME"] = str(fake_home)
Path(git_dir, "repo_root", ".env").write_text("TEST_VAR=repo\nAIDER_MODEL=repo_model\n") home_env = fake_home / ".env"
Path(git_dir, "repo_root", "subdir").mkdir(parents=True, exist_ok=True)
Path(git_dir, "repo_root", "subdir", ".env").write_text("TEST_VAR=subdir\nAIDER_MODEL=subdir_model\n")
# Run main with different configurations cwd = git_dir / "subdir"
with patch("aider.main.Coder.create"), \ cwd.mkdir()
patch("aider.main.setup_git", return_value=str(Path(git_dir, "repo_root"))), \ os.chdir(cwd)
patch("os.getcwd", return_value=str(Path(git_dir, "repo_root", "subdir"))): cwd_env = cwd / ".env"
# Test with default .env file (in repo root) named_env = git_dir / "named.env"
main(["--exit"], input=DummyInput(), output=DummyOutput())
self.assertEqual(os.environ.get("TEST_VAR"), "repo")
self.assertEqual(os.environ.get("AIDER_MODEL"), "repo_model")
# Test with specific .env file os.environ["E"] = "existing"
main(["--exit", "--env-file", str(Path(git_dir, ".env"))], input=DummyInput(), output=DummyOutput()) home_env.write_text("A=home\nB=home\nC=home\nD=home")
self.assertEqual(os.environ.get("TEST_VAR"), "home") git_env.write_text("A=git\nB=git\nC=git")
self.assertEqual(os.environ.get("AIDER_MODEL"), "home_model") cwd_env.write_text("A=cwd\nB=cwd")
named_env.write_text("A=named")
# Test override with command line argument main(["--yes", "--exit", "--env-file", str(named_env)])
main(["--exit", "--model", "cli_model"], input=DummyInput(), output=DummyOutput())
self.assertEqual(os.environ.get("TEST_VAR"), "repo")
self.assertEqual(os.environ.get("AIDER_MODEL"), "cli_model")
# Clean up environment variables self.assertEqual(os.environ["A"], "named")
if "TEST_VAR" in os.environ: self.assertEqual(os.environ["B"], "cwd")
del os.environ["TEST_VAR"] self.assertEqual(os.environ["C"], "git")
if "AIDER_MODEL" in os.environ: self.assertEqual(os.environ["D"], "home")
del os.environ["AIDER_MODEL"] self.assertEqual(os.environ["E"], "existing")
def test_message_file_flag(self): def test_message_file_flag(self):
message_file_content = "This is a test message from a file." message_file_content = "This is a test message from a file."