24 lines
1.4 KiB
Plaintext
24 lines
1.4 KiB
Plaintext
def test_plain_cancel_cannot_bypass_receipt_or_sending_guard(self):
|
|
for stage, send_state in [('receipt_check', ''), ('uncertain', ''), ('unknown', ''),
|
|
('sending', ''), ('queued', 'unknown')]:
|
|
self.state.update(stage=stage, send_state=send_state)
|
|
result = self.bot.cancel_pending_replies([self.key])
|
|
self.assertEqual(result['protected'], [self.key])
|
|
self.assertFalse(result['deleted'])
|
|
|
|
def test_new_task_cannot_receive_an_old_model_result_after_handoff(self):
|
|
self.state.update(stage='generating', awaiting_review=False)
|
|
self.bot._consume_database_update = mock.Mock()
|
|
self.bot.report_progress = mock.Mock()
|
|
def old_model_returns(*args, **kwargs):
|
|
self.bot.handoff_pending_replies([self.key])
|
|
# A subsequent proven customer message is a different task object.
|
|
self.bot._manual_handoffs[self.key]['resumed_at'] = 1
|
|
self.bot._cancelled_reply_sessions.clear()
|
|
self.bot._pending_reply_sessions[self.key] = {'stage': 'queued', 'staged_user_text': '后续新问题'}
|
|
return '旧模型回复'
|
|
self.bot._generate_ai_reply_impl = mock.Mock(side_effect=old_model_returns)
|
|
self.assertIsNone(self.bot._generate_ai_reply(self.fp, '旧问题'))
|
|
self.assertNotIn('staged_reply_text', self.bot._pending_reply_sessions[self.key])
|
|
|