Files
4ventures-client-portal/scripts/smoke_chat_auth.py
2026-09-21 18:02:55 +02:00

78 lines
2.6 KiB
Python

#!/usr/bin/env python3
"""Authenticated chat smoke on app.4ventures.es."""
from __future__ import annotations
import json
import re
import sys
from pathlib import Path
from playwright.sync_api import sync_playwright
ROOT = Path("/Users/4ventures/4ventures-client-portal")
APP = "https://app.4ventures.es"
CREDS = ROOT / ".ops" / "marketing-credentials.txt"
def main() -> int:
email, password = "marketing@4ventures.es", ""
for line in CREDS.read_text().splitlines():
if line.startswith("email="):
email = line.split("=", 1)[1].strip()
if line.startswith("password="):
password = line.split("=", 1)[1].strip()
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page(viewport={"width": 1400, "height": 1000})
page.goto(f"{APP}/login", wait_until="networkidle", timeout=90000)
page.locator('input[type="email"], input[name="email"]').first.fill(email)
page.locator('input[type="password"]').first.fill(password)
page.locator('button[type="submit"]').first.click()
page.wait_for_timeout(3500)
if "/login" in page.url:
print("LOGIN_FAILED", flush=True)
browser.close()
return 2
# unauth baseline via fresh context later; here authenticated
res = page.evaluate(
"""async () => {
const r = await fetch('/api/chat', {
method: 'POST',
headers: {'content-type':'application/json'},
body: JSON.stringify({ message: 'hola' })
});
const text = await r.text();
let json = null;
try { json = JSON.parse(text); } catch {}
return { status: r.status, text: text.slice(0, 300), json };
}"""
)
print("auth_chat", json.dumps(res, ensure_ascii=False)[:500], flush=True)
browser.close()
# unauth
import urllib.error
import urllib.request
req = urllib.request.Request(
f"{APP}/api/chat",
data=b'{"message":"hola"}',
method="POST",
headers={"Content-Type": "application/json"},
)
try:
with urllib.request.urlopen(req, timeout=15) as r:
print("unauth_chat", r.status, r.read()[:80], flush=True)
except urllib.error.HTTPError as e:
print("unauth_chat", e.code, e.read()[:80], flush=True)
ok = res.get("status") == 200 and isinstance(res.get("json"), list)
print("SUCCESS" if ok else "PARTIAL", flush=True)
return 0 if ok else 5
if __name__ == "__main__":
raise SystemExit(main())