@@ -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