Skip to content

Commit ae7c091

Browse files
[IMP] web_form_banner: imp tests
1 parent af647b1 commit ae7c091

File tree

2 files changed

+61
-13
lines changed

2 files changed

+61
-13
lines changed

web_form_banner/demo/web_form_banner_rule_demo.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ else:
3232
<field name="model_id" ref="base.model_res_partner" />
3333
<field
3434
name="trigger_field_ids"
35-
eval="[(6, 0, [ref('base.field_res_partner__email')])]"
35+
eval="[Command.set([ref('base.field_res_partner__email')])]"
3636
/>
3737
<field name="severity">warning</field>
3838
<field name="target_xpath">//sheet</field>
@@ -49,7 +49,7 @@ else:
4949
<field name="model_id" ref="base.model_res_partner" />
5050
<field
5151
name="trigger_field_ids"
52-
eval="[(6, 0, [ref('base.field_res_partner__category_id')])]"
52+
eval="[Command.set([ref('base.field_res_partner__category_id')])]"
5353
/>
5454
<field name="severity">danger</field>
5555
<field name="target_xpath">//field[@name='category_id']</field>

web_form_banner/tests/test_web_form_banner.py

Lines changed: 59 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,65 @@ def setUpClass(cls):
1313
super().setUpClass()
1414
cls.Partner = cls.env["res.partner"]
1515
cls.Rule = cls.env["web.form.banner.rule"]
16-
cls.rule_name = cls.env.ref("web_form_banner.demo_rule_partner_name_length")
17-
cls.rule_email = cls.env.ref("web_form_banner.demo_rule_partner_email_missing")
18-
cls.rule_tag = cls.env.ref("web_form_banner.demo_rule_partner_tag_missing")
19-
# Disable the email and tag rules to avoid interference in most tests
20-
cls.rule_email.active = False
21-
cls.rule_tag.active = False
16+
existing_rules = cls.Rule.search([])
17+
cls._disabled_rule_ids = existing_rules.ids
18+
if existing_rules:
19+
existing_rules.write({"active": False})
20+
partner_model_id = cls.env["ir.model"]._get("res.partner").id
21+
cls.rule_name = cls.Rule.create(
22+
{
23+
"name": "Partner name length notice",
24+
"model_id": partner_model_id,
25+
"message_value_code": """
26+
name = (record.name or "").strip()
27+
n = len(name)
28+
if n > 20:
29+
result = {
30+
"visible": True,
31+
"severity": "danger",
32+
"html": "Name too long!",
33+
}
34+
elif n > 10:
35+
result = {
36+
"visible": True,
37+
"severity": "warning",
38+
"html": "Name a bit long.",
39+
}
40+
else:
41+
result = {"visible": False}
42+
""",
43+
}
44+
)
45+
cls.rule_email = cls.Rule.create(
46+
{
47+
"name": "Partner email missing notice (dynamic)",
48+
"model_id": partner_model_id,
49+
"message": "Email missing!",
50+
"message_value_code": "{'visible': not bool(draft.email)}",
51+
"active": False, # disable to avoid interference in most tests
52+
}
53+
)
54+
cls.rule_tag = cls.Rule.create(
55+
{
56+
"name": "Partner tag missing notice (dynamic)",
57+
"model_id": partner_model_id,
58+
"message": "Missing tag!",
59+
"message_value_code": "{'visible': not bool(draft.category_id)}",
60+
"active": False, # disable to avoid interference in most tests
61+
}
62+
)
2263
cls.partner_form_view = cls.env.ref("base.view_partner_form")
2364
cls.p_len3 = cls.Partner.create({"name": "Bob"}) # 3
2465
cls.p_len12 = cls.Partner.create({"name": "Yoshi Tashiro"}) # 12
2566
cls.p_len22 = cls.Partner.create({"name": "Professor Charles Xavier"}) # 22
2667

68+
@classmethod
69+
def tearDownClass(cls):
70+
# restore previously active rules
71+
if getattr(cls, "_disabled_rule_ids", None):
72+
cls.Rule.browse(cls._disabled_rule_ids).exists().write({"active": True})
73+
super().tearDownClass()
74+
2775
def _get_arch_tree(self, model, view):
2876
res = model.get_view(view_id=view.id, view_type="form")
2977
return etree.fromstring(res["arch"])
@@ -90,8 +138,8 @@ def test_not_injected_on_unrelated_model(self):
90138

91139
def test_contains_expected_messages_and_severities(self):
92140
code = (self.rule_name.message_value_code or "").strip()
93-
self.assertIn("This partner's name is very long!", code)
94-
self.assertIn("This partner's name is a bit long.", code)
141+
self.assertIn("Name too long!", code)
142+
self.assertIn("Name a bit long.", code)
95143
self.assertRegex(code, r"['\"]danger['\"]", "Missing 'danger' literal")
96144
self.assertRegex(code, r"['\"]warning['\"]", "Missing 'warning' literal")
97145

@@ -114,7 +162,7 @@ def test_banner_visibility_and_content(self):
114162
)
115163
self.assertTrue(out.get("visible"))
116164
self.assertEqual(out.get("severity"), "danger")
117-
self.assertIn("very long", out.get("html", ""))
165+
self.assertIn("too long", out.get("html", ""))
118166

119167
def test_inactive_rule_returns_hidden(self):
120168
# Flip active off just for this check
@@ -133,7 +181,7 @@ def test_compute_message_dynamic_simple_field(self):
133181
self.rule_email.id, "res.partner", self.p_len3.id, form_vals={"email": ""}
134182
)
135183
self.assertTrue(out.get("visible"))
136-
self.assertIn("This partner is missing email!", out.get("html"))
184+
self.assertIn("Email missing!", out.get("html"))
137185
out = self.Rule.compute_message(
138186
self.rule_email.id,
139187
"res.partner",
@@ -152,7 +200,7 @@ def test_compute_message_dynamic_m2m(self):
152200
form_vals={"category_id": []},
153201
)
154202
self.assertTrue(out.get("visible"))
155-
self.assertIn("Tag is missing!", out.get("html"))
203+
self.assertIn("Missing tag!", out.get("html"))
156204
out = self.Rule.compute_message(
157205
self.rule_tag.id,
158206
"res.partner",

0 commit comments

Comments
 (0)