53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""Quick test for weekly_update.py — verifies parsing, output format, and edge cases."""
|
||
|
|
|
||
|
|
import subprocess
|
||
|
|
import sys
|
||
|
|
import json
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
SCRIPT = Path(__file__).resolve().parent.parent / "scripts" / "weekly_update.py"
|
||
|
|
|
||
|
|
def run(args: list[str]) -> str:
|
||
|
|
result = subprocess.run(
|
||
|
|
[sys.executable, str(SCRIPT)] + args,
|
||
|
|
capture_output=True, text=True, cwd=str(SCRIPT.parent.parent)
|
||
|
|
)
|
||
|
|
return result.stdout, result.stderr, result.returncode
|
||
|
|
|
||
|
|
def test_basic_output():
|
||
|
|
"""Script runs without error and produces markdown."""
|
||
|
|
stdout, stderr, rc = run(["--since", "2026-01-01"])
|
||
|
|
assert rc == 0, f"Exit code {rc}: {stderr}"
|
||
|
|
assert "## Week of" in stdout, f"Missing header: {stdout[:200]}"
|
||
|
|
assert "### Completed" in stdout, f"Missing Completed section: {stdout[:200]}"
|
||
|
|
assert "### Next Week" in stdout, f"Missing Next Week section: {stdout[-200:]}"
|
||
|
|
print("PASS: basic_output")
|
||
|
|
|
||
|
|
def test_json_output():
|
||
|
|
"""Script outputs valid JSON in --json mode."""
|
||
|
|
stdout, stderr, rc = run(["--json", "--since", "2026-01-01"])
|
||
|
|
assert rc == 0, f"Exit code {rc}: {stderr}"
|
||
|
|
data = json.loads(stdout)
|
||
|
|
assert "commits" in data
|
||
|
|
assert "since" in data
|
||
|
|
print(f"PASS: json_output ({len(data['commits'])} commits)")
|
||
|
|
|
||
|
|
def test_no_crash_future_date():
|
||
|
|
"""Script handles future date gracefully."""
|
||
|
|
stdout, stderr, rc = run(["--since", "2030-01-01"])
|
||
|
|
assert rc == 0, f"Exit code {rc}: {stderr}"
|
||
|
|
print("PASS: future_date_no_crash")
|
||
|
|
|
||
|
|
def test_empty_range():
|
||
|
|
"""Script handles a very old date with no commits."""
|
||
|
|
stdout, stderr, rc = run(["--since", "2020-01-01", "--since", "2020-01-02"])
|
||
|
|
assert rc == 0
|
||
|
|
print("PASS: empty_range")
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
test_basic_output()
|
||
|
|
test_json_output()
|
||
|
|
test_no_crash_future_date()
|
||
|
|
print("\nAll tests passed.")
|