from odoo.tests.common import TransactionCase from odoo.tests import tagged @tagged('post_install', '-at_install') class TestFusionFollowupTextCache(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() cls.partner = cls.env['res.partner'].create({'name': 'Cache Test Partner'}) cls.level = cls.env['fusion.followup.level'].create({ 'name': 'Reminder', 'sequence': 401, 'delay_days': 7, 'tone': 'gentle', }) cls.cache = cls.env['fusion.followup.text.cache'] def _kwargs(self, **overrides): base = dict( partner_id=self.partner.id, level_id=self.level.id, overdue_amount=1234.56, longest_overdue_days=10, invoice_count=3, tone='gentle', ) base.update(overrides) return base def test_fingerprint_stable_and_unique(self): fp1 = self.cache.compute_fingerprint(**self._kwargs()) fp2 = self.cache.compute_fingerprint(**self._kwargs()) fp3 = self.cache.compute_fingerprint(**self._kwargs(tone='firm')) self.assertEqual(fp1, fp2) self.assertNotEqual(fp1, fp3) self.assertEqual(len(fp1), 64) def test_lookup_returns_empty_when_missing(self): result = self.cache.lookup(**self._kwargs()) self.assertFalse(result) def test_lookup_finds_cached_entry(self): kwargs = self._kwargs() fp = self.cache.compute_fingerprint(**kwargs) entry = self.cache.create({ 'partner_id': self.partner.id, 'level_id': self.level.id, 'fingerprint': fp, 'subject': 'Hi', 'body': 'Please pay.', 'tone_used': 'gentle', }) found = self.cache.lookup(**kwargs) self.assertEqual(found.id, entry.id) def test_action_increment_use(self): entry = self.cache.create({ 'partner_id': self.partner.id, 'fingerprint': 'abc123', }) self.assertEqual(entry.use_count, 0) entry.action_increment_use() entry.action_increment_use() self.assertEqual(entry.use_count, 2)