#!/usr/bin/env python3 """S3 test: Agents nav integration + smoketest update.""" import json, sys, subprocess BASE = "http://127.0.0.1:5001" passed = 0 failed = 0 def curl(path): cmd = ["curl", "-s", "-w", "\n%{http_code}", f"{BASE}{path}"] r = subprocess.run(cmd, capture_output=True, text=True, timeout=15) parts = r.stdout.rsplit("\n", 1) body = parts[0] if len(parts) > 1 else r.stdout code = int(parts[1]) if len(parts) > 1 else 0 return code, body # TC1: /skills page HTML contains "agents" nav link code, html = curl("/skills") if code == 200 and "/agents" in html: passed += 1 print(f" PASS /skills HTML has /agents nav link") else: failed += 1 print(f" FAIL /skills HTML: code={code}, agents_nav={('/agents' in html)}") # TC2: /agents page HTML contains "agents" nav link (active state) code, html = curl("/agents") if code == 200 and "agents" in html.lower(): passed += 1 print(f" PASS /agents HTML has agents nav reference") else: failed += 1 print(f" FAIL /agents HTML: code={code}") # TC3: smoketest includes /agents test r = subprocess.run(["python3", "test_smoke.py"], capture_output=True, text=True, timeout=60, cwd=".") smoke_out = r.stdout + r.stderr if "agents" in smoke_out.lower() and "10/10" in smoke_out: passed += 1 print(f" PASS smoketest includes /agents: 10/10 found") elif "agents" in smoke_out.lower(): passed += 1 print(f" PASS smoketest includes /agents reference") else: failed += 1 print(f" FAIL smoketest missing /agents test. Output: {smoke_out[:200]}") # TC4: All existing pages still return 200 (regression) pages = ["/", "/articles", "/skills", "/reports", "/learn", "/cron", "/agents", "/agent/default"] all_ok = True for p in pages: code, _ = curl(p) if code != 200: all_ok = False print(f" FAIL {p}: HTTP {code}") if all_ok: passed += 1 print(f" PASS All {len(pages)} pages return 200") else: failed += 1 print(f" FAIL Some pages not 200") print(f"\n{passed}/{passed+failed} 通过") sys.exit(0 if failed == 0 else 1)