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')