@@ -29,15 +29,41 @@ def setUpClass(cls):
2929 }
3030 )
3131
32- cls .product = cls .env ["product.product" ].create (
32+ # PARTNER
33+ cls .partner = cls .env ["res.partner" ].create (
3334 {
34- "name" : "Product 1" ,
35+ "name" : "Partner 1" ,
3536 }
3637 )
3738
3839 cls .rule = cls .env ["extended.security.rule" ].create (
3940 {
40- "model_id" : cls .env .ref ("product.model_product_product" ).id ,
41+ "model_id" : cls .env .ref ("base.model_res_partner" ).id ,
42+ "group_ids" : [(4 , cls .group .id )],
43+ "perm_read" : False ,
44+ "perm_write" : False ,
45+ "perm_create" : False ,
46+ "perm_unlink" : False ,
47+ }
48+ )
49+
50+ # IR ACTIONS SERVER
51+ cls .res_partner_model = cls .env ["ir.model" ].search (
52+ [("model" , "=" , "res.partner" )]
53+ )
54+ cls .comment_html = "<p>MyComment</p>"
55+ cls .action_1 = cls .env ["ir.actions.server" ].create (
56+ {
57+ "name" : "TestAction" ,
58+ "model_id" : cls .res_partner_model .id ,
59+ "model_name" : "res.partner" ,
60+ "state" : "code" ,
61+ "code" : 'record.write({"comment": "%s"})' % cls .comment_html ,
62+ }
63+ )
64+ cls .rule_1 = cls .env ["extended.security.rule" ].create (
65+ {
66+ "model_id" : cls .env .ref ("base.model_ir_actions_server" ).id ,
4167 "group_ids" : [(4 , cls .group .id )],
4268 "perm_read" : False ,
4369 "perm_write" : False ,
@@ -51,87 +77,83 @@ def test_if_member_of_group__access_error_not_raised(self, access_type):
5177 self .rule ["perm_{}" .format (access_type )] = True
5278 self .user .groups_id |= self .group
5379 method = "check_extended_security_{}" .format (access_type )
54- getattr (self .product .with_user (self .user ), method )()
80+ getattr (self .partner .with_user (self .user ), method )()
5581
5682 @data ("read" , "write" , "create" , "unlink" )
5783 def test_if_access_type_uncheked__access_error_raised (self , access_type ):
5884 method = "check_extended_security_{}" .format (access_type )
59- getattr (self .product .with_user (self .user ), method )()
85+ getattr (self .partner .with_user (self .user ), method )()
6086
6187 @data ("read" , "write" , "create" , "unlink" )
6288 def test_if_not_member_of_group__access_error_raised (self , access_type ):
6389 self .rule ["perm_{}" .format (access_type )] = True
6490 method = "check_extended_security_{}" .format (access_type )
6591
6692 with pytest .raises (AccessError ):
67- getattr (self .product .with_user (self .user ), method )()
93+ getattr (self .partner .with_user (self .user ), method )()
6894
6995 def test_after_rule_deleted__rule_not_applied (self ):
7096 self .rule .perm_read = True
7197 with pytest .raises (AccessError ):
72- self .product .with_user (self .user ).check_extended_security_read ()
98+ self .partner .with_user (self .user ).check_extended_security_read ()
7399
74100 self .rule .unlink ()
75- self .product .with_user (self .user ).check_extended_security_read ()
101+ self .partner .with_user (self .user ).check_extended_security_read ()
76102
77103 def test_after_rule_created__rule_applied (self ):
78- self .product .with_user (self .user ).check_extended_security_read ()
104+ self .partner .with_user (self .user ).check_extended_security_read ()
79105 self .rule .copy ({"perm_read" : True })
80106
81107 with pytest .raises (AccessError ):
82- self .product .with_user (self .user ).check_extended_security_read ()
108+ self .partner .with_user (self .user ).check_extended_security_read ()
83109
84110 def test_after_rule_unchecked__rule_not_applied (self ):
85111 self .rule .perm_read = True
86112
87113 with pytest .raises (AccessError ):
88- self .product .with_user (self .user ).check_extended_security_read ()
114+ self .partner .with_user (self .user ).check_extended_security_read ()
89115
90116 self .rule .perm_read = False
91- self .product .with_user (self .user ).check_extended_security_read ()
117+ self .partner .with_user (self .user ).check_extended_security_read ()
92118
93119 def test_after_rule_archived__rule_not_applied (self ):
94120 self .rule .perm_read = True
95121
96122 with pytest .raises (AccessError ):
97- self .product .with_user (self .user ).check_extended_security_read ()
123+ self .partner .with_user (self .user ).check_extended_security_read ()
98124
99125 self .rule .active = False
100- self .product .with_user (self .user ).check_extended_security_read ()
126+ self .partner .with_user (self .user ).check_extended_security_read ()
101127
102128 def test_after_rule_checked__rule_applied (self ):
103- self .product .with_user (self .user ).check_extended_security_read ()
129+ self .partner .with_user (self .user ).check_extended_security_read ()
104130
105131 self .rule .perm_read = True
106132 with pytest .raises (AccessError ):
107- self .product .with_user (self .user ).check_extended_security_read ()
133+ self .partner .with_user (self .user ).check_extended_security_read ()
108134
109135 def test_on_search__if_not_authorized__domain_is_empty (self ):
110136 self .rule .perm_read = True
111137 domain = (
112- self .env ["product.product" ]
113- .with_user (self .user )
114- .get_extended_security_domain ()
138+ self .env ["res.partner" ].with_user (self .user ).get_extended_security_domain ()
115139 )
116- search_result = self .env ["product.product " ].search (domain )
117- assert self .product not in search_result
140+ search_result = self .env ["res.partner " ].search (domain )
141+ assert self .partner not in search_result
118142
119143 def test_on_search__if_authorized__domain_not_empty (self ):
120144 self .rule .perm_read = True
121145 self .user .groups_id |= self .group
122146
123147 domain = (
124- self .env ["product.product" ]
125- .with_user (self .user )
126- .get_extended_security_domain ()
148+ self .env ["res.partner" ].with_user (self .user ).get_extended_security_domain ()
127149 )
128- search_result = self .env ["product.product " ].search (domain )
150+ search_result = self .env ["res.partner " ].search (domain )
129151
130- assert self .product in search_result
152+ assert self .partner in search_result
131153
132- def _get_product_list_view_arch (self ):
133- view = self .env .ref ("product.product_product_tree_view " )
134- arch = self .env ["product.product " ].get_view (view_id = view .id )["arch" ]
154+ def _get_partner_list_view_arch (self ):
155+ view = self .env .ref ("base.view_partner_tree " )
156+ arch = self .env ["res.partner " ].get_view (view_id = view .id )["arch" ]
135157 return etree .fromstring (arch )
136158
137159 @data (
@@ -143,7 +165,7 @@ def _get_product_list_view_arch(self):
143165 def test_if_authorized__view_property_not_disabled (
144166 self , access_type , view_property
145167 ):
146- list_view = self ._get_product_list_view_arch ()
168+ list_view = self ._get_partner_list_view_arch ()
147169 assert view_property not in list_view .attrib
148170
149171 def _get_nested_ir_rule_many2many_arch (self ):
@@ -177,6 +199,15 @@ def _get_nested_ir_model_access_one2many_arch(self):
177199 tree_attrib = model_access_field ["edition_view" ]["tree" ].attrib
178200 return tree_attrib
179201
202+ def test_if_not_authorized__toggle_button_hidden (self ):
203+ self .rule_1 .perm_write = True
204+ form_view = self ._get_ir_actions_server_form_view_arch ()
205+ assert not form_view .xpath ("//header/button[@name='create_action']" )
206+
207+ def test_if_authorized__toggle_button_not_hidden (self ):
208+ form_view = self ._get_ir_actions_server_form_view_arch ()
209+ assert form_view .xpath ("//header/button[@name='create_action']" )
210+
180211 @data (
181212 ("write" , "edit" ),
182213 ("create" , "create" ),
@@ -197,11 +228,6 @@ def test_in_nested_one2many_list__view_property_disabled(
197228 one2many_list = self ._get_nested_ir_model_access_one2many_arch ()
198229 assert view_property in one2many_list
199230
200- def test_if_not_authorized__toggle_button_hidden (self ):
201- self .rule .perm_write = True
202- form_view = self ._get_product_form_view_arch ()
203- assert not form_view .xpath ("//button[@name='action_update_quantity_on_hand']" )
204-
205231 def test_read_access_action (self ):
206232 self .rule .model_id = self .env .ref ("base.model_res_partner" )
207233 self .rule .perm_write = True
@@ -217,22 +243,22 @@ def test_read_access_action(self):
217243 def test_if_unauthorized__view_property_disabled (self , access_type , view_property ):
218244 self .rule ["perm_{}" .format (access_type )] = True
219245
220- list_view = self ._get_product_list_view_arch ()
246+ list_view = self ._get_partner_list_view_arch ()
221247 assert list_view .attrib [view_property ] == "false"
222248
223- def _get_product_form_view_arch (self ):
224- return self ._get_form_view_arch (
225- "product.product" , "product.product_normal_form_view"
226- )
227-
228249 def _get_partner_form_view_arch (self ):
229250 return self ._get_form_view_arch ("res.partner" , "base.view_partner_form" )
230251
252+ def _get_ir_actions_server_form_view_arch (self ):
253+ return self ._get_form_view_arch (
254+ "ir.actions.server" , "base.view_server_action_form"
255+ )
256+
231257 def _get_form_view_arch (self , model , view_ref ):
232258 view = self .env .ref (view_ref )
233259 arch = self .env [model ].get_view (view_id = view .id )["arch" ]
234260 return etree .fromstring (arch )
235261
236- def test_if_authorized__toggle_button_not_hidden (self ):
237- form_view = self ._get_product_form_view_arch ()
238- assert form_view .xpath ("//button [@name='action_open_label_layout ']" )
262+ def test_if_authorized__field_not_hidden (self ):
263+ form_view = self ._get_partner_form_view_arch ()
264+ assert form_view .xpath ("//field [@name='name ']" )
0 commit comments