nomadweb/scripts/smoke_prod.py
eric ff7b721acb feat: NomadCNA community layer, social matching, payments, and ebook
Port meetups, discussions, gigs, dating/chat, VIP pay (ZPay/XorPay), MiroTalk live, digital academy, and ebook reader. Add persistent community_store, git-first deploy docs, and env template for production secrets.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 09:38:13 -05:00

58 lines
1.9 KiB
Python

"""E2E smoke test for nomadweb production APIs."""
from __future__ import annotations
import json
import sys
import urllib.request
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
BASE = "https://nomadweb.nomadro.com/api/v1"
def req(method: str, path: str, body: dict | None = None, token: str | None = None) -> dict:
headers = {"Content-Type": "application/json"}
if token:
headers["Authorization"] = f"Bearer {token}"
data = json.dumps(body).encode() if body is not None else None
r = urllib.request.Request(f"{BASE}{path}", data=data, headers=headers, method=method)
with urllib.request.urlopen(r, timeout=30) as res:
return json.loads(res.read().decode())
def main() -> None:
demo = req("GET", "/auth/demo")
token = demo["token"]
print("demo login OK", demo["user"]["name"])
meetups = req("GET", "/meetups")
online = next(m for m in meetups if m.get("mode") in ("online", "hybrid"))
sess = req("GET", f"/meetups/{online['id']}/session")
print("meetup session", online["id"], "canJoin=", sess.get("canJoin"))
if sess.get("videoUrl"):
print(" video:", sess["videoUrl"][:80])
if sess.get("chatUrl"):
print(" chat:", sess["chatUrl"][:80])
join = req("POST", "/social/join", {"city": "清迈", "bio": "test", "lookingFor": ["friends"]}, token)
print("social join OK", join.get("success"))
candidates = req("GET", "/social/matches/candidates?intent=friends", None, token)
print("candidates", len(candidates))
pay = req(
"POST",
"/pay/create",
{"pay_type": "join", "return_url": "https://nomadweb.nomadro.com/join/paid", "provider": "zpay"},
token,
)
print("pay create", pay["order_id"], pay["status"])
print(" redirect:", pay["redirect_url"][:120])
course = req("GET", "/digital/course")
print("digital modules", len(course.get("modules", [])))
if __name__ == "__main__":
main()