Odoo18-Base/addons/account/tests/test_res_partner_merge.py
2025-01-06 10:57:38 +07:00

73 lines
4.0 KiB
Python

from odoo.addons.account.tests.common import AccountTestInvoicingCommon
from odoo.tests import tagged
@tagged('post_install', '-at_install')
class TestMergePartner(AccountTestInvoicingCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.Partner = cls.env['res.partner']
cls.Bank = cls.env['res.partner.bank']
cls.Payment = cls.env['account.payment']
# Create partners
cls.partner1 = cls.Partner.create({'name': 'Partner 1', 'email': 'partner1@example.com'})
cls.partner2 = cls.Partner.create({'name': 'Partner 2', 'email': 'partner2@example.com'})
cls.partner3 = cls.Partner.create({'name': 'Partner 3', 'email': 'partner3@example.com'})
# Create bank accounts
cls.bank1 = cls.Bank.create({'acc_number': '12345', 'partner_id': cls.partner1.id})
cls.bank2 = cls.Bank.create({'acc_number': '67890', 'partner_id': cls.partner2.id})
cls.bank3 = cls.Bank.create({'acc_number': '12345', 'partner_id': cls.partner3.id})
# Create payments linked to bank accounts
cls.payment1 = cls.Payment.create({
'partner_id': cls.partner1.id,
'partner_bank_id': cls.bank1.id,
'amount': 100,
'payment_type': 'outbound',
'payment_method_id': cls.env.ref('account.account_payment_method_manual_out').id,
'journal_id': cls.company_data['default_journal_bank'].id,
})
cls.payment2 = cls.Payment.create({
'partner_id': cls.partner2.id,
'partner_bank_id': cls.bank2.id,
'amount': 200,
'payment_type': 'outbound',
'payment_method_id': cls.env.ref('account.account_payment_method_manual_out').id,
'journal_id': cls.company_data['default_journal_bank'].id,
})
cls.payment3 = cls.Payment.create({
'partner_id': cls.partner3.id,
'partner_bank_id': cls.bank3.id,
'amount': 200,
'payment_type': 'outbound',
'payment_method_id': cls.env.ref('account.account_payment_method_manual_out').id,
'journal_id': cls.company_data['default_journal_bank'].id,
})
def test_merge_partners_with_bank_accounts_linked_to_payments(self):
wizard = self.env['base.partner.merge.automatic.wizard'].create({})
wizard._merge([self.partner1.id, self.partner2.id], self.partner1)
self.assertFalse(self.partner2.exists(), "Source partner should be deleted after merge")
self.assertTrue(self.partner1.exists(), "Destination partner should exist after merge")
self.assertEqual(self.payment1.partner_id, self.partner1, "Payment should be linked to the destination partner")
self.assertEqual(self.payment2.partner_id, self.partner1, "Payment should be linked to the destination partner")
self.assertEqual(self.payment1.partner_bank_id.partner_id, self.partner1, "Payment's bank account should belong to the destination partner")
self.assertEqual(self.payment2.partner_bank_id.partner_id, self.partner1, "Payment's bank account should belong to the destination partner")
def test_merge_partners_with_duplicate_bank_accounts_linked_to_payments(self):
wizard = self.env['base.partner.merge.automatic.wizard'].create({})
wizard._merge([self.partner1.id, self.partner3.id], self.partner1)
self.assertFalse(self.partner3.exists(), "Source partner should be deleted after merge")
self.assertTrue(self.partner1.exists(), "Destination partner should exist after merge")
self.assertEqual(self.payment1.partner_id, self.partner1, "Payment should be linked to the destination partner")
self.assertEqual(self.payment3.partner_id, self.partner1, "Payment should be linked to the destination partner")
self.assertEqual(self.payment1.partner_bank_id.partner_id, self.partner1, "Payment's bank account should belong to the destination partner")
self.assertEqual(self.payment3.partner_bank_id.partner_id, self.partner1, "Payment's bank account should belong to the destination partner")