web/test/unittest_viewselector.py
branchtls-sprint
changeset 793 06b05dce4831
parent 783 45d816326626
child 1398 5fe84a5f7035
equal deleted inserted replaced
792:685f020f855f 793:06b05dce4831
     2 """XXX rename, split, reorganize this
     2 """XXX rename, split, reorganize this
     3 """
     3 """
     4 from __future__ import with_statement
     4 from __future__ import with_statement
     5 
     5 
     6 from logilab.common.testlib import unittest_main
     6 from logilab.common.testlib import unittest_main
       
     7 
     7 from cubicweb.devtools.apptest import EnvBasedTC
     8 from cubicweb.devtools.apptest import EnvBasedTC
     8 
       
     9 
       
    10 from cubicweb import CW_SOFTWARE_ROOT as BASE, Binary
     9 from cubicweb import CW_SOFTWARE_ROOT as BASE, Binary
    11 from cubicweb.selectors import match_user_groups, implements, rql_condition, traced_selection
    10 from cubicweb.selectors import (match_user_groups, implements,
    12 
    11                                 specified_etype_implements, rql_condition,
    13 from cubicweb.web._exceptions import NoSelectableObject
    12                                 traced_selection)
       
    13 from cubicweb.web import NoSelectableObject
    14 from cubicweb.web.action import Action
    14 from cubicweb.web.action import Action
    15 from cubicweb.web.views import (baseviews, tableview, baseforms, calendar, 
    15 from cubicweb.web.views import (baseviews, tableview, baseforms, calendar, 
    16                                 management, embedding, actions, startup, 
    16                                 management, embedding, actions, startup, 
    17                                 euser, schemaentities, xbel, vcard, owl,
    17                                 euser, schemaentities, xbel, vcard, owl,
    18                                 treeview, idownloadable, wdoc, debug, eproperties)
    18                                 treeview, idownloadable, wdoc, debug, eproperties)
    59             print 'no more', [v for v in expected if not v in content.keys()]
    59             print 'no more', [v for v in expected if not v in content.keys()]
    60             print 'missing', [v for v in content.keys() if not v in expected]
    60             print 'missing', [v for v in content.keys() if not v in expected]
    61             raise
    61             raise
    62         
    62         
    63     
    63     
    64     def test_possible_views(self):
    64     def test_possible_views_none_rset(self):
    65         # no entity
       
    66         req = self.request()
    65         req = self.request()
    67         self.assertListEqual(self.pviews(req, None),
    66         self.assertListEqual(self.pviews(req, None),
    68                              [('changelog', wdoc.ChangeLogView),
    67                              [('changelog', wdoc.ChangeLogView),
    69                               ('debug', debug.DebugView),
    68                               ('debug', debug.DebugView),
    70                               ('epropertiesform', eproperties.EPropertiesForm),
    69                               ('epropertiesform', eproperties.EPropertiesForm),
    72                               ('info', management.ProcessInformationView),
    71                               ('info', management.ProcessInformationView),
    73                               ('manage', startup.ManageView),
    72                               ('manage', startup.ManageView),
    74                               ('owl', owl.OWLView),
    73                               ('owl', owl.OWLView),
    75                               ('schema', startup.SchemaView),
    74                               ('schema', startup.SchemaView),
    76                               ('systemepropertiesform', eproperties.SystemEPropertiesForm)])
    75                               ('systemepropertiesform', eproperties.SystemEPropertiesForm)])
    77         # no entity but etype
    76         
       
    77     def test_possible_views_noresult(self):
    78         rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999')
    78         rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999')
    79         self.assertListEqual(self.pviews(req, rset),
    79         self.assertListEqual(self.pviews(req, rset),
    80                              [])
    80                              [])
    81         # one entity
    81         
       
    82     def test_possible_views_one_egroup(self):
    82         rset, req = self.env.get_rset_and_req('EGroup X WHERE X name "managers"')
    83         rset, req = self.env.get_rset_and_req('EGroup X WHERE X name "managers"')
    83         self.assertListEqual(self.pviews(req, rset),
    84         self.assertListEqual(self.pviews(req, rset),
    84                              [('csvexport', baseviews.CSVRsetView),
    85                              [('csvexport', baseviews.CSVRsetView),
    85                               ('ecsvexport', baseviews.CSVEntityView),
    86                               ('ecsvexport', baseviews.CSVEntityView),
    86                               ('editable-table', tableview.EditableTableView),
    87                               ('editable-table', tableview.EditableTableView),
    97                               ('text', baseviews.TextView),
    98                               ('text', baseviews.TextView),
    98                               ('treeview', treeview.TreeView),
    99                               ('treeview', treeview.TreeView),
    99                               ('xbel', xbel.XbelView),
   100                               ('xbel', xbel.XbelView),
   100                               ('xml', baseviews.XmlView),
   101                               ('xml', baseviews.XmlView),
   101                               ])
   102                               ])
   102         # list of entities of the same type
   103             
       
   104     def test_possible_views_multiple_egroups(self):
   103         rset, req = self.env.get_rset_and_req('EGroup X')
   105         rset, req = self.env.get_rset_and_req('EGroup X')
   104         self.assertListEqual(self.pviews(req, rset),
   106         self.assertListEqual(self.pviews(req, rset),
   105                              [('csvexport', baseviews.CSVRsetView),
   107                              [('csvexport', baseviews.CSVRsetView),
   106                               ('ecsvexport', baseviews.CSVEntityView),
   108                               ('ecsvexport', baseviews.CSVEntityView),
   107                               ('editable-table', tableview.EditableTableView),
   109                               ('editable-table', tableview.EditableTableView),
   118                               ('text', baseviews.TextView),
   120                               ('text', baseviews.TextView),
   119                               ('treeview', treeview.TreeView),
   121                               ('treeview', treeview.TreeView),
   120                               ('xbel', xbel.XbelView),
   122                               ('xbel', xbel.XbelView),
   121                               ('xml', baseviews.XmlView),
   123                               ('xml', baseviews.XmlView),
   122                               ])
   124                               ])
   123         # list of entities of different types
   125         
       
   126     def test_possible_views_multiple_different_types(self):
   124         rset, req = self.env.get_rset_and_req('Any X')
   127         rset, req = self.env.get_rset_and_req('Any X')
   125         self.assertListEqual(self.pviews(req, rset),
   128         self.assertListEqual(self.pviews(req, rset),
   126                              [('csvexport', baseviews.CSVRsetView),
   129                              [('csvexport', baseviews.CSVRsetView),
   127                               ('ecsvexport', baseviews.CSVEntityView),
   130                               ('ecsvexport', baseviews.CSVEntityView),
   128                               ('editable-table', tableview.EditableTableView),
   131                               ('editable-table', tableview.EditableTableView),
   139                               ('text', baseviews.TextView),
   142                               ('text', baseviews.TextView),
   140                               ('treeview', treeview.TreeView),
   143                               ('treeview', treeview.TreeView),
   141                               ('xbel', xbel.XbelView),
   144                               ('xbel', xbel.XbelView),
   142                               ('xml', baseviews.XmlView),
   145                               ('xml', baseviews.XmlView),
   143                               ])
   146                               ])
   144         # whatever
   147         
       
   148     def test_possible_views_any_rset(self):
   145         rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N')
   149         rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N')
   146         self.assertListEqual(self.pviews(req, rset),
   150         self.assertListEqual(self.pviews(req, rset),
   147                              [('csvexport', baseviews.CSVRsetView),
   151                              [('csvexport', baseviews.CSVRsetView),
   148                               ('editable-table', tableview.EditableTableView),
   152                               ('editable-table', tableview.EditableTableView),
   149                               ('rsetxml', baseviews.XMLRsetView),
   153                               ('rsetxml', baseviews.XMLRsetView),
   150                               ('table', tableview.TableView),
   154                               ('table', tableview.TableView),
   151                               ])
   155                               ])
   152         # list of euser entities
   156 
       
   157     def test_possible_views_multiple_eusers(self):
   153         rset, req = self.env.get_rset_and_req('EUser X')
   158         rset, req = self.env.get_rset_and_req('EUser X')
   154         self.assertListEqual(self.pviews(req, rset),
   159         self.assertListEqual(self.pviews(req, rset),
   155                              [('csvexport', baseviews.CSVRsetView),
   160                              [('csvexport', baseviews.CSVRsetView),
   156                               ('ecsvexport', baseviews.CSVEntityView),
   161                               ('ecsvexport', baseviews.CSVEntityView),
   157                               ('editable-table', tableview.EditableTableView),
   162                               ('editable-table', tableview.EditableTableView),
   176     def test_possible_actions_none_rset(self):
   181     def test_possible_actions_none_rset(self):
   177         req = self.request()
   182         req = self.request()
   178         self.assertDictEqual(self.pactions(req, None),
   183         self.assertDictEqual(self.pactions(req, None),
   179                              {'useractions': USERACTIONS,
   184                              {'useractions': USERACTIONS,
   180                               'siteactions': SITEACTIONS,
   185                               'siteactions': SITEACTIONS,
       
   186                               
   181                               })
   187                               })
   182     def test_possible_actions_no_entity(self):
   188     def test_possible_actions_no_entity(self):
   183         rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999')
   189         rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999')
   184         self.assertDictEqual(self.pactions(req, rset),
   190         self.assertDictEqual(self.pactions(req, rset),
   185                              {'useractions': USERACTIONS,
   191                              {'useractions': USERACTIONS,
   186                               'siteactions': SITEACTIONS,
   192                               'siteactions': SITEACTIONS,
   187                               })
   193                               })
       
   194         
   188     def test_possible_actions_same_type_entities(self):
   195     def test_possible_actions_same_type_entities(self):
   189         rset, req = self.env.get_rset_and_req('EGroup X')
   196         rset, req = self.env.get_rset_and_req('EGroup X')
   190         self.assertDictEqual(self.pactions(req, rset),
   197         self.assertDictEqual(self.pactions(req, rset),
   191                              {'useractions': USERACTIONS,
   198                              {'useractions': USERACTIONS,
   192                               'siteactions': SITEACTIONS,
   199                               'siteactions': SITEACTIONS,
   193                               'mainactions': [('muledit', actions.MultipleEditAction)],
   200                               'mainactions': [('muledit', actions.MultipleEditAction)],
   194                               'moreactions': [('delete', actions.DeleteAction),
   201                               'moreactions': [('delete', actions.DeleteAction),
   195                                               ('addentity', actions.AddNewAction)],
   202                                               ('addentity', actions.AddNewAction)],
   196                               })
   203                               })
       
   204         
   197     def test_possible_actions_different_types_entities(self):
   205     def test_possible_actions_different_types_entities(self):
   198         rset, req = self.env.get_rset_and_req('Any X')
   206         rset, req = self.env.get_rset_and_req('Any X')
   199         self.assertDictEqual(self.pactions(req, rset),
   207         self.assertDictEqual(self.pactions(req, rset),
   200                              {'useractions': USERACTIONS,
   208                              {'useractions': USERACTIONS,
   201                               'siteactions': SITEACTIONS,
   209                               'siteactions': SITEACTIONS,
   202                               'moreactions': [('delete', actions.DeleteAction)],
   210                               'moreactions': [('delete', actions.DeleteAction)],
   203                               })
   211                               })
       
   212             
   204     def test_possible_actions_final_entities(self):
   213     def test_possible_actions_final_entities(self):
   205         rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N')
   214         rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N')
   206         self.assertDictEqual(self.pactions(req, rset),
   215         self.assertDictEqual(self.pactions(req, rset),
   207                              {'useractions': USERACTIONS,
   216                              {'useractions': USERACTIONS,
   208                               'siteactions': SITEACTIONS})
   217                               'siteactions': SITEACTIONS})
   213                              {'useractions': USERACTIONS,
   222                              {'useractions': USERACTIONS,
   214                               'siteactions': SITEACTIONS,
   223                               'siteactions': SITEACTIONS,
   215                               'mainactions': [('edit', actions.ModifyAction),
   224                               'mainactions': [('edit', actions.ModifyAction),
   216                                               ('workflow', schemaentities.ViewWorkflowAction),],
   225                                               ('workflow', schemaentities.ViewWorkflowAction),],
   217                               'moreactions': [('delete', actions.DeleteAction),
   226                               'moreactions': [('delete', actions.DeleteAction),
   218                                               ('copy', actions.CopyAction)],
   227                                               ('copy', actions.CopyAction),
       
   228                                               ('managepermission', actions.ManagePermissionsAction)],
   219                               })
   229                               })
   220         
   230         
   221 
   231 
   222     def test_select_creation_form(self):
   232     def test_select_creation_form(self):
   223         rset = None
   233         rset = None
   227         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   237         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   228                                   baseforms.CreationForm)
   238                                   baseforms.CreationForm)
   229         del req.form['etype']
   239         del req.form['etype']
   230         # custom creation form
   240         # custom creation form
   231         class EUserCreationForm(baseforms.CreationForm):
   241         class EUserCreationForm(baseforms.CreationForm):
   232             __select__ = implements('EUSer')
   242             __select__ = specified_etype_implements('EUser')
   233         self.vreg.register_vobject_class(EUserCreationForm)
   243         self.vreg.register_vobject_class(EUserCreationForm)
   234         req.form['etype'] = 'EUser'
   244         req.form['etype'] = 'EUser'
   235         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   245         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   236                               EUserCreationForm)
   246                               EUserCreationForm)
   237             
   247