46 lines
2.4 KiB
Python
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)
|