29 from cubicweb.web.action import Action |
29 from cubicweb.web.action import Action |
30 from cubicweb.web.views import ( |
30 from cubicweb.web.views import ( |
31 primary, baseviews, tableview, editforms, calendar, management, embedding, |
31 primary, baseviews, tableview, editforms, calendar, management, embedding, |
32 actions, startup, cwuser, schema, xbel, vcard, owl, treeview, idownloadable, |
32 actions, startup, cwuser, schema, xbel, vcard, owl, treeview, idownloadable, |
33 wdoc, debug, cwuser, cwproperties, cwsources, workflow, xmlrss, rdf, |
33 wdoc, debug, cwuser, cwproperties, cwsources, workflow, xmlrss, rdf, |
34 csvexport) |
34 csvexport, json) |
35 |
35 |
36 from cubes.folder import views as folderviews |
36 from cubes.folder import views as folderviews |
37 |
37 |
38 USERACTIONS = [actions.UserPreferencesAction, |
38 USERACTIONS = [actions.UserPreferencesAction, |
39 actions.UserInfoAction, |
39 actions.UserInfoAction, |
115 req = self.request() |
115 req = self.request() |
116 rset = req.execute('CWGroup X WHERE X name "managers"') |
116 rset = req.execute('CWGroup X WHERE X name "managers"') |
117 self.assertListEqual(self.pviews(req, rset), |
117 self.assertListEqual(self.pviews(req, rset), |
118 [('csvexport', csvexport.CSVRsetView), |
118 [('csvexport', csvexport.CSVRsetView), |
119 ('ecsvexport', csvexport.CSVEntityView), |
119 ('ecsvexport', csvexport.CSVEntityView), |
120 ('editable-table', tableview.EditableTableView), |
120 ('ejsonexport', json.JsonEntityView), |
121 ('filetree', treeview.FileTreeView), |
121 ('filetree', treeview.FileTreeView), |
|
122 ('jsonexport', json.JsonRsetView), |
122 ('list', baseviews.ListView), |
123 ('list', baseviews.ListView), |
123 ('oneline', baseviews.OneLineView), |
124 ('oneline', baseviews.OneLineView), |
124 ('owlabox', owl.OWLABOXView), |
125 ('owlabox', owl.OWLABOXView), |
125 ('primary', cwuser.CWGroupPrimaryView)] + RDFVIEWS + [ |
126 ('primary', cwuser.CWGroupPrimaryView)] + RDFVIEWS + [ |
126 ('rsetxml', xmlrss.XMLRsetView), |
127 ('rsetxml', xmlrss.XMLRsetView), |
127 ('rss', xmlrss.RSSView), |
128 ('rss', xmlrss.RSSView), |
128 ('sameetypelist', baseviews.SameETypeListView), |
129 ('sameetypelist', baseviews.SameETypeListView), |
129 ('security', management.SecurityManagementView), |
130 ('security', management.SecurityManagementView), |
130 ('table', tableview.TableView), |
131 ('table', tableview.RsetTableView), |
131 ('text', baseviews.TextView), |
132 ('text', baseviews.TextView), |
132 ('treeview', treeview.TreeView), |
133 ('treeview', treeview.TreeView), |
133 ('xbel', xbel.XbelView), |
134 ('xbel', xbel.XbelView), |
134 ('xml', xmlrss.XMLView), |
135 ('xml', xmlrss.XMLView), |
135 ]) |
136 ]) |
138 req = self.request() |
139 req = self.request() |
139 rset = req.execute('CWGroup X') |
140 rset = req.execute('CWGroup X') |
140 self.assertListEqual(self.pviews(req, rset), |
141 self.assertListEqual(self.pviews(req, rset), |
141 [('csvexport', csvexport.CSVRsetView), |
142 [('csvexport', csvexport.CSVRsetView), |
142 ('ecsvexport', csvexport.CSVEntityView), |
143 ('ecsvexport', csvexport.CSVEntityView), |
143 ('editable-table', tableview.EditableTableView), |
144 ('ejsonexport', json.JsonEntityView), |
144 ('filetree', treeview.FileTreeView), |
145 ('filetree', treeview.FileTreeView), |
|
146 ('jsonexport', json.JsonRsetView), |
145 ('list', baseviews.ListView), |
147 ('list', baseviews.ListView), |
146 ('oneline', baseviews.OneLineView), |
148 ('oneline', baseviews.OneLineView), |
147 ('owlabox', owl.OWLABOXView), |
149 ('owlabox', owl.OWLABOXView), |
148 ('primary', cwuser.CWGroupPrimaryView)] + RDFVIEWS + [ |
150 ('primary', cwuser.CWGroupPrimaryView)] + RDFVIEWS + [ |
149 ('rsetxml', xmlrss.XMLRsetView), |
151 ('rsetxml', xmlrss.XMLRsetView), |
150 ('rss', xmlrss.RSSView), |
152 ('rss', xmlrss.RSSView), |
151 ('sameetypelist', baseviews.SameETypeListView), |
153 ('sameetypelist', baseviews.SameETypeListView), |
152 ('security', management.SecurityManagementView), |
154 ('security', management.SecurityManagementView), |
153 ('table', tableview.TableView), |
155 ('table', tableview.RsetTableView), |
154 ('text', baseviews.TextView), |
156 ('text', baseviews.TextView), |
155 ('treeview', treeview.TreeView), |
157 ('treeview', treeview.TreeView), |
156 ('xbel', xbel.XbelView), |
158 ('xbel', xbel.XbelView), |
157 ('xml', xmlrss.XMLView), |
159 ('xml', xmlrss.XMLView), |
158 ]) |
160 ]) |
182 self.login('jdoe') |
184 self.login('jdoe') |
183 req1 = self.request() |
185 req1 = self.request() |
184 req2 = self.request() |
186 req2 = self.request() |
185 rset1 = req1.execute('CWUser X WHERE X login "admin"') |
187 rset1 = req1.execute('CWUser X WHERE X login "admin"') |
186 rset2 = req2.execute('CWUser X WHERE X login "jdoe"') |
188 rset2 = req2.execute('CWUser X WHERE X login "jdoe"') |
187 self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=None)) |
189 self.assertTrue(self.vreg['views'].select('propertiesform', req1, rset=None)) |
188 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset1) |
190 self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset1) |
189 self.failUnless(self.vreg['views'].select('propertiesform', req2, rset=rset2)) |
191 self.assertTrue(self.vreg['views'].select('propertiesform', req2, rset=rset2)) |
190 |
192 |
191 def test_possible_views_multiple_different_types(self): |
193 def test_possible_views_multiple_different_types(self): |
192 req = self.request() |
194 req = self.request() |
193 rset = req.execute('Any X') |
195 rset = req.execute('Any X') |
194 self.assertListEqual(self.pviews(req, rset), |
196 self.assertListEqual(self.pviews(req, rset), |
195 [('csvexport', csvexport.CSVRsetView), |
197 [('csvexport', csvexport.CSVRsetView), |
196 ('ecsvexport', csvexport.CSVEntityView), |
198 ('ecsvexport', csvexport.CSVEntityView), |
197 ('editable-table', tableview.EditableTableView), |
199 ('ejsonexport', json.JsonEntityView), |
198 ('filetree', treeview.FileTreeView), |
200 ('filetree', treeview.FileTreeView), |
|
201 ('jsonexport', json.JsonRsetView), |
199 ('list', baseviews.ListView), |
202 ('list', baseviews.ListView), |
200 ('oneline', baseviews.OneLineView), |
203 ('oneline', baseviews.OneLineView), |
201 ('owlabox', owl.OWLABOXView), |
204 ('owlabox', owl.OWLABOXView), |
202 ('primary', primary.PrimaryView),] + RDFVIEWS + [ |
205 ('primary', primary.PrimaryView),] + RDFVIEWS + [ |
203 ('rsetxml', xmlrss.XMLRsetView), |
206 ('rsetxml', xmlrss.XMLRsetView), |
204 ('rss', xmlrss.RSSView), |
207 ('rss', xmlrss.RSSView), |
205 ('security', management.SecurityManagementView), |
208 ('security', management.SecurityManagementView), |
206 ('table', tableview.TableView), |
209 ('table', tableview.RsetTableView), |
207 ('text', baseviews.TextView), |
210 ('text', baseviews.TextView), |
208 ('treeview', treeview.TreeView), |
211 ('treeview', treeview.TreeView), |
209 ('xbel', xbel.XbelView), |
212 ('xbel', xbel.XbelView), |
210 ('xml', xmlrss.XMLView), |
213 ('xml', xmlrss.XMLView), |
211 ]) |
214 ]) |
213 def test_possible_views_any_rset(self): |
216 def test_possible_views_any_rset(self): |
214 req = self.request() |
217 req = self.request() |
215 rset = req.execute('Any N, X WHERE X in_group Y, Y name N') |
218 rset = req.execute('Any N, X WHERE X in_group Y, Y name N') |
216 self.assertListEqual(self.pviews(req, rset), |
219 self.assertListEqual(self.pviews(req, rset), |
217 [('csvexport', csvexport.CSVRsetView), |
220 [('csvexport', csvexport.CSVRsetView), |
218 ('editable-table', tableview.EditableTableView), |
221 ('jsonexport', json.JsonRsetView), |
219 ('rsetxml', xmlrss.XMLRsetView), |
222 ('rsetxml', xmlrss.XMLRsetView), |
220 ('table', tableview.TableView), |
223 ('table', tableview.RsetTableView), |
221 ]) |
224 ]) |
222 |
225 |
223 def test_possible_views_multiple_eusers(self): |
226 def test_possible_views_multiple_eusers(self): |
224 req = self.request() |
227 req = self.request() |
225 rset = req.execute('CWUser X') |
228 rset = req.execute('CWUser X') |
226 self.assertListEqual(self.pviews(req, rset), |
229 self.assertListEqual(self.pviews(req, rset), |
227 [('csvexport', csvexport.CSVRsetView), |
230 [('csvexport', csvexport.CSVRsetView), |
228 ('cw.user-table', cwuser.CWUserTable), |
|
229 ('ecsvexport', csvexport.CSVEntityView), |
231 ('ecsvexport', csvexport.CSVEntityView), |
230 ('editable-table', tableview.EditableTableView), |
232 ('ejsonexport', json.JsonEntityView), |
231 ('filetree', treeview.FileTreeView), |
233 ('filetree', treeview.FileTreeView), |
232 ('foaf', cwuser.FoafView), |
234 ('foaf', cwuser.FoafView), |
|
235 ('jsonexport', json.JsonRsetView), |
233 ('list', baseviews.ListView), |
236 ('list', baseviews.ListView), |
234 ('oneline', baseviews.OneLineView), |
237 ('oneline', baseviews.OneLineView), |
235 ('owlabox', owl.OWLABOXView), |
238 ('owlabox', owl.OWLABOXView), |
236 ('primary', primary.PrimaryView)] + RDFVIEWS + [ |
239 ('primary', primary.PrimaryView)] + RDFVIEWS + [ |
237 ('rsetxml', xmlrss.XMLRsetView), |
240 ('rsetxml', xmlrss.XMLRsetView), |
238 ('rss', xmlrss.RSSView), |
241 ('rss', xmlrss.RSSView), |
239 ('sameetypelist', baseviews.SameETypeListView), |
242 ('sameetypelist', baseviews.SameETypeListView), |
240 ('security', management.SecurityManagementView), |
243 ('security', management.SecurityManagementView), |
241 ('table', tableview.TableView), |
244 ('table', tableview.RsetTableView), |
242 ('text', baseviews.TextView), |
245 ('text', baseviews.TextView), |
243 ('treeview', treeview.TreeView), |
246 ('treeview', treeview.TreeView), |
244 ('vcard', vcard.VCardCWUserView), |
247 ('vcard', vcard.VCardCWUserView), |
245 ('xbel', xbel.XbelView), |
248 ('xbel', xbel.XbelView), |
246 ('xml', xmlrss.XMLView), |
249 ('xml', xmlrss.XMLView), |
338 # no entity |
341 # no entity |
339 rset = None |
342 rset = None |
340 req = self.request() |
343 req = self.request() |
341 self.assertIsInstance(self.vreg['views'].select('index', req, rset=rset), |
344 self.assertIsInstance(self.vreg['views'].select('index', req, rset=rset), |
342 startup.IndexView) |
345 startup.IndexView) |
343 self.failUnlessRaises(NoSelectableObject, |
346 self.assertRaises(NoSelectableObject, |
344 self.vreg['views'].select, 'primary', req, rset=rset) |
347 self.vreg['views'].select, 'primary', req, rset=rset) |
345 self.failUnlessRaises(NoSelectableObject, |
348 self.assertRaises(NoSelectableObject, |
346 self.vreg['views'].select, 'table', req, rset=rset) |
349 self.vreg['views'].select, 'table', req, rset=rset) |
347 |
350 |
348 # no entity |
351 # no entity |
349 req = self.request() |
352 req = self.request() |
350 rset = req.execute('Any X WHERE X eid 999999') |
353 rset = req.execute('Any X WHERE X eid 999999') |
351 self.failUnlessRaises(NoSelectableObject, |
354 self.assertRaises(NoSelectableObject, |
352 self.vreg['views'].select, 'index', req, rset=rset) |
355 self.vreg['views'].select, 'index', req, rset=rset) |
353 self.failUnlessRaises(NoSelectableObject, |
356 self.assertRaises(NoSelectableObject, |
354 self.vreg['views'].select, 'creation', req, rset=rset) |
357 self.vreg['views'].select, 'creation', req, rset=rset) |
355 self.failUnlessRaises(NoSelectableObject, |
358 self.assertRaises(NoSelectableObject, |
356 self.vreg['views'].select, 'primary', req, rset=rset) |
359 self.vreg['views'].select, 'primary', req, rset=rset) |
357 self.failUnlessRaises(NoSelectableObject, |
360 self.assertRaises(NoSelectableObject, |
358 self.vreg['views'].select, 'table', req, rset=rset) |
361 self.vreg['views'].select, 'table', req, rset=rset) |
359 # one entity |
362 # one entity |
360 req = self.request() |
363 req = self.request() |
361 rset = req.execute('CWGroup X WHERE X name "managers"') |
364 rset = req.execute('CWGroup X WHERE X name "managers"') |
362 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
365 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
364 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
367 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
365 baseviews.ListView) |
368 baseviews.ListView) |
366 self.assertIsInstance(self.vreg['views'].select('edition', req, rset=rset), |
369 self.assertIsInstance(self.vreg['views'].select('edition', req, rset=rset), |
367 editforms.EditionFormView) |
370 editforms.EditionFormView) |
368 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
371 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
369 tableview.TableView) |
372 tableview.RsetTableView) |
370 self.failUnlessRaises(NoSelectableObject, |
373 self.assertRaises(NoSelectableObject, |
371 self.vreg['views'].select, 'creation', req, rset=rset) |
374 self.vreg['views'].select, 'creation', req, rset=rset) |
372 self.failUnlessRaises(NoSelectableObject, |
375 self.assertRaises(NoSelectableObject, |
373 self.vreg['views'].select, 'index', req, rset=rset) |
376 self.vreg['views'].select, 'index', req, rset=rset) |
374 # list of entities of the same type |
377 # list of entities of the same type |
375 req = self.request() |
378 req = self.request() |
376 rset = req.execute('CWGroup X') |
379 rset = req.execute('CWGroup X') |
377 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
380 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
378 primary.PrimaryView) |
381 primary.PrimaryView) |
379 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
382 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
380 baseviews.ListView) |
383 baseviews.ListView) |
381 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
384 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
382 tableview.TableView) |
385 tableview.RsetTableView) |
383 self.failUnlessRaises(NoSelectableObject, |
386 self.assertRaises(NoSelectableObject, |
384 self.vreg['views'].select, 'creation', req, rset=rset) |
387 self.vreg['views'].select, 'creation', req, rset=rset) |
385 # list of entities of different types |
388 # list of entities of different types |
386 req = self.request() |
389 req = self.request() |
387 rset = req.execute('Any X') |
390 rset = req.execute('Any X') |
388 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
391 self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset), |
389 primary.PrimaryView) |
392 primary.PrimaryView) |
390 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
393 self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset), |
391 baseviews.ListView) |
394 baseviews.ListView) |
392 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
395 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
393 tableview.TableView) |
396 tableview.RsetTableView) |
394 self.failUnlessRaises(NoSelectableObject, |
397 self.assertRaises(NoSelectableObject, |
395 self.vreg['views'].select, 'creation', req, rset=rset) |
398 self.vreg['views'].select, 'creation', req, rset=rset) |
396 self.failUnlessRaises(NoSelectableObject, |
399 self.assertRaises(NoSelectableObject, |
397 self.vreg['views'].select, 'index', req, rset=rset) |
400 self.vreg['views'].select, 'index', req, rset=rset) |
398 # whatever |
401 # whatever |
399 req = self.request() |
402 req = self.request() |
400 rset = req.execute('Any N, X WHERE X in_group Y, Y name N') |
403 rset = req.execute('Any N, X WHERE X in_group Y, Y name N') |
401 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
404 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
402 tableview.TableView) |
405 tableview.RsetTableView) |
403 self.failUnlessRaises(NoSelectableObject, |
406 self.assertRaises(NoSelectableObject, |
404 self.vreg['views'].select, 'index', req, rset=rset) |
407 self.vreg['views'].select, 'index', req, rset=rset) |
405 self.failUnlessRaises(NoSelectableObject, |
408 self.assertRaises(NoSelectableObject, |
406 self.vreg['views'].select, 'creation', req, rset=rset) |
409 self.vreg['views'].select, 'creation', req, rset=rset) |
407 self.failUnlessRaises(NoSelectableObject, |
410 self.assertRaises(NoSelectableObject, |
408 self.vreg['views'].select, 'primary', req, rset=rset) |
411 self.vreg['views'].select, 'primary', req, rset=rset) |
409 self.failUnlessRaises(NoSelectableObject, |
412 self.assertRaises(NoSelectableObject, |
410 self.vreg['views'].select, 'list', req, rset=rset) |
413 self.vreg['views'].select, 'list', req, rset=rset) |
411 self.failUnlessRaises(NoSelectableObject, |
414 self.assertRaises(NoSelectableObject, |
412 self.vreg['views'].select, 'edition', req, rset=rset) |
415 self.vreg['views'].select, 'edition', req, rset=rset) |
413 # mixed query |
416 # mixed query |
414 req = self.request() |
417 req = self.request() |
415 rset = req.execute('Any U,G WHERE U is CWUser, G is CWGroup') |
418 rset = req.execute('Any U,G WHERE U is CWUser, G is CWGroup') |
416 self.failUnlessRaises(NoSelectableObject, |
419 self.assertRaises(NoSelectableObject, |
417 self.vreg['views'].select, 'edition', req, rset=rset) |
420 self.vreg['views'].select, 'edition', req, rset=rset) |
418 self.failUnlessRaises(NoSelectableObject, |
421 self.assertRaises(NoSelectableObject, |
419 self.vreg['views'].select, 'creation', req, rset=rset) |
422 self.vreg['views'].select, 'creation', req, rset=rset) |
420 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
423 self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset), |
421 tableview.TableView) |
424 tableview.RsetTableView) |
422 |
425 |
423 def test_interface_selector(self): |
426 def test_interface_selector(self): |
424 image = self.request().create_entity('File', data_name=u'bim.png', data=Binary('bim')) |
427 image = self.request().create_entity('File', data_name=u'bim.png', data=Binary('bim')) |
425 # image primary view priority |
428 # image primary view priority |
426 req = self.request() |
429 req = self.request() |