146 lines
6.1 KiB
Python
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)
|