Skip to content

Commit

Permalink
[MIG] base_search_custom_field_filter: Migration to 18.0
Browse files Browse the repository at this point in the history
  • Loading branch information
absal-smile committed Feb 3, 2025
1 parent b97f577 commit 07bea92
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

from odoo import _, api, exceptions, fields, models
from odoo.tools import ustr


class IrUiCustomFilter(models.Model):
Expand All @@ -30,21 +29,19 @@ class IrUiCustomFilter(models.Model):
)

def _get_related_field(self):
"""Determine the chain of fields."""
self.ensure_one()
related = self.expression.split(".")
target = self.env[self.model_name]
for name in related:
field = target._fields[name]
target = target[name]
target = self.env[self.model_id.model]
name = self.expression.split(".")[0]
field = target._fields[name]
return field

@api.constrains("model_id", "expression")
@api.constrains("model_id", "expression")
def _check_expression(self):
for record in self:
try:
record._get_related_field()
except KeyError as e:
raise exceptions.ValidationError(
_("Incorrect expression: %s.") % (ustr(e))
_("Incorrect expression: %s.") % str(e)
) from e
38 changes: 38 additions & 0 deletions base_search_custom_field_filter/tests/test_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,41 @@ def test_1(self):
"""
)
)

def test_invalid_expression(self):
filter_form = Form(self.env["ir.ui.custom.field.filter"])
filter_form.model_id = self.env.ref("base.model_res_partner")
filter_form.name = "Invalid Expression"
with self.assertRaises(exceptions.ValidationError):
filter_form.expression = "invalid_expression"
filter_form.save()

def test_valid_expression(self):
filter_form = Form(self.env["ir.ui.custom.field.filter"])
filter_form.model_id = self.env.ref("base.model_res_partner")
filter_form.name = "Valid Expression"
filter_form.expression = "valid_expression"
filter_form.save()
arch = self.env["res.partner"].get_view(False, "search")["arch"]
search = etree.fromstring(arch)
self.assertTrue(
search.xpath(
"""
//search
/field[@name="valid_expression"]
"""
)
)

def test_duplicate_filter(self):
filter_form = Form(self.env["ir.ui.custom.field.filter"])
filter_form.model_id = self.env.ref("base.model_res_partner")
filter_form.name = "Duplicate Filter"
filter_form.expression = "duplicate_expression"
filter_form.save()
with self.assertRaises(exceptions.ValidationError):
duplicate_filter_form = Form(self.env["ir.ui.custom.field.filter"])
duplicate_filter_form.model_id = self.env.ref("base.model_res_partner")
duplicate_filter_form.name = "Duplicate Filter"
duplicate_filter_form.expression = "duplicate_expression"
duplicate_filter_form.save()
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
<record id="view_ir_ui_custom_field_filter_form" model="ir.ui.view">
<field name="model">ir.ui.custom.field.filter</field>
<field name="arch" type="xml">
<tree editable="bottom">
<list editable="bottom">
<field name="sequence" widget="handle" />
<field name="model_id" options="{'no_create': True}" />
<field name="name" />
<field name="expression" />
<field name="position_after" />
</tree>
</list>
</field>
</record>

Expand Down

0 comments on commit 07bea92

Please sign in to comment.