Files
kefu/deploy/recognition-audit-20260916/test_visual_cache_audit.py
T
2026-09-21 10:34:06 +08:00

57 lines
2.4 KiB
Python

"""Upgraded OCR must not identify a customer solely by their avatar."""
import unittest
from unittest import mock
import numpy as np
from wechat_bot import WeChatBot
class VisualNameCacheAuditTest(unittest.TestCase):
def bot(self):
bot = WeChatBot.__new__(WeChatBot)
bot._strict_visual_actions = True
bot.identity_by_name = True
bot._row_display_name = mock.Mock(return_value='')
bot._raw_session_fingerprint = mock.Mock(return_value=b'a' * 8)
bot._canonical_fp = mock.Mock(side_effect=lambda raw: raw)
bot._row_name_panel = mock.Mock(side_effect=lambda image, *args, **kwargs: image)
reader = mock.Mock()
reader.canonical.side_effect = lambda name: name
reader.read_deep.side_effect = [('客户甲@微信', .99), ('客户乙@微信', .99)]
bot._name_reader_instance = reader
return bot
def panels(self):
first = np.full((20, 120, 3), 245, dtype=np.uint8)
first[4:16, 10:16] = 30
second = first.copy()
second[4:16, 30:36] = 30
return first, second
def test_same_avatar_different_names_run_separate_ocr(self):
bot = self.bot()
first, second = self.panels()
self.assertEqual(bot._row_display_name_deep(first, 30), '客户甲@微信')
self.assertEqual(bot._row_display_name_deep(second, 30), '客户乙@微信')
self.assertEqual(bot._name_reader_instance.read_deep.call_count, 2)
self.assertEqual(bot._row_name_deep_cached(first, 30), '客户甲@微信')
self.assertEqual(bot._row_name_deep_cached(second, 30), '客户乙@微信')
def test_same_visible_name_reuses_cached_result_across_row_reorder(self):
bot = self.bot()
first, _ = self.panels()
self.assertEqual(bot._row_display_name_deep(first, 30), '客户甲@微信')
self.assertEqual(bot._row_display_name_deep(first.copy(), 90), '客户甲@微信')
self.assertEqual(bot._name_reader_instance.read_deep.call_count, 1)
def test_unreadable_crop_does_not_reuse_an_avatar_only_name(self):
bot = self.bot()
first, second = self.panels()
self.assertEqual(bot._row_display_name_deep(first, 30), '客户甲@微信')
bot._row_name_panel.return_value = None
bot._row_name_panel.side_effect = None
self.assertEqual(bot._row_name_deep_cached(second, 30), '')
if __name__ == '__main__':
unittest.main()