forked from Mapan/odoo17e
113 lines
4.5 KiB
Python
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)
|