Refactor env_file fixture to dynamically locate repository root and improve test isolation

This commit is contained in:
Chris Rowe 2025-08-28 21:38:58 -06:00
parent 476396a2b9
commit 206d0a31e7
No known key found for this signature in database

View file

@ -28,13 +28,18 @@ def env_file(tmp_path: Path) -> Path:
All tests rely on this baseline content (optionally appending extra lines All tests rely on this baseline content (optionally appending extra lines
for edge cases) to ensure consistent parsing behavior. for edge cases) to ensure consistent parsing behavior.
""" """
# __file__ => <repo_root>/tests/catch_dotenv_test.py # Find repository root by looking for .git directory
# parents[0] = <repo_root>/tests, parents[1] = <repo_root> test_file_path = Path(__file__).resolve()
repo_root = test_file_path
while repo_root.parent != repo_root: # Stop at filesystem root
if (repo_root / '.git').exists():
break
repo_root = repo_root.parent
else:
raise RuntimeError('Could not find repository root (.git directory)')
# Source file stored as test.env in repo (cannot commit a real .env in CI) # Source file stored as test.env in repo (cannot commit a real .env in CI)
resource_env = ( resource_env = repo_root / 'testing' / 'resources' / 'test.env'
Path(__file__).resolve().parents[1] /
'testing' / 'resources' / 'test.env'
)
dest = tmp_path / DEFAULT_ENV_FILE dest = tmp_path / DEFAULT_ENV_FILE
shutil.copyfile(resource_env, dest) shutil.copyfile(resource_env, dest)
return dest return dest
@ -144,8 +149,15 @@ def test_create_example_duplicate_key_variant_ignored(
"""Appending whitespace duplicate of existing key should not duplicate """Appending whitespace duplicate of existing key should not duplicate
in example. in example.
""" """
with open(env_file, 'a', encoding='utf-8') as f: # Create a copy of the env_file to avoid contaminating the fixture
modified_env = tmp_path / 'modified.env'
shutil.copyfile(env_file, modified_env)
with open(modified_env, 'a', encoding='utf-8') as f:
f.write('BACKEND_CONTAINER_PORT =999 # duplicate variant\n') f.write('BACKEND_CONTAINER_PORT =999 # duplicate variant\n')
# Override the env file path for this test
original_env = tmp_path / DEFAULT_ENV_FILE
shutil.copyfile(modified_env, original_env)
run_hook(tmp_path, [DEFAULT_ENV_FILE], create_example=True) run_hook(tmp_path, [DEFAULT_ENV_FILE], create_example=True)
lines = (tmp_path / DEFAULT_EXAMPLE_ENV_FILE).read_text().splitlines() lines = (tmp_path / DEFAULT_EXAMPLE_ENV_FILE).read_text().splitlines()
key_lines = [ln for ln in lines if ln and not ln.startswith('#')] key_lines = [ln for ln in lines if ln and not ln.startswith('#')]