1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/data_merge/tests/test_merge_account.py
2024-12-10 09:04:09 +07:00

113 lines
4.5 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import Command
from odoo.tests.common import TransactionCase
from odoo.exceptions import UserError
from odoo.tests.common import tagged, users
@tagged('post_install', '-at_install')
class TestMerge(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
if 'account.account' not in cls.env:
cls.skipTest(cls, "`account` module not installed")
cls.customer_invoice_journal = cls.env['account.journal'].search([('company_id', '=', cls.env.company.id), ('name', '=', 'Customer Invoices')])
cls.account_sale_a = cls.env['account.account'].create({
'code': '40001',
'name': 'Account Sale A',
'account_type': 'asset_receivable',
'reconcile': True,
})
cls.account_sale_b = cls.env['account.account'].create({
'code': '40002',
'name': 'Account Sale B',
'account_type': 'asset_receivable',
'reconcile': True,
})
cls.partner_a = cls.env['res.partner'].create({'name': 'Partner A'})
cls.partner_b = cls.env['res.partner'].create({'name': 'Partner B'})
def _enable_merge(self, model_name):
self.res_model_id = self.env['ir.model'].search([('model', '=', model_name)])
self.res_model_id.action_merge_contextual_enable()
self.model_id = self.env['data_merge.model'].create({
'name': model_name,
'res_model_id': self.res_model_id.id,
})
def test_merge_account(self):
"""
Test that we cannot merge accounts.
"""
self._enable_merge('account.account')
data_merge_group = self.env['data_merge.group'].create({
'model_id': self.model_id.id,
'res_model_id': self.res_model_id.id,
'record_ids': [
(0, 0, {
'res_id': self.account_sale_a.id,
'is_master': True,
}),
(0, 0, {
'res_id': self.account_sale_b.id,
}),
],
})
# use to replicate information sent from JS call `_onMergeClick`
group_records = {str(data_merge_group.id): data_merge_group.record_ids.ids}
with self.assertRaises(UserError, msg="You cannot merge accounts."):
self.env['data_merge.group'].merge_multiple_records(group_records)
@users('admin')
def test_merge_partner_in_hashed_entries(self):
"""
Test that we cannot merge partners used in hashed entries
"""
self.env.user.write({'groups_id': [(4, self.env.ref('account.group_account_user').id)]})
self._enable_merge('res.partner')
self.env['account.move'].create({
'move_type': 'out_invoice',
'invoice_date': '2023-07-21',
'partner_id': self.partner_b.id,
'invoice_line_ids': [Command.create({'name': 'test line', 'price_unit': 1000})],
}).action_post()
self.customer_invoice_journal.restrict_mode_hash_table = True
move = self.env['account.move'].create({
'move_type': 'out_invoice',
'invoice_date': '2023-07-22',
'partner_id': self.partner_b.id,
'invoice_line_ids': [Command.create({'name': 'test line', 'price_unit': 1000})],
})
move.action_post()
# The integrity check should work
integrity_check = [journal for journal in move.company_id._check_hash_integrity()['results'] if journal['journal_name'] == self.customer_invoice_journal.name][0]
self.assertRegex(integrity_check['msg_cover'], 'Entries are hashed from.*')
data_merge_group = self.env['data_merge.group'].create({
'model_id': self.model_id.id,
'res_model_id': self.res_model_id.id,
'record_ids': [
(0, 0, {
'res_id': self.partner_a.id,
'is_master': True,
}),
(0, 0, {
'res_id': self.partner_b.id,
}),
],
})
# use to replicate information sent from JS call `_onMergeClick`
group_records = {str(data_merge_group.id): data_merge_group.record_ids.ids}
with self.assertRaises(UserError, msg="Records that are used as fields in hashed entries cannot be merged."):
self.env['data_merge.group'].merge_multiple_records(group_records)