Merge PR #2669 into 15.0

Signed-off-by pedrobaeza
pull/2682/head
OCA-git-bot 2023-07-07 19:07:54 +00:00
commit f467dd6a22
4 changed files with 25 additions and 14 deletions

View File

@ -68,7 +68,9 @@ class Base(models.AbstractModel):
:args: :args:
:returns: list of models :returns: list of models
""" """
models = self.env["changeset.field.rule"].search([]).mapped("model_id.model") models = (
self.env["changeset.field.rule"].sudo().search([]).mapped("model_id.model")
)
if config["test_enable"] and self.env.context.get("test_record_changeset"): if config["test_enable"] and self.env.context.get("test_record_changeset"):
if "res.partner" not in models: if "res.partner" not in models:
models += ["res.partner"] # Used in tests models += ["res.partner"] # Used in tests

View File

@ -110,7 +110,7 @@ class ChangesetFieldRule(models.Model):
""" """
domain = self._get_rules_search_domain(record_model_name, source_model_name) domain = self._get_rules_search_domain(record_model_name, source_model_name)
model_rules = self.search( model_rules = self.sudo().search(
domain, domain,
# using 'ASC' means that 'NULLS LAST' is the default # using 'ASC' means that 'NULLS LAST' is the default
order="source_model_id ASC", order="source_model_id ASC",

View File

@ -188,7 +188,7 @@ class RecordChangesetChange(models.Model):
@api.model @api.model
def get_field_for_type(self, field, prefix): def get_field_for_type(self, field, prefix):
assert prefix in ("origin", "old", "new") assert prefix in ("origin", "old", "new")
field_type = self._type_to_suffix.get(field.ttype) field_type = self._type_to_suffix.get(field.sudo().ttype)
if not field_type: if not field_type:
raise NotImplementedError("field type %s is not supported" % field_type) raise NotImplementedError("field type %s is not supported" % field_type)
return "{}_value_{}".format(prefix, field_type) return "{}_value_{}".format(prefix, field_type)
@ -347,11 +347,12 @@ class RecordChangesetChange(models.Model):
:returns: dict of values, boolean :returns: dict of values, boolean
""" """
new_field_name = self.get_field_for_type(rule.field_id, "new") field = rule.sudo().field_id
new_field_name = self.get_field_for_type(field, "new")
new_value = self._value_for_changeset(record, field_name, value=value) new_value = self._value_for_changeset(record, field_name, value=value)
change = { change = {
new_field_name: new_value, new_field_name: new_value,
"field_id": rule.field_id.id, "field_id": field.id,
"rule_id": rule.id, "rule_id": rule.id,
} }
if rule.action == "auto": if rule.action == "auto":
@ -368,7 +369,7 @@ class RecordChangesetChange(models.Model):
# Normally the 'old' value is set when we use the 'apply' # Normally the 'old' value is set when we use the 'apply'
# button, but since we short circuit the 'apply', we # button, but since we short circuit the 'apply', we
# directly set the 'old' value here # directly set the 'old' value here
old_field_name = self.get_field_for_type(rule.field_id, "old") old_field_name = self.get_field_for_type(field, "old")
# get values ready to write as expected by the changeset # get values ready to write as expected by the changeset
# (for instance, a many2one is written in a reference # (for instance, a many2one is written in a reference
# field) # field)

View File

@ -46,8 +46,11 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self._setup_rules() self._setup_rules()
self.partner = self.env["res.partner"].create( self.demo_user = self.env.ref("base.user_demo")
{"name": "X", "street": "street X", "street2": "street2 X"} self.partner = (
self.env["res.partner"]
.with_user(self.demo_user)
.create({"name": "X", "street": "street X", "street2": "street2 X"})
) )
# Add context for this test for compatibility with other modules' tests # Add context for this test for compatibility with other modules' tests
self.partner = self.partner.with_context(test_record_changeset=True) self.partner = self.partner.with_context(test_record_changeset=True)
@ -64,7 +67,7 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase):
self.assertEqual(self.partner.count_pending_changeset_changes, 1) self.assertEqual(self.partner.count_pending_changeset_changes, 1)
self.assert_changeset( self.assert_changeset(
self.partner, self.partner,
self.env.user, self.demo_user,
[ [
(self.field_name, "X", "Y", "done"), (self.field_name, "X", "Y", "done"),
(self.field_street, "street X", "street Y", "draft"), (self.field_street, "street X", "street Y", "draft"),
@ -74,6 +77,11 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase):
self.assertEqual(self.partner.name, "Y") self.assertEqual(self.partner.name, "Y")
self.assertEqual(self.partner.street, "street X") self.assertEqual(self.partner.street, "street X")
self.assertEqual(self.partner.street2, "street2 X") self.assertEqual(self.partner.street2, "street2 X")
# Pending Changes widget can be rendered for the unprivileged user
self.env["record.changeset.change"].invalidate_cache()
self.env["record.changeset.change"].with_user(
self.demo_user
).get_fields_changeset_changes(self.partner._name, self.partner.id)
def test_create_new_changeset(self): def test_create_new_changeset(self):
"""Create a new partner with a changeset""" """Create a new partner with a changeset"""
@ -140,7 +148,7 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase):
self.assertEqual(self.partner.count_pending_changesets, 1) self.assertEqual(self.partner.count_pending_changesets, 1)
self.assert_changeset( self.assert_changeset(
self.partner, self.partner,
self.env.user, self.demo_user,
[(self.field_street, "street X", False, "draft")], [(self.field_street, "street X", False, "draft")],
) )
@ -197,9 +205,9 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase):
self.assertEqual(self.partner.street, "street X") self.assertEqual(self.partner.street, "street X")
self.assertEqual(self.partner.changeset_ids.change_ids.state, "draft") self.assertEqual(self.partner.changeset_ids.change_ids.state, "draft")
user = self.env.ref("base.user_demo") other_demo_user = self.demo_user.copy()
user.groups_id += self.env.ref("base_changeset.group_changeset_user") other_demo_user.groups_id += self.env.ref("base_changeset.group_changeset_user")
self.partner.changeset_ids.change_ids.with_user(user).apply() self.partner.changeset_ids.change_ids.with_user(other_demo_user).apply()
self.partner._compute_changeset_ids() self.partner._compute_changeset_ids()
self.partner._compute_count_pending_changesets() self.partner._compute_count_pending_changesets()
self.assertEqual(self.partner.count_pending_changesets, 0) self.assertEqual(self.partner.count_pending_changesets, 0)
@ -406,7 +414,7 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase):
self.partner.write({"street": False}) self.partner.write({"street": False})
self.partner._compute_changeset_ids() self.partner._compute_changeset_ids()
changeset = self.partner.changeset_ids changeset = self.partner.changeset_ids
self.assertEqual(changeset.source, self.env.user) self.assertEqual(changeset.source, self.demo_user)
def test_new_changeset_source_other_model(self): def test_new_changeset_source_other_model(self):
"""Define source from another model""" """Define source from another model"""