Odoo18-Base/odoo/addons/base/tests/test_ir_embedded_actions.py
2025-01-06 10:57:38 +07:00

146 lines
6.1 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.exceptions import UserError
from odoo.addons.base.tests.common import TransactionCaseWithUserDemo
class TestEmbeddedActionsBase(TransactionCaseWithUserDemo):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.test_partner = cls.env['res.partner'].create({
'city': 'OrigCity',
'email': 'test.partner@test.example.com',
'name': 'TestingPartner',
'employee': True,
})
cls.context = {
'active_model': 'res.partner',
'active_id': cls.test_partner.id,
}
# create parent action
cls.parent_action = cls.env['ir.actions.act_window'].create({
'name': 'ParentAction',
'res_model': 'res.partner',
})
# create actions
cls.action_1 = cls.env['ir.actions.act_window'].create({
'name': 'Action1',
'res_model': 'res.partner',
})
# create actions
cls.action_2 = cls.env['ir.actions.act_window'].create({
'name': 'Action2',
'res_model': 'res.partner',
})
# create embedded actions
cls.embedded_action_1 = cls.env['ir.embedded.actions'].create({
'name': 'EmbeddedAction1',
'parent_res_model': 'res.partner',
'parent_action_id': cls.parent_action.id,
'action_id': cls.action_1.id,
})
# create embedded actions
cls.embedded_action_2 = cls.env['ir.embedded.actions'].create({
'name': 'EmbeddedAction1',
'parent_res_model': 'res.partner',
'parent_action_id': cls.parent_action.id,
'action_id': cls.action_2.id,
})
def get_embedded_actions_ids(self, parent_action):
return parent_action.with_context(self.context).read()[0]['embedded_action_ids']
def test_parent_has_embedded_actions(self):
res = self.get_embedded_actions_ids(self.parent_action)
self.assertEqual(len(res), 2, "There should be 2 embedded records linked to the parent action")
self.assertTrue(self.embedded_action_1.id in res and self.embedded_action_2.id in res, "The correct embedded actions\
should be in embedded_actions")
def test_cannot_delete_default_embedded_action(self):
return
def test_can_delete_custom_embedded_action(self):
embedded_action_custo = self.env['ir.embedded.actions'].create({
'name': 'EmbeddedActionCusto',
'parent_res_model': 'res.partner',
'parent_action_id': self.parent_action.id,
'action_id': self.action_2.id,
})
try:
embedded_action_custo.unlink()
except UserError:
self.assertTrue(False)
def test_domain_on_embedded_action(self):
test_partner_custo = self.env['res.partner'].create({
'city': 'CustoCity',
'email': 'test.partner@test.example.com',
'name': 'CustomPartner',
'employee': False,
})
self.context = {
'active_model': 'res.partner',
'active_id': test_partner_custo.id,
}
embedded_action_custo = self.env['ir.embedded.actions'].create({
'name': 'EmbeddedActionCusto',
'parent_res_model': 'res.partner',
'parent_action_id': self.parent_action.id,
'action_id': self.action_2.id,
'domain': [('employee', '=', True)]
})
res = self.get_embedded_actions_ids(self.parent_action)
self.assertTrue(embedded_action_custo.id not in res, "The embedded action not respecting the domain should\
not be returned in the read method")
def test_groups_on_embedded_action(self):
arbitrary_group = self.env['res.groups'].create({
'name': 'arbitrary_group',
'implied_ids': [(6, 0, [self.ref('base.group_user')])],
})
embedded_action_custo = self.env['ir.embedded.actions'].create({
'name': 'EmbeddedActionCusto',
'parent_res_model': 'res.partner',
'parent_action_id': self.parent_action.id,
'action_id': self.action_2.id,
'groups_ids': [(6, 0, [arbitrary_group.id])]
})
res = self.get_embedded_actions_ids(self.parent_action)
self.assertEqual(len(res), 2, "There should be 2 embedded records linked to the parent action")
self.assertTrue(self.embedded_action_1.id in res and self.embedded_action_2.id in res, "The correct embedded actions\
should be in embedded_actions")
self.env.user.write({'groups_id': [(4, arbitrary_group.id)]})
res = self.get_embedded_actions_ids(self.parent_action)
self.assertEqual(len(res), 3, "There should be 3 embedded records linked to the parent action")
self.assertTrue(self.embedded_action_1.id in res and self.embedded_action_2.id in res and embedded_action_custo.id in res, "The correct embedded actions\
should be in embedded_actions")
def test_create_embedded_action_with_action_and_python_method(self):
embedded_action1, embedded_action2 = self.env['ir.embedded.actions'].create([
{
'name': 'EmbeddedActionCustom',
'action_id': self.action_2.id,
'parent_action_id': self.parent_action.id,
'parent_res_model': 'res.partner',
'python_method': "action_python_method",
},
{
'name': 'EmbeddedActionCustom2',
'action_id': self.action_2.id,
'python_method': "",
'parent_action_id': self.parent_action.id,
'parent_res_model': 'res.partner',
}
])
self.assertEqual(embedded_action1.python_method, "action_python_method")
self.assertFalse(embedded_action1.action_id)
self.assertEqual(embedded_action2.action_id, self.env['ir.actions.actions'].browse(self.action_2.id))
self.assertFalse(embedded_action2.python_method)