from pathlib import Path import shutil audit = Path(__file__).resolve().parent path = audit/'test_protocol_audit_boundaries.py' text = path.read_text(encoding='utf-8') insert = ''' def test_overflowing_unanswered_batch_cannot_answer_from_truncated_tail(self): self.db.messages = [message(i, text=f'连续问题-{i}') for i in range(1,102)] self.db.events = [self.db.messages[-1]] self.bot.poll_once() self.generate.assert_not_called() self.assertEqual(self.sender.calls, []) self.assertIn('100', self.bot._pending[session_key(ACCOUNT, CONV)]['last_error']) def test_exactly_100_unanswered_messages_preserve_every_part(self): self.db.messages = [message(i, text=f'连续问题-{i}') for i in range(1,101)] self.db.events = [self.db.messages[-1]] self.bot.poll_once() context = self.generate.call_args.args[0] self.assertEqual(len(context['messages']), 100) self.assertEqual(context['messages'][0]['content'], '连续问题-1') self.assertEqual(len(self.sender.calls), 1) def test_own_reply_within_long_history_makes_current_batch_complete(self): self.db.messages = [message(i, text=f'历史-{i}') for i in range(1,202)] self.db.messages[-3] = message(199, self=True, text='人工已回复') self.db.events = [self.db.messages[-1]] self.bot.poll_once() self.generate.assert_called_once() self.assertEqual(len(self.sender.calls), 1) def test_existing_approved_draft_with_media_is_not_sent(self): pic = message(2, text='[图片]') pic['content_type'] = 3 latest = message(3, text='请看图') self.db.messages = [pic, latest] self.bot.message_batch_window_seconds = 60 self.db.events = [latest] self.bot.poll_once() state = self.bot._pending[session_key(ACCOUNT, CONV)] state.update(reply_text='过时批准草稿', approved=True, awaiting_review=True, ready_at=0) self.bot.poll_once() self.assertFalse(state['approved']) self.assertFalse(state['awaiting_review']) self.assertEqual(state['reply_text'], '') self.assertEqual(self.sender.calls, []) ''' marker = "\n\nif __name__ == '__main__':" assert marker in text and 'test_overflowing_unanswered_batch' not in text path.write_text(text.replace(marker, '\n'+insert+marker), encoding='utf-8') shutil.copy2(path, Path('C:/wechat_rpa')/path.name)