2 """XXX rename, split, reorganize this |
2 """XXX rename, split, reorganize this |
3 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
3 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
4 """ |
4 """ |
5 from logilab.common.testlib import unittest_main |
5 from logilab.common.testlib import unittest_main |
6 |
6 |
7 from cubicweb.devtools.apptest import EnvBasedTC |
7 from cubicweb.devtools.testlib import CubicWebTC |
8 from cubicweb import CW_SOFTWARE_ROOT as BASE, Binary |
8 from cubicweb import CW_SOFTWARE_ROOT as BASE, Binary |
9 from cubicweb.selectors import (match_user_groups, implements, |
9 from cubicweb.selectors import (match_user_groups, implements, |
10 specified_etype_implements, rql_condition, |
10 specified_etype_implements, rql_condition, |
11 traced_selection) |
11 traced_selection) |
12 from cubicweb.web import NoSelectableObject |
12 from cubicweb.web import NoSelectableObject |
24 ('manage', actions.ManageAction), |
24 ('manage', actions.ManageAction), |
25 ('schema', schema.ViewSchemaAction), |
25 ('schema', schema.ViewSchemaAction), |
26 ('siteinfo', actions.SiteInfoAction), |
26 ('siteinfo', actions.SiteInfoAction), |
27 ] |
27 ] |
28 |
28 |
29 class ViewSelectorTC(EnvBasedTC): |
29 class ViewSelectorTC(CubicWebTC): |
30 |
30 |
31 def setup_database(self): |
31 def setup_database(self): |
32 self.add_entity('BlogEntry', title=u"une news !", content=u"cubicweb c'est beau") |
32 self.add_entity('BlogEntry', title=u"une news !", content=u"cubicweb c'est beau") |
33 self.add_entity('Bookmark', title=u"un signet !", path=u"view?vid=index") |
33 self.add_entity('Bookmark', title=u"un signet !", path=u"view?vid=index") |
34 self.add_entity('EmailAddress', address=u"devel@logilab.fr", alias=u'devel') |
34 self.add_entity('EmailAddress', address=u"devel@logilab.fr", alias=u'devel') |
76 ('propertiesform', cwproperties.CWPropertiesForm), |
76 ('propertiesform', cwproperties.CWPropertiesForm), |
77 ('schema', schema.SchemaView), |
77 ('schema', schema.SchemaView), |
78 ('systempropertiesform', cwproperties.SystemCWPropertiesForm)]) |
78 ('systempropertiesform', cwproperties.SystemCWPropertiesForm)]) |
79 |
79 |
80 def test_possible_views_noresult(self): |
80 def test_possible_views_noresult(self): |
81 rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999') |
81 rset, req = self.rset_and_req('Any X WHERE X eid 999999') |
82 self.assertListEqual(self.pviews(req, rset), |
82 self.assertListEqual(self.pviews(req, rset), |
83 []) |
83 []) |
84 |
84 |
85 def test_possible_views_one_egroup(self): |
85 def test_possible_views_one_egroup(self): |
86 rset, req = self.env.get_rset_and_req('CWGroup X WHERE X name "managers"') |
86 rset, req = self.rset_and_req('CWGroup X WHERE X name "managers"') |
87 self.assertListEqual(self.pviews(req, rset), |
87 self.assertListEqual(self.pviews(req, rset), |
88 [('adaptedlist', baseviews.AdaptedListView), |
88 [('adaptedlist', baseviews.AdaptedListView), |
89 ('csvexport', csvexport.CSVRsetView), |
89 ('csvexport', csvexport.CSVRsetView), |
90 ('ecsvexport', csvexport.CSVEntityView), |
90 ('ecsvexport', csvexport.CSVEntityView), |
91 ('editable-table', tableview.EditableTableView), |
91 ('editable-table', tableview.EditableTableView), |
104 ('xbel', xbel.XbelView), |
104 ('xbel', xbel.XbelView), |
105 ('xml', xmlrss.XMLView), |
105 ('xml', xmlrss.XMLView), |
106 ]) |
106 ]) |
107 |
107 |
108 def test_possible_views_multiple_egroups(self): |
108 def test_possible_views_multiple_egroups(self): |
109 rset, req = self.env.get_rset_and_req('CWGroup X') |
109 rset, req = self.rset_and_req('CWGroup X') |
110 self.assertListEqual(self.pviews(req, rset), |
110 self.assertListEqual(self.pviews(req, rset), |
111 [('adaptedlist', baseviews.AdaptedListView), |
111 [('adaptedlist', baseviews.AdaptedListView), |
112 ('csvexport', csvexport.CSVRsetView), |
112 ('csvexport', csvexport.CSVRsetView), |
113 ('ecsvexport', csvexport.CSVEntityView), |
113 ('ecsvexport', csvexport.CSVEntityView), |
114 ('editable-table', tableview.EditableTableView), |
114 ('editable-table', tableview.EditableTableView), |
128 ('xml', xmlrss.XMLView), |
128 ('xml', xmlrss.XMLView), |
129 ]) |
129 ]) |
130 |
130 |
131 def test_propertiesform_admin(self): |
131 def test_propertiesform_admin(self): |
132 assert self.vreg['views']['propertiesform'] |
132 assert self.vreg['views']['propertiesform'] |
133 rset1, req1 = self.env.get_rset_and_req('CWUser X WHERE X login "admin"') |
133 rset1, req1 = self.rset_and_req('CWUser X WHERE X login "admin"') |
134 rset2, req2 = self.env.get_rset_and_req('CWUser X WHERE X login "anon"') |
134 rset2, req2 = self.rset_and_req('CWUser X WHERE X login "anon"') |
135 self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=None)) |
135 self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=None)) |
136 self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=rset1)) |
136 self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=rset1)) |
137 self.failUnless(self.vreg['views'].select('propertiesform', req2, rset=rset2)) |
137 self.failUnless(self.vreg['views'].select('propertiesform', req2, rset=rset2)) |
138 |
138 |
139 def test_propertiesform_anon(self): |
139 def test_propertiesform_anon(self): |
140 self.login('anon') |
140 self.login('anon') |
141 rset1, req1 = self.env.get_rset_and_req('CWUser X WHERE X login "admin"') |
141 rset1, req1 = self.rset_and_req('CWUser X WHERE X login "admin"') |
142 rset2, req2 = self.env.get_rset_and_req('CWUser X WHERE X login "anon"') |
142 rset2, req2 = self.rset_and_req('CWUser X WHERE X login "anon"') |
143 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=None) |
143 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=None) |
144 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset1) |
144 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset1) |
145 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset2) |
145 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset2) |
146 |
146 |
147 def test_propertiesform_jdoe(self): |
147 def test_propertiesform_jdoe(self): |
148 self.create_user('jdoe') |
148 self.create_user('jdoe') |
149 self.login('jdoe') |
149 self.login('jdoe') |
150 rset1, req1 = self.env.get_rset_and_req('CWUser X WHERE X login "admin"') |
150 rset1, req1 = self.rset_and_req('CWUser X WHERE X login "admin"') |
151 rset2, req2 = self.env.get_rset_and_req('CWUser X WHERE X login "jdoe"') |
151 rset2, req2 = self.rset_and_req('CWUser X WHERE X login "jdoe"') |
152 self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=None)) |
152 self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=None)) |
153 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset1) |
153 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset1) |
154 self.failUnless(self.vreg['views'].select('propertiesform', req2, rset=rset2)) |
154 self.failUnless(self.vreg['views'].select('propertiesform', req2, rset=rset2)) |
155 |
155 |
156 def test_possible_views_multiple_different_types(self): |
156 def test_possible_views_multiple_different_types(self): |
157 rset, req = self.env.get_rset_and_req('Any X') |
157 rset, req = self.rset_and_req('Any X') |
158 self.assertListEqual(self.pviews(req, rset), |
158 self.assertListEqual(self.pviews(req, rset), |
159 [('csvexport', csvexport.CSVRsetView), |
159 [('csvexport', csvexport.CSVRsetView), |
160 ('ecsvexport', csvexport.CSVEntityView), |
160 ('ecsvexport', csvexport.CSVEntityView), |
161 ('editable-table', tableview.EditableTableView), |
161 ('editable-table', tableview.EditableTableView), |
162 ('filetree', treeview.FileTreeView), |
162 ('filetree', treeview.FileTreeView), |
174 ('xbel', xbel.XbelView), |
174 ('xbel', xbel.XbelView), |
175 ('xml', xmlrss.XMLView), |
175 ('xml', xmlrss.XMLView), |
176 ]) |
176 ]) |
177 |
177 |
178 def test_possible_views_any_rset(self): |
178 def test_possible_views_any_rset(self): |
179 rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N') |
179 rset, req = self.rset_and_req('Any N, X WHERE X in_group Y, Y name N') |
180 self.assertListEqual(self.pviews(req, rset), |
180 self.assertListEqual(self.pviews(req, rset), |
181 [('csvexport', csvexport.CSVRsetView), |
181 [('csvexport', csvexport.CSVRsetView), |
182 ('editable-table', tableview.EditableTableView), |
182 ('editable-table', tableview.EditableTableView), |
183 ('rsetxml', xmlrss.XMLRsetView), |
183 ('rsetxml', xmlrss.XMLRsetView), |
184 ('table', tableview.TableView), |
184 ('table', tableview.TableView), |
185 ]) |
185 ]) |
186 |
186 |
187 def test_possible_views_multiple_eusers(self): |
187 def test_possible_views_multiple_eusers(self): |
188 rset, req = self.env.get_rset_and_req('CWUser X') |
188 rset, req = self.rset_and_req('CWUser X') |
189 self.assertListEqual(self.pviews(req, rset), |
189 self.assertListEqual(self.pviews(req, rset), |
190 [('adaptedlist', baseviews.AdaptedListView), |
190 [('adaptedlist', baseviews.AdaptedListView), |
191 ('csvexport', csvexport.CSVRsetView), |
191 ('csvexport', csvexport.CSVRsetView), |
192 ('ecsvexport', csvexport.CSVEntityView), |
192 ('ecsvexport', csvexport.CSVEntityView), |
193 ('editable-table', tableview.EditableTableView), |
193 ('editable-table', tableview.EditableTableView), |
216 {'useractions': USERACTIONS, |
216 {'useractions': USERACTIONS, |
217 'siteactions': SITEACTIONS, |
217 'siteactions': SITEACTIONS, |
218 |
218 |
219 }) |
219 }) |
220 def test_possible_actions_no_entity(self): |
220 def test_possible_actions_no_entity(self): |
221 rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999') |
221 rset, req = self.rset_and_req('Any X WHERE X eid 999999') |
222 self.assertDictEqual(self.pactions(req, rset), |
222 self.assertDictEqual(self.pactions(req, rset), |
223 {'useractions': USERACTIONS, |
223 {'useractions': USERACTIONS, |
224 'siteactions': SITEACTIONS, |
224 'siteactions': SITEACTIONS, |
225 }) |
225 }) |
226 |
226 |
227 def test_possible_actions_same_type_entities(self): |
227 def test_possible_actions_same_type_entities(self): |
228 rset, req = self.env.get_rset_and_req('CWGroup X') |
228 rset, req = self.rset_and_req('CWGroup X') |
229 self.assertDictEqual(self.pactions(req, rset), |
229 self.assertDictEqual(self.pactions(req, rset), |
230 {'useractions': USERACTIONS, |
230 {'useractions': USERACTIONS, |
231 'siteactions': SITEACTIONS, |
231 'siteactions': SITEACTIONS, |
232 'mainactions': [('muledit', actions.MultipleEditAction)], |
232 'mainactions': [('muledit', actions.MultipleEditAction)], |
233 'moreactions': [('delete', actions.DeleteAction), |
233 'moreactions': [('delete', actions.DeleteAction), |
234 ('addentity', actions.AddNewAction)], |
234 ('addentity', actions.AddNewAction)], |
235 }) |
235 }) |
236 |
236 |
237 def test_possible_actions_different_types_entities(self): |
237 def test_possible_actions_different_types_entities(self): |
238 rset, req = self.env.get_rset_and_req('Any X') |
238 rset, req = self.rset_and_req('Any X') |
239 self.assertDictEqual(self.pactions(req, rset), |
239 self.assertDictEqual(self.pactions(req, rset), |
240 {'useractions': USERACTIONS, |
240 {'useractions': USERACTIONS, |
241 'siteactions': SITEACTIONS, |
241 'siteactions': SITEACTIONS, |
242 'moreactions': [('delete', actions.DeleteAction)], |
242 'moreactions': [('delete', actions.DeleteAction)], |
243 }) |
243 }) |
244 |
244 |
245 def test_possible_actions_final_entities(self): |
245 def test_possible_actions_final_entities(self): |
246 rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N') |
246 rset, req = self.rset_and_req('Any N, X WHERE X in_group Y, Y name N') |
247 self.assertDictEqual(self.pactions(req, rset), |
247 self.assertDictEqual(self.pactions(req, rset), |
248 {'useractions': USERACTIONS, |
248 {'useractions': USERACTIONS, |
249 'siteactions': SITEACTIONS}) |
249 'siteactions': SITEACTIONS}) |
250 |
250 |
251 def test_possible_actions_eetype_cwuser_entity(self): |
251 def test_possible_actions_eetype_cwuser_entity(self): |
252 rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWUser"') |
252 rset, req = self.rset_and_req('CWEType X WHERE X name "CWUser"') |
253 self.assertDictEqual(self.pactions(req, rset), |
253 self.assertDictEqual(self.pactions(req, rset), |
254 {'useractions': USERACTIONS, |
254 {'useractions': USERACTIONS, |
255 'siteactions': SITEACTIONS, |
255 'siteactions': SITEACTIONS, |
256 'mainactions': [('edit', actions.ModifyAction), |
256 'mainactions': [('edit', actions.ModifyAction), |
257 ('workflow', workflow.ViewWorkflowAction),], |
257 ('workflow', workflow.ViewWorkflowAction),], |
289 self.vreg['views'].select, 'primary', req, rset=rset) |
289 self.vreg['views'].select, 'primary', req, rset=rset) |
290 self.failUnlessRaises(NoSelectableObject, |
290 self.failUnlessRaises(NoSelectableObject, |
291 self.vreg['views'].select, 'table', req, rset=rset) |
291 self.vreg['views'].select, 'table', req, rset=rset) |
292 |
292 |
293 # no entity |
293 # no entity |
294 rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999') |
294 rset, req = self.rset_and_req('Any X WHERE X eid 999999') |
295 self.failUnlessRaises(NoSelectableObject, |
295 self.failUnlessRaises(NoSelectableObject, |
296 self.vreg['views'].select, 'index', req, rset=rset) |
296 self.vreg['views'].select, 'index', req, rset=rset) |
297 self.failUnlessRaises(NoSelectableObject, |
297 self.failUnlessRaises(NoSelectableObject, |
298 self.vreg['views'].select, 'creation', req, rset=rset) |
298 self.vreg['views'].select, 'creation', req, rset=rset) |
299 self.failUnlessRaises(NoSelectableObject, |
299 self.failUnlessRaises(NoSelectableObject, |
300 self.vreg['views'].select, 'primary', req, rset=rset) |
300 self.vreg['views'].select, 'primary', req, rset=rset) |
301 self.failUnlessRaises(NoSelectableObject, |
301 self.failUnlessRaises(NoSelectableObject, |
302 self.vreg['views'].select, 'table', req, rset=rset) |
302 self.vreg['views'].select, 'table', req, rset=rset) |
303 # one entity |
303 # one entity |
304 rset, req = self.env.get_rset_and_req('CWGroup X WHERE X name "managers"') |
304 rset, req = self.rset_and_req('CWGroup X WHERE X name "managers"') |
305 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
305 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
306 primary.PrimaryView) |
306 primary.PrimaryView) |
307 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
307 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
308 baseviews.ListView) |
308 baseviews.ListView) |
309 self.assertIsInstance(self.vreg['views'].select('edition', req, rset=rset), |
309 self.assertIsInstance(self.vreg['views'].select('edition', req, rset=rset), |
313 self.failUnlessRaises(NoSelectableObject, |
313 self.failUnlessRaises(NoSelectableObject, |
314 self.vreg['views'].select, 'creation', req, rset=rset) |
314 self.vreg['views'].select, 'creation', req, rset=rset) |
315 self.failUnlessRaises(NoSelectableObject, |
315 self.failUnlessRaises(NoSelectableObject, |
316 self.vreg['views'].select, 'index', req, rset=rset) |
316 self.vreg['views'].select, 'index', req, rset=rset) |
317 # list of entities of the same type |
317 # list of entities of the same type |
318 rset, req = self.env.get_rset_and_req('CWGroup X') |
318 rset, req = self.rset_and_req('CWGroup X') |
319 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
319 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
320 primary.PrimaryView) |
320 primary.PrimaryView) |
321 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
321 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
322 baseviews.ListView) |
322 baseviews.ListView) |
323 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
323 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
324 tableview.TableView) |
324 tableview.TableView) |
325 self.failUnlessRaises(NoSelectableObject, |
325 self.failUnlessRaises(NoSelectableObject, |
326 self.vreg['views'].select, 'creation', req, rset=rset) |
326 self.vreg['views'].select, 'creation', req, rset=rset) |
327 # list of entities of different types |
327 # list of entities of different types |
328 rset, req = self.env.get_rset_and_req('Any X') |
328 rset, req = self.rset_and_req('Any X') |
329 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
329 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
330 primary.PrimaryView) |
330 primary.PrimaryView) |
331 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
331 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
332 baseviews.ListView) |
332 baseviews.ListView) |
333 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
333 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
335 self.failUnlessRaises(NoSelectableObject, |
335 self.failUnlessRaises(NoSelectableObject, |
336 self.vreg['views'].select, 'creation', req, rset=rset) |
336 self.vreg['views'].select, 'creation', req, rset=rset) |
337 self.failUnlessRaises(NoSelectableObject, |
337 self.failUnlessRaises(NoSelectableObject, |
338 self.vreg['views'].select, 'index', req, rset=rset) |
338 self.vreg['views'].select, 'index', req, rset=rset) |
339 # whatever |
339 # whatever |
340 rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N') |
340 rset, req = self.rset_and_req('Any N, X WHERE X in_group Y, Y name N') |
341 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
341 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
342 tableview.TableView) |
342 tableview.TableView) |
343 self.failUnlessRaises(NoSelectableObject, |
343 self.failUnlessRaises(NoSelectableObject, |
344 self.vreg['views'].select, 'index', req, rset=rset) |
344 self.vreg['views'].select, 'index', req, rset=rset) |
345 self.failUnlessRaises(NoSelectableObject, |
345 self.failUnlessRaises(NoSelectableObject, |
349 self.failUnlessRaises(NoSelectableObject, |
349 self.failUnlessRaises(NoSelectableObject, |
350 self.vreg['views'].select, 'list', req, rset=rset) |
350 self.vreg['views'].select, 'list', req, rset=rset) |
351 self.failUnlessRaises(NoSelectableObject, |
351 self.failUnlessRaises(NoSelectableObject, |
352 self.vreg['views'].select, 'edition', req, rset=rset) |
352 self.vreg['views'].select, 'edition', req, rset=rset) |
353 # mixed query |
353 # mixed query |
354 rset, req = self.env.get_rset_and_req('Any U,G WHERE U is CWUser, G is CWGroup') |
354 rset, req = self.rset_and_req('Any U,G WHERE U is CWUser, G is CWGroup') |
355 self.failUnlessRaises(NoSelectableObject, |
355 self.failUnlessRaises(NoSelectableObject, |
356 self.vreg['views'].select, 'edition', req, rset=rset) |
356 self.vreg['views'].select, 'edition', req, rset=rset) |
357 self.failUnlessRaises(NoSelectableObject, |
357 self.failUnlessRaises(NoSelectableObject, |
358 self.vreg['views'].select, 'creation', req, rset=rset) |
358 self.vreg['views'].select, 'creation', req, rset=rset) |
359 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
359 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
360 tableview.TableView) |
360 tableview.TableView) |
361 |
361 |
362 def test_interface_selector(self): |
362 def test_interface_selector(self): |
363 image = self.add_entity('Image', name=u'bim.png', data=Binary('bim')) |
363 image = self.add_entity('Image', name=u'bim.png', data=Binary('bim')) |
364 # image primary view priority |
364 # image primary view priority |
365 rset, req = self.env.get_rset_and_req('Image X WHERE X name "bim.png"') |
365 rset, req = self.rset_and_req('Image X WHERE X name "bim.png"') |
366 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
366 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
367 idownloadable.IDownloadablePrimaryView) |
367 idownloadable.IDownloadablePrimaryView) |
368 |
368 |
369 |
369 |
370 def test_score_entity_selector(self): |
370 def test_score_entity_selector(self): |
371 image = self.add_entity('Image', name=u'bim.png', data=Binary('bim')) |
371 image = self.add_entity('Image', name=u'bim.png', data=Binary('bim')) |
372 # image primary view priority |
372 # image primary view priority |
373 rset, req = self.env.get_rset_and_req('Image X WHERE X name "bim.png"') |
373 rset, req = self.rset_and_req('Image X WHERE X name "bim.png"') |
374 self.assertIsInstance(self.vreg['views'].select('image', req, rset=rset), |
374 self.assertIsInstance(self.vreg['views'].select('image', req, rset=rset), |
375 idownloadable.ImageView) |
375 idownloadable.ImageView) |
376 fileobj = self.add_entity('File', name=u'bim.txt', data=Binary('bim')) |
376 fileobj = self.add_entity('File', name=u'bim.txt', data=Binary('bim')) |
377 # image primary view priority |
377 # image primary view priority |
378 rset, req = self.env.get_rset_and_req('File X WHERE X name "bim.txt"') |
378 rset, req = self.rset_and_req('File X WHERE X name "bim.txt"') |
379 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'image', req, rset=rset) |
379 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'image', req, rset=rset) |
380 |
380 |
381 |
381 |
382 |
382 |
383 def _test_view(self, vid, rql, args): |
383 def _test_view(self, vid, rql, args): |
384 if rql is None: |
384 if rql is None: |
385 rset = None |
385 rset = None |
386 req = self.request() |
386 req = self.request() |
387 else: |
387 else: |
388 rset, req = self.env.get_rset_and_req(rql) |
388 rset, req = self.rset_and_req(rql) |
389 try: |
389 try: |
390 self.vreg['views'].render(vid, req, rset=rset, **args) |
390 self.vreg['views'].render(vid, req, rset=rset, **args) |
391 except: |
391 except: |
392 print vid, rset, args |
392 print vid, rset, args |
393 raise |
393 raise |
436 def tearDown(self): |
436 def tearDown(self): |
437 super(RQLActionTC, self).tearDown() |
437 super(RQLActionTC, self).tearDown() |
438 del self.vreg['actions']['testaction'] |
438 del self.vreg['actions']['testaction'] |
439 |
439 |
440 def test(self): |
440 def test(self): |
441 rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWEType"') |
441 rset, req = self.rset_and_req('CWEType X WHERE X name "CWEType"') |
442 self.assertDictEqual(self.pactions(req, rset), |
442 self.assertDictEqual(self.pactions(req, rset), |
443 {'useractions': USERACTIONS, |
443 {'useractions': USERACTIONS, |
444 'siteactions': SITEACTIONS, |
444 'siteactions': SITEACTIONS, |
445 'mainactions': [('edit', actions.ModifyAction)], |
445 'mainactions': [('edit', actions.ModifyAction)], |
446 'moreactions': [('managepermission', actions.ManagePermissionsAction), |
446 'moreactions': [('managepermission', actions.ManagePermissionsAction), |
447 ('delete', actions.DeleteAction), |
447 ('delete', actions.DeleteAction), |
448 ('copy', actions.CopyAction), |
448 ('copy', actions.CopyAction), |
449 ('testaction', CWETypeRQLAction), |
449 ('testaction', CWETypeRQLAction), |
450 ], |
450 ], |
451 }) |
451 }) |
452 rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWRType"') |
452 rset, req = self.rset_and_req('CWEType X WHERE X name "CWRType"') |
453 self.assertDictEqual(self.pactions(req, rset), |
453 self.assertDictEqual(self.pactions(req, rset), |
454 {'useractions': USERACTIONS, |
454 {'useractions': USERACTIONS, |
455 'siteactions': SITEACTIONS, |
455 'siteactions': SITEACTIONS, |
456 'mainactions': [('edit', actions.ModifyAction)], |
456 'mainactions': [('edit', actions.ModifyAction)], |
457 'moreactions': [('managepermission', actions.ManagePermissionsAction), |
457 'moreactions': [('managepermission', actions.ManagePermissionsAction), |