from pathlib import Path from config.env import load_env_file, load_project_environment def test_env_file_does_not_override_injected_environment(tmp_path, monkeypatch): env_file = tmp_path / ".env.local" env_file.write_text("EXISTING=from-file\nNEW_VALUE='loaded locally'\n", encoding="utf-8") monkeypatch.setenv("EXISTING", "from-server") monkeypatch.delenv("NEW_VALUE", raising=False) assert load_env_file(env_file) is True assert __import__("os").environ["EXISTING"] == "from-server" assert __import__("os").environ["NEW_VALUE"] == "loaded locally" def test_environment_selects_local_for_dev_and_env_for_prod(tmp_path, monkeypatch): (tmp_path / ".env.local").write_text("SELECTED_ENV=local\n", encoding="utf-8") (tmp_path / ".env").write_text("SELECTED_ENV=production\n", encoding="utf-8") monkeypatch.delenv("DJANGO_ENV_FILE", raising=False) monkeypatch.delenv("SELECTED_ENV", raising=False) monkeypatch.setenv("DJANGO_SETTINGS_MODULE", "config.settings.dev") assert load_project_environment(Path(tmp_path)) == tmp_path / ".env.local" assert __import__("os").environ["SELECTED_ENV"] == "local" monkeypatch.delenv("SELECTED_ENV") monkeypatch.setenv("DJANGO_SETTINGS_MODULE", "config.settings.prod") assert load_project_environment(Path(tmp_path)) == tmp_path / ".env" assert __import__("os").environ["SELECTED_ENV"] == "production" def test_explicit_environment_file_can_be_selected(tmp_path, monkeypatch): custom = tmp_path / "server.env" custom.write_text("CUSTOM_SERVER_VALUE=yes\n", encoding="utf-8") monkeypatch.setenv("DJANGO_ENV_FILE", "server.env") monkeypatch.delenv("CUSTOM_SERVER_VALUE", raising=False) assert load_project_environment(Path(tmp_path)) == custom assert __import__("os").environ["CUSTOM_SERVER_VALUE"] == "yes"