web/test/unittest_viewselector.py
brancholdstable
changeset 8462 a14b6562082b
parent 7994 af3fb709c061
child 8190 2a3c1b787688
equal deleted inserted replaced
8231:1bb43e31032d 8462:a14b6562082b
    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,
    88 
    88 
    89     def test_possible_views_none_rset(self):
    89     def test_possible_views_none_rset(self):
    90         req = self.request()
    90         req = self.request()
    91         self.assertListEqual(self.pviews(req, None),
    91         self.assertListEqual(self.pviews(req, None),
    92                              [('changelog', wdoc.ChangeLogView),
    92                              [('changelog', wdoc.ChangeLogView),
    93                               ('cw.source-management', cwsources.CWSourceManagementView),
    93                               ('cw.sources-management', cwsources.CWSourcesManagementView),
    94                               ('cw.user-management', cwuser.CWUserManagementView),
    94                               ('cw.users-and-groups-management', cwuser.UsersAndGroupsManagementView),
    95                               ('gc', debug.GCView),
    95                               ('gc', debug.GCView),
    96                               ('index', startup.IndexView),
    96                               ('index', startup.IndexView),
    97                               ('info', debug.ProcessInformationView),
    97                               ('info', debug.ProcessInformationView),
    98                               ('manage', startup.ManageView),
    98                               ('manage', startup.ManageView),
    99                               ('owl', owl.OWLView),
    99                               ('owl', owl.OWLView),
   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                               ])
   161         assert self.vreg['views']['propertiesform']
   163         assert self.vreg['views']['propertiesform']
   162         req1 = self.request()
   164         req1 = self.request()
   163         req2 = self.request()
   165         req2 = self.request()
   164         rset1 = req1.execute('CWUser X WHERE X login "admin"')
   166         rset1 = req1.execute('CWUser X WHERE X login "admin"')
   165         rset2 = req2.execute('CWUser X WHERE X login "anon"')
   167         rset2 = req2.execute('CWUser X WHERE X login "anon"')
   166         self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=None))
   168         self.assertTrue(self.vreg['views'].select('propertiesform', req1, rset=None))
   167         self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=rset1))
   169         self.assertTrue(self.vreg['views'].select('propertiesform', req1, rset=rset1))
   168         self.failUnless(self.vreg['views'].select('propertiesform', req2, rset=rset2))
   170         self.assertTrue(self.vreg['views'].select('propertiesform', req2, rset=rset2))
   169 
   171 
   170     def test_propertiesform_anon(self):
   172     def test_propertiesform_anon(self):
   171         self.login('anon')
   173         self.login('anon')
   172         req1 = self.request()
   174         req1 = self.request()
   173         req2 = self.request()
   175         req2 = self.request()
   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()