"""Isolated Bash helper checks; only dummy values, no browsers or secret stores.""" import json import os from pathlib import Path import subprocess import tempfile template = Path(__file__).with_name("template.sh").resolve() with tempfile.TemporaryDirectory() as directory: env_file = Path(directory) / ".env" environment = {**os.environ, "ENV_FILE": str(env_file)} def run(command, value="", input="", expected=0): result = subprocess.run( ["bash", "-c", 'source "$1"; ' + command, "check", str(template)], env={**environment, "DUMMY_VALUE": value}, input=input, text=True, capture_output=True, ) assert (result.returncode == 0) == (expected == 0), result.stderr return result for value in ("dummy#value", " spaces ", 'a"b', r"dollar$and\backslash", "replacement"): run('write_env DUMMY_KEY "$DUMMY_VALUE"', value) parsed = subprocess.run( ["node", "-e", "process.stdout.write(JSON.stringify(require('node:util').parseEnv(require('node:fs').readFileSync(process.argv[1], 'utf8'))))", str(env_file)], text=True, capture_output=True, check=True, ) assert json.loads(parsed.stdout)["DUMMY_KEY"] == value assert run("_existing DUMMY_KEY").stdout == value assert env_file.stat().st_mode & 0o777 == 0o600 assert env_file.read_text().count("DUMMY_KEY=") == 1 run("write_env OTHER_KEY unchanged") run("write_env DUMMY_KEY replacement") assert run("_existing OTHER_KEY").stdout == "unchanged" saved = env_file.read_bytes() for value in ("", "can't", "two\nlines", "carriage\rreturn"): run('write_env DUMMY_KEY "$DUMMY_VALUE"', value, expected=1) assert env_file.read_bytes() == saved run('write_env "BAD-KEY" value', expected=1) run('write_env HOME value', expected=1) for helper in ("ask", "ask_secret"): run(f'{helper} NEW_KEY prompt', expected=1) run(f'{helper} NEW_KEY prompt', input="\n", expected=1) run(f'{helper} DUMMY_KEY prompt; [[ "$DUMMY_KEY" == replacement ]]', input="\n") run(f'{helper} NEW_KEY prompt; [[ "$NEW_KEY" == captured ]]', input="captured\n") run("pause", expected=1) run("confirm question", expected=1) run("confirm question", input="yesterday\n", expected=1) run("confirm question", input="yes\n") env_file.write_text('DUMMY_KEY="unsupported"\n') run('write_env DUMMY_KEY replacement', expected=1) assert env_file.read_text() == 'DUMMY_KEY="unsupported"\n' print("Wizard helper checks passed")