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