test(fusion_accounting_followup): full follow-up flow integration test
Made-with: Cursor
This commit is contained in:
@@ -15,3 +15,4 @@ from . import test_followup_adapter
|
||||
from . import test_followup_tools
|
||||
from . import test_followup_cron
|
||||
from . import test_engine_property
|
||||
from . import test_followup_full_flow
|
||||
|
||||
84
fusion_accounting_followup/tests/test_followup_full_flow.py
Normal file
84
fusion_accounting_followup/tests/test_followup_full_flow.py
Normal file
@@ -0,0 +1,84 @@
|
||||
"""End-to-end integration: scan -> escalate -> send -> reset."""
|
||||
|
||||
from datetime import date, timedelta
|
||||
from odoo.tests.common import TransactionCase
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install', 'integration')
|
||||
class TestFollowupFullFlow(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.engine = self.env['fusion.followup.engine']
|
||||
self.partner = self.env['res.partner'].create({
|
||||
'name': 'Full Flow Partner', 'email': 'flow@test.local',
|
||||
})
|
||||
for seq, name, days, tone in [(701, 'FlowReminder', 7, 'gentle'),
|
||||
(702, 'FlowWarning', 30, 'firm'),
|
||||
(703, 'FlowLegal', 60, 'legal')]:
|
||||
self.env['fusion.followup.level'].create({
|
||||
'name': name, 'sequence': seq,
|
||||
'delay_days': days, 'tone': tone,
|
||||
})
|
||||
|
||||
line = self.env['account.move.line'].search([
|
||||
('parent_state', '=', 'posted'),
|
||||
('account_id.account_type', '=', 'asset_receivable'),
|
||||
('reconciled', '=', False),
|
||||
('amount_residual', '>', 0),
|
||||
], limit=1)
|
||||
if not line:
|
||||
self.skipTest("No posted unreconciled receivable lines in test DB")
|
||||
line.write({
|
||||
'partner_id': self.partner.id,
|
||||
'date_maturity': date.today() - timedelta(days=20),
|
||||
})
|
||||
|
||||
def test_full_flow_scan_send_reset(self):
|
||||
level = self.engine.compute_followup_level(self.partner)
|
||||
self.assertTrue(level)
|
||||
self.assertGreater(level.delay_days, 0)
|
||||
|
||||
Run = self.env['fusion.followup.run']
|
||||
before = Run.search_count([('partner_id', '=', self.partner.id)])
|
||||
result = self.engine.send_followup_email(self.partner, force=True)
|
||||
after = Run.search_count([('partner_id', '=', self.partner.id)])
|
||||
self.assertGreater(after, before)
|
||||
self.assertIn(result['status'], ('sent', 'manual_review'))
|
||||
|
||||
self.engine.pause_followup(self.partner,
|
||||
until_date=date.today() + timedelta(days=14))
|
||||
result_paused = self.engine.send_followup_email(self.partner)
|
||||
self.assertTrue(result_paused['status'].startswith('paused'))
|
||||
|
||||
self.engine.reset_followup(self.partner)
|
||||
self.partner.invalidate_recordset(['fusion_followup_status'])
|
||||
self.assertEqual(self.partner.fusion_followup_status, 'no_action')
|
||||
|
||||
def test_escalate_advances_to_next_level(self):
|
||||
Level = self.env['fusion.followup.level']
|
||||
level1 = Level.search([('sequence', '=', 701)], limit=1)
|
||||
self.engine.send_followup_email(self.partner, level=level1, force=True)
|
||||
self.partner.invalidate_recordset(['fusion_followup_last_level_id'])
|
||||
result = self.engine.escalate_to_next_level(self.partner)
|
||||
self.assertIn('partner_id', result)
|
||||
self.partner.invalidate_recordset(['fusion_followup_last_level_id'])
|
||||
if self.partner.fusion_followup_last_level_id:
|
||||
self.assertGreaterEqual(self.partner.fusion_followup_last_level_id.sequence, 702)
|
||||
|
||||
def test_text_cache_reused_on_repeat(self):
|
||||
Cache = self.env['fusion.followup.text.cache']
|
||||
self.engine.send_followup_email(self.partner, force=True)
|
||||
after_first = Cache.search_count([('partner_id', '=', self.partner.id)])
|
||||
self.engine.send_followup_email(self.partner, force=True)
|
||||
after_second = Cache.search_count([('partner_id', '=', self.partner.id)])
|
||||
self.assertEqual(after_first, after_second)
|
||||
|
||||
def test_history_records_each_send(self):
|
||||
Run = self.env['fusion.followup.run']
|
||||
before = Run.search_count([('partner_id', '=', self.partner.id)])
|
||||
self.engine.send_followup_email(self.partner, force=True)
|
||||
self.engine.send_followup_email(self.partner, force=True)
|
||||
after = Run.search_count([('partner_id', '=', self.partner.id)])
|
||||
self.assertEqual(after - before, 2)
|
||||
Reference in New Issue
Block a user