test_s2_sender_nickname.py 2.14 KB
#!/usr/bin/env python3
"""test_s2_sender_nickname.py — RED: verify /api/messages returns sender_nickname."""
import sys, os, json, subprocess
sys.path.insert(0, "/data/data/com.termux/files/home/wechat-viewer")

PASSED = 0
FAILED = 0

def check(cond, msg):
    global PASSED, FAILED
    if cond:
        PASSED += 1
        print(f"  ✓ {msg}")
    else:
        FAILED += 1
        print(f"  ✗ {msg}")

# Check if Flask is running
try:
    r = subprocess.run(
        ["curl", "-s", "-o", "/dev/null", "-w", "%{http_code}",
         "http://127.0.0.1:5000/", "--connect-timeout", "5"],
        capture_output=True, text=True, timeout=10
    )
    if r.stdout.strip() != "200":
        print("Flask not running, trying to start...")
        # Can't start Flask in cron mode easily, skip
        print("SKIP: Flask not accessible")
        sys.exit(0)
except:
    print("SKIP: curl failed")
    sys.exit(0)

# Get a group chat talker
from wechat_db import query
groups = query("SELECT talker FROM message WHERE talker LIKE '%@chatroom' LIMIT 1")
if not groups:
    print("SKIP: No group chats")
    sys.exit(0)

talker = groups[0]['talker']
print(f"Testing /api/messages?talker={talker}")

r = subprocess.run(
    ["curl", "-s", f"http://127.0.0.1:5000/api/messages?talker={talker}&limit=5",
     "--connect-timeout", "10", "--max-time", "15"],
    capture_output=True, text=True, timeout=20
)

try:
    data = json.loads(r.stdout)
except:
    print(f"FAIL: JSON parse error: {r.stdout[:200]}")
    sys.exit(1)

check(data.get('ok') == True, f"API ok=True (got: {data.get('ok')})")

msgs = data.get('data', [])
check(len(msgs) > 0, f"Got messages: {len(msgs)}")

sender_nicknames = 0
for m in msgs:
    has = 'sender_nickname' in m
    if 'sender_nickname' in m:
        nn = m['sender_nickname']
        if nn is not None and len(nn) > 0:
            sender_nicknames += 1

check('sender_nickname' in msgs[0] if msgs else False, "First message has sender_nickname field")
check(sender_nicknames > 0, f"At least one message has non-empty sender_nickname (found {sender_nicknames})")

print(f"\n{'='*40}")
print(f"Results: {PASSED} passed, {FAILED} failed")
sys.exit(0 if FAILED == 0 else 1)