kink-discovery / scripts /e2e_playwright.py
Perplexed7675's picture
Sync from kink_cli (Docker Space)
6ff91d6 verified
Raw
History Blame Contribute Delete
1.76 kB
from __future__ import annotations
import argparse
import json
import sys
from importlib.util import module_from_spec, spec_from_file_location
from pathlib import Path
def _load_flow_module():
path = Path(__file__).resolve().parent / "playwright_product_flow.py"
spec = spec_from_file_location("playwright_product_flow", path)
if spec is None or spec.loader is None:
raise RuntimeError(f"Could not load product flow module from {path}")
module = module_from_spec(spec)
sys.modules[spec.name] = module
spec.loader.exec_module(module)
return module
def main() -> int:
parser = argparse.ArgumentParser(description="Canonical Playwright audit for kink_cli product flows.")
parser.add_argument(
"--scenario",
action="append",
default=[],
help="Scenario name, comma-separated scenario list, or 'all'. Defaults to all scenarios.",
)
parser.add_argument("--base-url", default=None, help="App base URL. Defaults to KINK_AUDIT_BASE_URL or http://127.0.0.1:8012.")
parser.add_argument("--json-out", default=None, help="Optional path to write a JSON report.")
parser.add_argument("--headed", action="store_true", help="Run Playwright in headed mode.")
args = parser.parse_args()
flow = _load_flow_module()
if args.base_url:
flow.BASE_URL = args.base_url.rstrip("/")
results = flow.run_selected_scenarios(args.scenario or ["all"], headless=not args.headed)
payload = flow.results_to_json(results)
print(payload["summary"])
if args.json_out:
Path(args.json_out).write_text(json.dumps(payload, indent=2, sort_keys=True), encoding="utf-8")
return 0 if payload["ok"] else 1
if __name__ == "__main__":
raise SystemExit(main())