mirror of
https://gitlab.com/flectra-community/server-ux.git
synced 2024-11-14 18:22:05 +00:00
105 lines
4.4 KiB
Python
105 lines
4.4 KiB
Python
|
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
||
|
# Copyright 2020 Tecnativa - Pedro M. Baeza
|
||
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||
|
|
||
|
from flectra import exceptions
|
||
|
from flectra.modules import registry
|
||
|
from flectra.tests import common
|
||
|
from flectra.tests.common import Form
|
||
|
|
||
|
from ..hooks import uninstall_hook
|
||
|
|
||
|
|
||
|
class TestChainedSwapper(common.SavepointCase):
|
||
|
@classmethod
|
||
|
def setUpClass(cls):
|
||
|
super(TestChainedSwapper, cls).setUpClass()
|
||
|
cls.env["res.lang"].load_lang("es_ES")
|
||
|
res_partner = cls.env["res.partner"]
|
||
|
cls.partner_parent = res_partner.create(
|
||
|
{"name": "parent partner cs", "lang": "en_US"}
|
||
|
)
|
||
|
cls.partner_child_1 = res_partner.create(
|
||
|
{"name": "partner child1 cs", "parent_id": cls.partner_parent.id}
|
||
|
)
|
||
|
cls.partner_child_2 = res_partner.create(
|
||
|
{"name": "partner child2 cs", "parent_id": cls.partner_parent.id}
|
||
|
)
|
||
|
# Prevent duplicate error removing demo data if exists
|
||
|
record = cls.env.ref("chained_swapper.chained_swapper_demo", False)
|
||
|
if record:
|
||
|
record.unlink()
|
||
|
|
||
|
chained_swapper_form = Form(cls.env["chained.swapper"])
|
||
|
chained_swapper_form.name = "Language"
|
||
|
chained_swapper_form.model_id = cls.env.ref("base.model_res_partner")
|
||
|
chained_swapper_form.field_id = cls.env.ref("base.field_res_partner__lang")
|
||
|
with chained_swapper_form.sub_field_ids.new() as sub_field_form:
|
||
|
sub_field_form.sub_field_chain = "child_ids.lang"
|
||
|
with chained_swapper_form.constraint_ids.new() as constraint_form:
|
||
|
constraint_form.name = "Only parent company"
|
||
|
constraint_form.expression = "bool(records.mapped('parent_id'))"
|
||
|
|
||
|
cls.chained_swapper = chained_swapper_form.save()
|
||
|
cls.chained_swapper.add_action()
|
||
|
|
||
|
def test_create_unlink_action(self):
|
||
|
"""Test if Sidebar Action is added / removed to / from given object."""
|
||
|
action = (
|
||
|
self.chained_swapper.ref_ir_act_window_id
|
||
|
and self.chained_swapper.ref_ir_act_window_id.binding_model_id
|
||
|
)
|
||
|
self.assertTrue(action)
|
||
|
# Remove the action
|
||
|
self.chained_swapper.unlink_action()
|
||
|
action = self.chained_swapper.ref_ir_act_window_id
|
||
|
self.assertFalse(action)
|
||
|
# Add an action
|
||
|
self.chained_swapper.add_action()
|
||
|
action = (
|
||
|
self.chained_swapper.ref_ir_act_window_id
|
||
|
and self.chained_swapper.ref_ir_act_window_id.binding_model_id
|
||
|
)
|
||
|
self.assertTrue(action)
|
||
|
|
||
|
def test_unlink_chained_swapper(self):
|
||
|
"""Test if related actions are removed when a chained swapper
|
||
|
record is unlinked."""
|
||
|
action_id = self.chained_swapper.ref_ir_act_window_id.id
|
||
|
self.chained_swapper.unlink()
|
||
|
action = self.env["ir.actions.act_window"].search([("id", "=", action_id)])
|
||
|
self.assertFalse(action)
|
||
|
|
||
|
def test_change_constrained_partner_language(self):
|
||
|
with self.assertRaises(exceptions.UserError):
|
||
|
self.env["chained.swapper.wizard"].with_context(
|
||
|
active_model="res.partner",
|
||
|
active_id=self.partner_parent.id,
|
||
|
active_ids=(self.partner_parent | self.partner_child_1).ids,
|
||
|
chained_swapper_id=self.chained_swapper.id,
|
||
|
).create({"lang": "es_ES"})
|
||
|
|
||
|
def test_change_partner_language(self):
|
||
|
self.env["chained.swapper.wizard"].with_context(
|
||
|
active_model="res.partner",
|
||
|
active_id=self.partner_parent.id,
|
||
|
active_ids=[self.partner_parent.id],
|
||
|
chained_swapper_id=self.chained_swapper.id,
|
||
|
).create({"lang": "es_ES"})
|
||
|
self.assertEqual(self.partner_parent.lang, "es_ES")
|
||
|
self.assertEqual(self.partner_child_1.lang, "es_ES")
|
||
|
self.assertEqual(self.partner_child_2.lang, "es_ES")
|
||
|
|
||
|
def test_uninstall_hook(self):
|
||
|
"""Test if related actions are removed when mass editing
|
||
|
record is uninstalled."""
|
||
|
action_id = self.chained_swapper.ref_ir_act_window_id.id
|
||
|
uninstall_hook(self.cr, registry)
|
||
|
self.assertFalse(self.env["ir.actions.act_window"].browse(action_id).exists())
|
||
|
|
||
|
def test_invalid_constraint(self):
|
||
|
with self.assertRaises(exceptions.ValidationError):
|
||
|
self.chained_swapper.constraint_ids.write(
|
||
|
{"expression": "Something incorrect"}
|
||
|
)
|