test_s1_sender.py 2.14 KB
#!/usr/bin/env python3
"""test_s1_sender.py — GREEN: verify get_messages() returns sender_username for regular messages."""
import sys, os
sys.path.insert(0, "/data/data/com.termux/files/home/wechat-viewer")

from wechat_db import get_messages, query

PASSED = 0
FAILED = 0

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

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

group_talker = groups[0]['talker']
print(f"Testing group: {group_talker}")

msgs = get_messages(group_talker, limit=10)
print(f"Got {len(msgs)} messages")

regular_count = 0
for m in msgs:
    has_sender = 'sender_username' in m
    check(has_sender, f"Message has sender_username field")
    
    if has_sender:
        sender = m['sender_username']
        # System messages (recall, etc.) may have None sender — that's OK
        # But at least one regular message should have a non-None sender
        if sender is not None:
            regular_count += 1
            if regular_count == 1:
                check('@chatroom' not in sender, f"sender_username not chatroom ID: {sender}")
                check(len(sender) > 0, f"sender_username non-empty: {sender}")

check(regular_count > 0, f"At least one message has non-None sender_username (found {regular_count})")

# Also test personal chat
personals = query("SELECT talker FROM message WHERE talker NOT LIKE '%@chatroom' AND talker NOT LIKE 'gh_%' LIMIT 1")
if personals:
    p_talker = personals[0]['talker']
    print(f"\nTesting personal: {p_talker}")
    p_msgs = get_messages(p_talker, limit=3)
    for m in p_msgs:
        if 'sender_username' in m:
            if m.get('isSend') == 0 and m['sender_username'] is not None:
                check(m['sender_username'] == p_talker, f"Personal chat sender matches talker ({m['sender_username']} == {p_talker})")
                break

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