87 lines
3.0 KiB
Python
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)
|