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:
: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 "res.partner" not in models:
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)
model_rules = self.search(
model_rules = self.sudo().search(
domain,
# using 'ASC' means that 'NULLS LAST' is the default
order="source_model_id ASC",

View File

@ -188,7 +188,7 @@ class RecordChangesetChange(models.Model):
@api.model
def get_field_for_type(self, field, prefix):
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:
raise NotImplementedError("field type %s is not supported" % field_type)
return "{}_value_{}".format(prefix, field_type)
@ -347,11 +347,12 @@ class RecordChangesetChange(models.Model):
: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)
change = {
new_field_name: new_value,
"field_id": rule.field_id.id,
"field_id": field.id,
"rule_id": rule.id,
}
if rule.action == "auto":
@ -368,7 +369,7 @@ class RecordChangesetChange(models.Model):
# Normally the 'old' value is set when we use the 'apply'
# button, but since we short circuit the 'apply', we
# 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
# (for instance, a many2one is written in a reference
# field)

View File

@ -46,8 +46,11 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase):
def setUp(self):
super().setUp()
self._setup_rules()
self.partner = self.env["res.partner"].create(
{"name": "X", "street": "street X", "street2": "street2 X"}
self.demo_user = self.env.ref("base.user_demo")
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
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.assert_changeset(
self.partner,
self.env.user,
self.demo_user,
[
(self.field_name, "X", "Y", "done"),
(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.street, "street 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):
"""Create a new partner with a changeset"""
@ -140,7 +148,7 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase):
self.assertEqual(self.partner.count_pending_changesets, 1)
self.assert_changeset(
self.partner,
self.env.user,
self.demo_user,
[(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.changeset_ids.change_ids.state, "draft")
user = self.env.ref("base.user_demo")
user.groups_id += self.env.ref("base_changeset.group_changeset_user")
self.partner.changeset_ids.change_ids.with_user(user).apply()
other_demo_user = self.demo_user.copy()
other_demo_user.groups_id += self.env.ref("base_changeset.group_changeset_user")
self.partner.changeset_ids.change_ids.with_user(other_demo_user).apply()
self.partner._compute_changeset_ids()
self.partner._compute_count_pending_changesets()
self.assertEqual(self.partner.count_pending_changesets, 0)
@ -406,7 +414,7 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase):
self.partner.write({"street": False})
self.partner._compute_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):
"""Define source from another model"""