67 lines
1.8 KiB
Python
67 lines
1.8 KiB
Python
import os
|
|
import stat
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
|
|
def test_validate_feed_script_changes_to_feedvalidator_and_forwards_args(
|
|
tmp_path: Path,
|
|
) -> None:
|
|
script_path = Path(__file__).resolve().parents[1] / "scripts" / "validate-feed"
|
|
feedvalidator_dir = tmp_path / "feedvalidator"
|
|
bin_dir = tmp_path / "bin"
|
|
caller_dir = tmp_path / "caller"
|
|
feed_path = caller_dir / "path" / "to" / "feed.rss"
|
|
trace_dir = tmp_path / "trace"
|
|
|
|
feedvalidator_dir.mkdir()
|
|
bin_dir.mkdir()
|
|
feed_path.parent.mkdir(parents=True)
|
|
feed_path.write_text("<rss/>", encoding="utf-8")
|
|
trace_dir.mkdir()
|
|
|
|
uv_path = bin_dir / "uv"
|
|
uv_path.write_text(
|
|
"""#!/bin/sh
|
|
printf '%s\\n' "$PWD" > "$TRACE_DIR/cwd"
|
|
printf '%s\\n' "$@" > "$TRACE_DIR/args"
|
|
printf 'validator output\\n'
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
uv_path.chmod(uv_path.stat().st_mode | stat.S_IXUSR)
|
|
|
|
pager_path = bin_dir / "pager"
|
|
pager_path.write_text(
|
|
"""#!/bin/sh
|
|
cat > "$TRACE_DIR/pager-input"
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
pager_path.chmod(pager_path.stat().st_mode | stat.S_IXUSR)
|
|
|
|
env = os.environ.copy()
|
|
env["FEEDVALIDATOR_DIR"] = str(feedvalidator_dir)
|
|
env["PAGER"] = str(pager_path)
|
|
env["PATH"] = f"{bin_dir}:{env['PATH']}"
|
|
env["TRACE_DIR"] = str(trace_dir)
|
|
|
|
subprocess.run(
|
|
[str(script_path), "path/to/feed.rss", "--flag"],
|
|
check=True,
|
|
env=env,
|
|
cwd=caller_dir,
|
|
)
|
|
|
|
assert (trace_dir / "cwd").read_text(encoding="utf-8").strip() == str(
|
|
feedvalidator_dir
|
|
)
|
|
assert (trace_dir / "args").read_text(encoding="utf-8").splitlines() == [
|
|
"run",
|
|
"validate_feed.py",
|
|
str(feed_path.resolve()),
|
|
"--flag",
|
|
]
|
|
assert (trace_dir / "pager-input").read_text(
|
|
encoding="utf-8"
|
|
) == "validator output\n"
|