#!/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)