Files
AIGame/Tools/seed_mail_test.py
T

46 lines
2.4 KiB
Python

"""Prepare mail UI cases only in the isolated mail account/database."""
import json
from pathlib import Path
import sqlite3
import sys
import time
root = Path(__file__).resolve().parents[1]
test_root = (root / 'Tools/output/g1-live').resolve()
database = Path((test_root / 'mail-db.path').read_text(encoding='utf-8-sig').strip()).resolve()
username = (test_root / 'mail-account.txt').read_text(encoding='utf-8-sig').strip()
mode = sys.argv[1] if len(sys.argv) == 2 else ''
if test_root not in database.parents or not username.startswith('g1live_mail_') or mode not in ('mixed', 'lost', 'empty', 'expired'):
raise RuntimeError('Refusing non-isolated mail fixture')
with sqlite3.connect(database) as conn:
row = conn.execute('SELECT u.pid,g.state FROM users u JOIN game_states g ON g.pid=u.pid WHERE u.username=?', (username,)).fetchone()
state = json.loads(row[1])
if state['schema'] != 7 or state.get('pendingShot') or state.get('pendingBattle'):
raise RuntimeError('Finish isolated pending activities first')
now = int(time.time())
def letter(i, reward=None, **flags):
m = dict(mailId='fixture_' + str(i), title='营地来信 ' + str(i),
body='伙伴们送来了问候。\n这是一封用于检查列表、附件和有效期的来信。',
reward=dict(coins=0, candy=0, balls=0, tickets=0), sentAt=now-60,
expiresAt=now+3600, read=False, claimed=False, expired=False)
if reward:
m['reward'].update(reward)
m.update(flags)
return m
if mode == 'mixed':
state['mails'] = [letter(0, dict(coins=7, balls=1, tickets=1)),
letter(1, dict(balls=500), expiresAt=now-1),
letter(2, dict(balls=500), read=True, claimed=True),
letter(3), letter(4, dict(balls=2)),
letter(5, dict(candy=20)), letter(6), letter(7)]
state['mails'][5]['body'] = '伙伴来信\n' + ('这段正文可以上下滑动阅读。\n' * 30)
elif mode == 'lost':
state['mails'] = [letter('lost', dict(balls=5))]
elif mode == 'expired':
state['mails'] = [letter('expired', dict(balls=500), expiresAt=now-1)]
else:
state['mails'] = []
state['revision'] += 1
conn.execute('UPDATE game_states SET state=? WHERE pid=?', (json.dumps(state, ensure_ascii=False), row[0]))
print('Prepared isolated mail UI case:', mode)