from odoo.tests.common import TransactionCase, tagged from odoo.addons.fusion_accounting_ai.services.data_adapters.base import ( DataAdapter, AdapterMode, ) from odoo.addons.fusion_accounting_ai.services.data_adapters import get_adapter @tagged('post_install', '-at_install') class TestDataAdapterBase(TransactionCase): """Verify the data adapter base class chooses the correct backend.""" def test_adapter_mode_pure_community(self): """With no fusion native and no Enterprise, adapter selects COMMUNITY.""" adapter = DataAdapter(self.env) mode = adapter._select_mode( fusion_native_model='fusion.bank.rec.widget', enterprise_module='account_accountant', ) self.assertIn(mode, (AdapterMode.FUSION, AdapterMode.ENTERPRISE, AdapterMode.COMMUNITY)) def test_adapter_falls_back_when_fusion_model_missing(self): """Adapter must not error when the fusion native model isn't loaded.""" adapter = DataAdapter(self.env) mode = adapter._select_mode( fusion_native_model='fusion.never.exists', enterprise_module='also_does_not_exist', ) self.assertEqual(mode, AdapterMode.COMMUNITY) @tagged('post_install', '-at_install') class TestBankRecAdapter(TransactionCase): """Verify the bank-rec adapter returns rows in any install profile.""" def setUp(self): super().setUp() self.journal = self.env['account.journal'].create({ 'name': 'Test Bank', 'type': 'bank', 'code': 'TBNK', }) self.statement = self.env['account.bank.statement'].create({ 'name': 'Test Statement', 'journal_id': self.journal.id, }) self.line = self.env['account.bank.statement.line'].create({ 'statement_id': self.statement.id, 'journal_id': self.journal.id, 'date': '2026-04-18', 'payment_ref': 'Test Payment', 'amount': 100.0, }) def test_list_unreconciled_returns_our_test_line(self): """The adapter should find the unreconciled line we just created.""" adapter = get_adapter(self.env, 'bank_rec') rows = adapter.list_unreconciled(journal_id=self.journal.id, limit=10) ids = [r['id'] for r in rows] self.assertIn(self.line.id, ids, f"Expected line {self.line.id} in unreconciled list, got: {ids}")