Files
Odoo-Modules/fusion_accounting_bank_rec/tests/test_ai_suggestion_lifecycle.py

87 lines
3.0 KiB
Python

from odoo.tests.common import TransactionCase, tagged
@tagged('post_install', '-at_install')
class TestSuggestionLifecycle(TransactionCase):
"""The fusion.reconcile.suggestion state machine + computed band."""
def setUp(self):
super().setUp()
journal = self.env['account.journal'].create({
'name': 'Test Bank Suggestion',
'type': 'bank',
'code': 'TBSG',
})
statement = self.env['account.bank.statement'].create({
'name': 'Test Statement',
'journal_id': journal.id,
})
self.line = self.env['account.bank.statement.line'].create({
'statement_id': statement.id,
'journal_id': journal.id,
'date': '2026-04-19',
'payment_ref': 'Test for suggestion',
'amount': 100.00,
})
def _make_suggestion(self, confidence=0.92, **vals):
defaults = {
'company_id': self.env.company.id,
'statement_line_id': self.line.id,
'confidence': confidence,
'rank': 1,
'reasoning': 'Test',
}
defaults.update(vals)
return self.env['fusion.reconcile.suggestion'].create(defaults)
def test_compute_band_high(self):
sug = self._make_suggestion(confidence=0.96)
self.assertEqual(sug.confidence_band, 'high')
def test_compute_band_medium(self):
sug = self._make_suggestion(confidence=0.75)
self.assertEqual(sug.confidence_band, 'medium')
def test_compute_band_low(self):
sug = self._make_suggestion(confidence=0.55)
self.assertEqual(sug.confidence_band, 'low')
def test_compute_band_none(self):
sug = self._make_suggestion(confidence=0.30)
self.assertEqual(sug.confidence_band, 'none')
def test_default_state_is_pending(self):
sug = self._make_suggestion()
self.assertEqual(sug.state, 'pending')
def test_state_transition_to_accepted(self):
sug = self._make_suggestion()
sug.write({
'state': 'accepted',
'accepted_at': '2026-04-19 12:00:00',
'accepted_by': self.env.user.id,
})
self.assertEqual(sug.state, 'accepted')
self.assertTrue(sug.accepted_at)
self.assertEqual(sug.accepted_by, self.env.user)
def test_state_transition_to_rejected_with_reason(self):
sug = self._make_suggestion()
sug.write({
'state': 'rejected',
'rejected_at': '2026-04-19 12:05:00',
'rejected_reason': 'wrong_invoice',
})
self.assertEqual(sug.state, 'rejected')
self.assertEqual(sug.rejected_reason, 'wrong_invoice')
def test_state_transition_to_superseded(self):
sug = self._make_suggestion()
sug.write({'state': 'superseded'})
self.assertEqual(sug.state, 'superseded')
def test_currency_id_relates_to_line(self):
sug = self._make_suggestion()
self.assertEqual(sug.currency_id, self.line.currency_id)