"""Tests for BankRecAdapter's fusion paths.""" from odoo.tests.common import TransactionCase, tagged from odoo.addons.fusion_accounting_ai.services.data_adapters.bank_rec import BankRecAdapter from . import _factories as f @tagged('post_install', '-at_install') class TestBankRecAdapter(TransactionCase): def setUp(self): super().setUp() self.partner = self.env['res.partner'].create({'name': 'Adapter Test Partner'}) self.adapter = BankRecAdapter(self.env) def test_list_unreconciled_via_fusion_returns_base_fields(self): bank_line = f.make_bank_line( self.env, amount=100.00, partner=self.partner, memo='Adapter base test') result = self.adapter.list_unreconciled_via_fusion( company_id=self.env.company.id, limit=50) ours = [r for r in result if r['id'] == bank_line.id] self.assertEqual(len(ours), 1) row = ours[0] for f_name in ['id', 'date', 'payment_ref', 'amount', 'partner_id', 'journal_id']: self.assertIn(f_name, row) self.assertIn('fusion_top_suggestion_id', row) self.assertIn('fusion_confidence_band', row) self.assertIn('attachment_count', row) def test_list_unreconciled_via_community_omits_fusion_fields(self): bank_line = f.make_bank_line(self.env, amount=200.00, partner=self.partner) result = self.adapter.list_unreconciled_via_community( company_id=self.env.company.id, limit=50) ours = [r for r in result if r['id'] == bank_line.id] self.assertEqual(len(ours), 1) self.assertNotIn('fusion_top_suggestion_id', ours[0]) def test_suggest_matches_via_fusion_returns_dict(self): partner = self.env['res.partner'].create({'name': 'Suggest Adapter'}) invoice = f.make_invoice(self.env, partner=partner, amount=350.00) bank_line = f.make_bank_line(self.env, amount=350.00, partner=partner) result = self.adapter.suggest_matches_via_fusion( statement_line_ids=[bank_line.id], limit_per_line=3) self.assertIsInstance(result, dict) self.assertIn(bank_line.id, result) self.assertGreater(len(result[bank_line.id]), 0) def test_suggest_matches_via_community_returns_empty(self): bank_line = f.make_bank_line(self.env, amount=100.00, partner=self.partner) result = self.adapter.suggest_matches_via_community( statement_line_ids=[bank_line.id]) self.assertEqual(result, {}) def test_accept_suggestion_via_fusion(self): partner = self.env['res.partner'].create({'name': 'Accept Adapter'}) invoice = f.make_invoice(self.env, partner=partner, amount=425.00) recv_lines = invoice.line_ids.filtered( lambda l: l.account_id.account_type == 'asset_receivable') bank_line = f.make_bank_line(self.env, amount=425.00, partner=partner) sug = f.make_suggestion( self.env, statement_line=bank_line, candidate_move_lines=recv_lines, confidence=0.95) result = self.adapter.accept_suggestion_via_fusion(suggestion_id=sug.id) self.assertIn('partial_ids', result) self.assertGreater(len(result['partial_ids']), 0) def test_accept_suggestion_via_community_raises(self): with self.assertRaises(NotImplementedError): self.adapter.accept_suggestion_via_community(suggestion_id=1) def test_unreconcile_via_fusion(self): partner = self.env['res.partner'].create({'name': 'Unrec Adapter'}) bank_line, recv_lines = f.make_reconcileable_pair( self.env, amount=275.00, partner=partner) rec_result = self.env['fusion.reconcile.engine'].reconcile_one( bank_line, against_lines=recv_lines) partial_ids = rec_result['partial_ids'] result = self.adapter.unreconcile_via_fusion( partial_reconcile_ids=partial_ids) self.assertIn('unreconciled_line_ids', result) self.assertGreater(len(result['unreconciled_line_ids']), 0)