Spaces:
Sleeping
Sleeping
| 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()) | |