Files
kefu/deploy/review-visibility-20260916/add_native_review_render_test.py
T
2026-09-21 10:34:06 +08:00

66 lines
3.7 KiB
Python

from pathlib import Path
import os
extra = '''
def test_real_queue_snapshot_renders_review_and_handoff_in_embedded_browser(self):
from PySide6.QtCore import QEventLoop, QTimer
from PySide6.QtWidgets import QMainWindow
self.seed()
owner=QMainWindow();owner._push_console_state=mock.Mock()
shell=qt.ConsoleShell(owner);shell.resize(1440,900);shell.show()
self.addCleanup(owner.deleteLater);self.addCleanup(shell.deleteLater);self.addCleanup(shell.close)
if not shell.page_ready:
loaded=[];loop=QEventLoop()
def finished(ok):
loaded.append(bool(ok));loop.quit()
shell.loadFinished.connect(finished);QTimer.singleShot(10000,loop.quit);loop.exec()
shell.loadFinished.disconnect(finished);self.assertEqual(loaded,[True])
def evaluate(script):
values=[];loop=QEventLoop()
def completed(value):
values.append(value);loop.quit()
shell.page().runJavaScript(script,completed);QTimer.singleShot(5000,loop.quit);loop.exec()
self.assertEqual(len(values),1)
return values[0]
for key,filter_name in (('review','待审核'),('uncertain','需人工')):
self.page._set_task_filter(filter_name);self.host._console_selected_key=key
people=self.host._console_people();task=self.host._console_task(people)
payload={'view':'queue','demo':False,'ready':True,'people':people,'task':task,
'selectedKey':key,'queueFilter':filter_name,'system':{'scale':'自动'},
'metrics':self.host._console_metrics(people,[])}
encoded=json.dumps(payload,ensure_ascii=False)
rendered=json.loads(evaluate(f"""
window.applyState({encoded});
JSON.stringify({{
approve:!!document.querySelector('[data-action="approve-task"]'),
cancel:!!document.querySelector('[data-action="cancel-task"]'),
handoff:document.querySelector('[data-action="handoff-task"]')?.textContent||'',
detail:document.querySelector('.queue-task-detail')?.textContent||''
}});
"""))
if key=='review':
self.assertTrue(rendered['approve']);self.assertIn('测试规则',rendered['detail'])
self.assertIn('待审核合成回复',rendered['detail'])
else:
self.assertFalse(rendered['approve']);self.assertFalse(rendered['cancel'])
self.assertIn('核对后转人工',rendered['handoff'])
self.assertIn('不会自动重发',rendered['detail'])
'''
for root in (Path(r'C:\kefu\wechat_rpa'), Path(r'C:\wechat_rpa')):
for name in ('test_desktop_review_visibility.py','wechat_gui_qt.py','review_state.py'):
path=root/name;text=path.read_text(encoding='utf-8')
if name.startswith('test_'):
text+=extra
elif name=='review_state.py':
text=text.replace("or stage in {'manual_takeover', 'error', 'failed'}", "or send_state == 'failed' or stage in {'manual_takeover', 'error', 'failed'}")
else:
old='pending = raw.get("pending", raw) if isinstance(raw, dict) else {}\n rows = sorted('
new='pending = raw.get("pending", raw) if isinstance(raw, dict) else {}\n pending = {key: value for key, value in pending.items() if key != "manual_handoffs"} if isinstance(pending, dict) else {}\n rows = sorted('
assert old in text
text=text.replace(old,new,1)
temp=path.with_suffix('.audit-tmp');temp.write_text(text,encoding='utf-8');os.replace(temp,path)
print(str(root)+': added real Qt render regression')