web/test/unittest_viewselector.py
branchtls-sprint
changeset 1654 57b9fd2462b8
parent 1570 5c40d9fb4e8d
child 1797 c2a80130b06d
equal deleted inserted replaced
1653:8b82227719f0 1654:57b9fd2462b8
    10 from cubicweb.selectors import (match_user_groups, implements,
    10 from cubicweb.selectors import (match_user_groups, implements,
    11                                 specified_etype_implements, rql_condition,
    11                                 specified_etype_implements, rql_condition,
    12                                 traced_selection)
    12                                 traced_selection)
    13 from cubicweb.web import NoSelectableObject
    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 (primary, baseviews, tableview, editforms,
    16                                 management, embedding, actions, startup,
    16                                 calendar, management, embedding, actions,
    17                                 euser, schemaentities, xbel, vcard, owl,
    17                                 startup, cwuser, schema, xbel, vcard, owl,
    18                                 treeview, idownloadable, wdoc, debug, eproperties)
    18                                 treeview, idownloadable, wdoc, debug,
       
    19                                 cwproperties, workflow, xmlrss, csvexport)
    19 
    20 
    20 USERACTIONS = [('myprefs', actions.UserPreferencesAction),
    21 USERACTIONS = [('myprefs', actions.UserPreferencesAction),
    21                ('myinfos', actions.UserInfoAction),
    22                ('myinfos', actions.UserInfoAction),
    22                ('logout', actions.LogoutAction)]
    23                ('logout', actions.LogoutAction)]
    23 SITEACTIONS = [('siteconfig', actions.SiteConfigurationAction),
    24 SITEACTIONS = [('siteconfig', actions.SiteConfigurationAction),
    24                ('manage', actions.ManageAction),
    25                ('manage', actions.ManageAction),
    25                ('schema', actions.ViewSchemaAction)]
    26                ('schema', schema.ViewSchemaAction)]
    26 
    27 
    27 
    28 
    28 class ViewSelectorTC(EnvBasedTC):
    29 class ViewSelectorTC(EnvBasedTC):
    29 
    30 
    30     def setup_database(self):
    31     def setup_database(self):
    63     def test_possible_views_none_rset(self):
    64     def test_possible_views_none_rset(self):
    64         req = self.request()
    65         req = self.request()
    65         self.assertListEqual(self.pviews(req, None),
    66         self.assertListEqual(self.pviews(req, None),
    66                              [('changelog', wdoc.ChangeLogView),
    67                              [('changelog', wdoc.ChangeLogView),
    67                               ('debug', debug.DebugView),
    68                               ('debug', debug.DebugView),
    68                               ('epropertiesform', eproperties.EPropertiesForm),
    69                               ('epropertiesform', cwproperties.EPropertiesForm),
    69                               ('index', startup.IndexView),
    70                               ('index', startup.IndexView),
    70                               ('info', management.ProcessInformationView),
    71                               ('info', management.ProcessInformationView),
    71                               ('manage', startup.ManageView),
    72                               ('manage', startup.ManageView),
    72                               ('owl', owl.OWLView),
    73                               ('owl', owl.OWLView),
    73                               ('schema', startup.SchemaView),
    74                               ('schema', startup.SchemaView),
    74                               ('systemepropertiesform', eproperties.SystemEPropertiesForm)])
    75                               ('systemepropertiesform', cwproperties.SystemEPropertiesForm)])
    75 
    76 
    76     def test_possible_views_noresult(self):
    77     def test_possible_views_noresult(self):
    77         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')
    78         self.assertListEqual(self.pviews(req, rset),
    79         self.assertListEqual(self.pviews(req, rset),
    79                              [])
    80                              [])
    80 
    81 
    81     def test_possible_views_one_egroup(self):
    82     def test_possible_views_one_egroup(self):
    82         rset, req = self.env.get_rset_and_req('CWGroup X WHERE X name "managers"')
    83         rset, req = self.env.get_rset_and_req('CWGroup 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', csvexport.CSVRsetView),
    85                               ('ecsvexport', baseviews.CSVEntityView),
    86                               ('ecsvexport', csvexport.CSVEntityView),
    86                               ('editable-table', tableview.EditableTableView),
    87                               ('editable-table', tableview.EditableTableView),
    87                               ('filetree', treeview.FileTreeView),
    88                               ('filetree', treeview.FileTreeView),
    88                               ('list', baseviews.ListView),
    89                               ('list', baseviews.ListView),
    89                               ('oneline', baseviews.OneLineView),
    90                               ('oneline', baseviews.OneLineView),
    90                               ('owlabox', owl.OWLABOXView),
    91                               ('owlabox', owl.OWLABOXView),
    91                               ('primary', baseviews.PrimaryView),
    92                               ('primary', primary.PrimaryView),
    92                               ('rsetxml', baseviews.XMLRsetView),
    93                               ('rsetxml', xmlrss.XMLRsetView),
    93                               ('rss', baseviews.RssView),
    94                               ('rss', xmlrss.RSSView),
    94                               ('secondary', baseviews.SecondaryView),
    95                               ('secondary', baseviews.SecondaryView),
    95                               ('security', management.SecurityManagementView),
    96                               ('security', management.SecurityManagementView),
    96                               ('table', tableview.TableView),
    97                               ('table', tableview.TableView),
    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', xmlrss.XMLView),
   101                               ])
   102                               ])
   102 
   103 
   103     def test_possible_views_multiple_egroups(self):
   104     def test_possible_views_multiple_egroups(self):
   104         rset, req = self.env.get_rset_and_req('CWGroup X')
   105         rset, req = self.env.get_rset_and_req('CWGroup X')
   105         self.assertListEqual(self.pviews(req, rset),
   106         self.assertListEqual(self.pviews(req, rset),
   106                              [('csvexport', baseviews.CSVRsetView),
   107                              [('csvexport', csvexport.CSVRsetView),
   107                               ('ecsvexport', baseviews.CSVEntityView),
   108                               ('ecsvexport', csvexport.CSVEntityView),
   108                               ('editable-table', tableview.EditableTableView),
   109                               ('editable-table', tableview.EditableTableView),
   109                               ('filetree', treeview.FileTreeView),
   110                               ('filetree', treeview.FileTreeView),
   110                               ('list', baseviews.ListView),
   111                               ('list', baseviews.ListView),
   111                               ('oneline', baseviews.OneLineView),
   112                               ('oneline', baseviews.OneLineView),
   112                               ('owlabox', owl.OWLABOXView),
   113                               ('owlabox', owl.OWLABOXView),
   113                               ('primary', baseviews.PrimaryView),
   114                               ('primary', primary.PrimaryView),
   114                               ('rsetxml', baseviews.XMLRsetView),
   115                               ('rsetxml', xmlrss.XMLRsetView),
   115                               ('rss', baseviews.RssView),
   116                               ('rss', xmlrss.RSSView),
   116                               ('secondary', baseviews.SecondaryView),
   117                               ('secondary', baseviews.SecondaryView),
   117                               ('security', management.SecurityManagementView),
   118                               ('security', management.SecurityManagementView),
   118                               ('table', tableview.TableView),
   119                               ('table', tableview.TableView),
   119                               ('text', baseviews.TextView),
   120                               ('text', baseviews.TextView),
   120                               ('treeview', treeview.TreeView),
   121                               ('treeview', treeview.TreeView),
   121                               ('xbel', xbel.XbelView),
   122                               ('xbel', xbel.XbelView),
   122                               ('xml', baseviews.XmlView),
   123                               ('xml', xmlrss.XMLView),
   123                               ])
   124                               ])
   124 
   125 
   125     def test_possible_views_multiple_different_types(self):
   126     def test_possible_views_multiple_different_types(self):
   126         rset, req = self.env.get_rset_and_req('Any X')
   127         rset, req = self.env.get_rset_and_req('Any X')
   127         self.assertListEqual(self.pviews(req, rset),
   128         self.assertListEqual(self.pviews(req, rset),
   128                              [('csvexport', baseviews.CSVRsetView),
   129                              [('csvexport', csvexport.CSVRsetView),
   129                               ('ecsvexport', baseviews.CSVEntityView),
   130                               ('ecsvexport', csvexport.CSVEntityView),
   130                               ('editable-table', tableview.EditableTableView),
   131                               ('editable-table', tableview.EditableTableView),
   131                               ('filetree', treeview.FileTreeView),
   132                               ('filetree', treeview.FileTreeView),
   132                               ('list', baseviews.ListView),
   133                               ('list', baseviews.ListView),
   133                               ('oneline', baseviews.OneLineView),
   134                               ('oneline', baseviews.OneLineView),
   134                               ('owlabox', owl.OWLABOXView),
   135                               ('owlabox', owl.OWLABOXView),
   135                               ('primary', baseviews.PrimaryView),
   136                               ('primary', primary.PrimaryView),
   136                               ('rsetxml', baseviews.XMLRsetView),
   137                               ('rsetxml', xmlrss.XMLRsetView),
   137                               ('rss', baseviews.RssView),
   138                               ('rss', xmlrss.RSSView),
   138                               ('secondary', baseviews.SecondaryView),
   139                               ('secondary', baseviews.SecondaryView),
   139                               ('security', management.SecurityManagementView),
   140                               ('security', management.SecurityManagementView),
   140                               ('table', tableview.TableView),
   141                               ('table', tableview.TableView),
   141                               ('text', baseviews.TextView),
   142                               ('text', baseviews.TextView),
   142                               ('treeview', treeview.TreeView),
   143                               ('treeview', treeview.TreeView),
   143                               ('xbel', xbel.XbelView),
   144                               ('xbel', xbel.XbelView),
   144                               ('xml', baseviews.XmlView),
   145                               ('xml', xmlrss.XMLView),
   145                               ])
   146                               ])
   146 
   147 
   147     def test_possible_views_any_rset(self):
   148     def test_possible_views_any_rset(self):
   148         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')
   149         self.assertListEqual(self.pviews(req, rset),
   150         self.assertListEqual(self.pviews(req, rset),
   150                              [('csvexport', baseviews.CSVRsetView),
   151                              [('csvexport', csvexport.CSVRsetView),
   151                               ('editable-table', tableview.EditableTableView),
   152                               ('editable-table', tableview.EditableTableView),
   152                               ('rsetxml', baseviews.XMLRsetView),
   153                               ('rsetxml', xmlrss.XMLRsetView),
   153                               ('table', tableview.TableView),
   154                               ('table', tableview.TableView),
   154                               ])
   155                               ])
   155 
   156 
   156     def test_possible_views_multiple_eusers(self):
   157     def test_possible_views_multiple_eusers(self):
   157         rset, req = self.env.get_rset_and_req('CWUser X')
   158         rset, req = self.env.get_rset_and_req('CWUser X')
   158         self.assertListEqual(self.pviews(req, rset),
   159         self.assertListEqual(self.pviews(req, rset),
   159                              [('csvexport', baseviews.CSVRsetView),
   160                              [('csvexport', csvexport.CSVRsetView),
   160                               ('ecsvexport', baseviews.CSVEntityView),
   161                               ('ecsvexport', csvexport.CSVEntityView),
   161                               ('editable-table', tableview.EditableTableView),
   162                               ('editable-table', tableview.EditableTableView),
   162                               ('filetree', treeview.FileTreeView),
   163                               ('filetree', treeview.FileTreeView),
   163                               ('foaf', euser.FoafView),
   164                               ('foaf', cwuser.FoafView),
   164                               ('list', baseviews.ListView),
   165                               ('list', baseviews.ListView),
   165                               ('oneline', baseviews.OneLineView),
   166                               ('oneline', baseviews.OneLineView),
   166                               ('owlabox', owl.OWLABOXView),
   167                               ('owlabox', owl.OWLABOXView),
   167                               ('primary', euser.CWUserPrimaryView),
   168                               ('primary', cwuser.CWUserPrimaryView),
   168                               ('rsetxml', baseviews.XMLRsetView),
   169                               ('rsetxml', xmlrss.XMLRsetView),
   169                               ('rss', baseviews.RssView),
   170                               ('rss', xmlrss.RSSView),
   170                               ('secondary', baseviews.SecondaryView),
   171                               ('secondary', baseviews.SecondaryView),
   171                               ('security', management.SecurityManagementView),
   172                               ('security', management.SecurityManagementView),
   172                               ('table', tableview.TableView),
   173                               ('table', tableview.TableView),
   173                               ('text', baseviews.TextView),
   174                               ('text', baseviews.TextView),
   174                               ('treeview', treeview.TreeView),
   175                               ('treeview', treeview.TreeView),
   175                               ('vcard', vcard.VCardCWUserView),
   176                               ('vcard', vcard.VCardCWUserView),
   176                               ('xbel', xbel.XbelView),
   177                               ('xbel', xbel.XbelView),
   177                               ('xml', baseviews.XmlView),
   178                               ('xml', xmlrss.XMLView),
   178                               ])
   179                               ])
   179 
   180 
   180     def test_possible_actions_none_rset(self):
   181     def test_possible_actions_none_rset(self):
   181         req = self.request()
   182         req = self.request()
   182         self.assertDictEqual(self.pactions(req, None),
   183         self.assertDictEqual(self.pactions(req, None),
   213         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')
   214         self.assertDictEqual(self.pactions(req, rset),
   215         self.assertDictEqual(self.pactions(req, rset),
   215                              {'useractions': USERACTIONS,
   216                              {'useractions': USERACTIONS,
   216                               'siteactions': SITEACTIONS})
   217                               'siteactions': SITEACTIONS})
   217 
   218 
   218     def test_possible_actions_eetype_euser_entity(self):
   219     def test_possible_actions_eetype_cwuser_entity(self):
   219         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWUser"')
   220         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWUser"')
   220         self.assertDictEqual(self.pactions(req, rset),
   221         self.assertDictEqual(self.pactions(req, rset),
   221                              {'useractions': USERACTIONS,
   222                              {'useractions': USERACTIONS,
   222                               'siteactions': SITEACTIONS,
   223                               'siteactions': SITEACTIONS,
   223                               'mainactions': [('edit', actions.ModifyAction),
   224                               'mainactions': [('edit', actions.ModifyAction),
   224                                               ('workflow', schemaentities.ViewWorkflowAction),],
   225                                               ('workflow', workflow.ViewWorkflowAction),],
   225                               'moreactions': [('delete', actions.DeleteAction),
   226                               'moreactions': [('managepermission', actions.ManagePermissionsAction),
       
   227                                               ('delete', actions.DeleteAction),
   226                                               ('copy', actions.CopyAction),
   228                                               ('copy', actions.CopyAction),
   227                                               ('managepermission', actions.ManagePermissionsAction)],
   229                                               ],
   228                               })
   230                               })
   229 
   231 
   230 
   232 
   231     def test_select_creation_form(self):
   233     def test_select_creation_form(self):
   232         rset = None
   234         rset = None
   233         req = self.request()
   235         req = self.request()
   234         # creation form
   236         # creation form
   235         req.form['etype'] = 'CWGroup'
   237         req.form['etype'] = 'CWGroup'
   236         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   238         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   237                                   baseforms.CreationForm)
   239                               editforms.CreationFormView)
   238         del req.form['etype']
   240         del req.form['etype']
   239         # custom creation form
   241         # custom creation form
   240         class CWUserCreationForm(baseforms.CreationForm):
   242         class CWUserCreationForm(editforms.CreationFormView):
   241             __select__ = specified_etype_implements('CWUser')
   243             __select__ = specified_etype_implements('CWUser')
       
   244         self.vreg._loadedmods[__name__] = {}
   242         self.vreg.register_vobject_class(CWUserCreationForm)
   245         self.vreg.register_vobject_class(CWUserCreationForm)
   243         req.form['etype'] = 'CWUser'
   246         req.form['etype'] = 'CWUser'
   244         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   247         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   245                               CWUserCreationForm)
   248                               CWUserCreationForm)
   246 
   249 
   266         self.failUnlessRaises(NoSelectableObject,
   269         self.failUnlessRaises(NoSelectableObject,
   267                              self.vreg.select_view, 'table', req, rset)
   270                              self.vreg.select_view, 'table', req, rset)
   268         # one entity
   271         # one entity
   269         rset, req = self.env.get_rset_and_req('CWGroup X WHERE X name "managers"')
   272         rset, req = self.env.get_rset_and_req('CWGroup X WHERE X name "managers"')
   270         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   273         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   271                              baseviews.PrimaryView)
   274                              primary.PrimaryView)
   272         self.assertIsInstance(self.vreg.select_view('list', req, rset),
   275         self.assertIsInstance(self.vreg.select_view('list', req, rset),
   273                              baseviews.ListView)
   276                              baseviews.ListView)
   274         self.assertIsInstance(self.vreg.select_view('edition', req, rset),
   277         self.assertIsInstance(self.vreg.select_view('edition', req, rset),
   275                              baseforms.EditionForm)
   278                              editforms.EditionFormView)
   276         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   279         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   277                              tableview.TableView)
   280                              tableview.TableView)
   278         self.failUnlessRaises(NoSelectableObject,
   281         self.failUnlessRaises(NoSelectableObject,
   279                               self.vreg.select_view, 'creation', req, rset)
   282                               self.vreg.select_view, 'creation', req, rset)
   280         self.failUnlessRaises(NoSelectableObject,
   283         self.failUnlessRaises(NoSelectableObject,
   281                               self.vreg.select_view, 'index', req, rset)
   284                               self.vreg.select_view, 'index', req, rset)
   282         # list of entities of the same type
   285         # list of entities of the same type
   283         rset, req = self.env.get_rset_and_req('CWGroup X')
   286         rset, req = self.env.get_rset_and_req('CWGroup X')
   284         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   287         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   285                              baseviews.PrimaryView)
   288                              primary.PrimaryView)
   286         self.assertIsInstance(self.vreg.select_view('list', req, rset),
   289         self.assertIsInstance(self.vreg.select_view('list', req, rset),
   287                              baseviews.ListView)
   290                              baseviews.ListView)
   288         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   291         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   289                              tableview.TableView)
   292                              tableview.TableView)
   290         self.failUnlessRaises(NoSelectableObject,
   293         self.failUnlessRaises(NoSelectableObject,
   291                               self.vreg.select_view, 'creation', req, rset)
   294                               self.vreg.select_view, 'creation', req, rset)
   292         # list of entities of different types
   295         # list of entities of different types
   293         rset, req = self.env.get_rset_and_req('Any X')
   296         rset, req = self.env.get_rset_and_req('Any X')
   294         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   297         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   295                                   baseviews.PrimaryView)
   298                                   primary.PrimaryView)
   296         self.assertIsInstance(self.vreg.select_view('list', req, rset),
   299         self.assertIsInstance(self.vreg.select_view('list', req, rset),
   297                                   baseviews.ListView)
   300                                   baseviews.ListView)
   298         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   301         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   299                                   tableview.TableView)
   302                                   tableview.TableView)
   300         self.failUnlessRaises(NoSelectableObject,
   303         self.failUnlessRaises(NoSelectableObject,
   321                               self.vreg.select_view, 'edition', req, rset)
   324                               self.vreg.select_view, 'edition', req, rset)
   322         self.failUnlessRaises(NoSelectableObject,
   325         self.failUnlessRaises(NoSelectableObject,
   323                               self.vreg.select_view, 'creation', req, rset)
   326                               self.vreg.select_view, 'creation', req, rset)
   324         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   327         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   325                               tableview.TableView)
   328                               tableview.TableView)
   326         # euser primary view priority
   329         # cwuser primary view priority
   327         rset, req = self.env.get_rset_and_req('CWUser X WHERE X login "admin"')
   330         rset, req = self.env.get_rset_and_req('CWUser X WHERE X login "admin"')
   328         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   331         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   329                              euser.CWUserPrimaryView)
   332                              cwuser.CWUserPrimaryView)
   330         self.assertIsInstance(self.vreg.select_view('text', req, rset),
   333         self.assertIsInstance(self.vreg.select_view('text', req, rset),
   331                              baseviews.TextView)
   334                              baseviews.TextView)
   332 
   335 
   333     def test_interface_selector(self):
   336     def test_interface_selector(self):
   334         image = self.add_entity('Image', name=u'bim.png', data=Binary('bim'))
   337         image = self.add_entity('Image', name=u'bim.png', data=Binary('bim'))
   399 
   402 
   400 class RQLActionTC(ViewSelectorTC):
   403 class RQLActionTC(ViewSelectorTC):
   401 
   404 
   402     def setUp(self):
   405     def setUp(self):
   403         super(RQLActionTC, self).setUp()
   406         super(RQLActionTC, self).setUp()
       
   407         self.vreg._loadedmods[__name__] = {}
   404         self.vreg.register_vobject_class(CWETypeRQLAction)
   408         self.vreg.register_vobject_class(CWETypeRQLAction)
   405 
   409 
   406     def tearDown(self):
   410     def tearDown(self):
   407         super(RQLActionTC, self).tearDown()
   411         super(RQLActionTC, self).tearDown()
   408         del self.vreg._registries['actions']['testaction']
   412         del self.vreg._registries['actions']['testaction']
   411         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWEType"')
   415         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWEType"')
   412         self.assertDictEqual(self.pactions(req, rset),
   416         self.assertDictEqual(self.pactions(req, rset),
   413                              {'useractions': USERACTIONS,
   417                              {'useractions': USERACTIONS,
   414                               'siteactions': SITEACTIONS,
   418                               'siteactions': SITEACTIONS,
   415                               'mainactions': [('edit', actions.ModifyAction)],
   419                               'mainactions': [('edit', actions.ModifyAction)],
   416                               'moreactions': [('delete', actions.DeleteAction),
   420                               'moreactions': [('managepermission', actions.ManagePermissionsAction),
       
   421                                               ('delete', actions.DeleteAction),
   417                                               ('copy', actions.CopyAction),
   422                                               ('copy', actions.CopyAction),
   418                                               ('testaction', CWETypeRQLAction),
   423                                               ('testaction', CWETypeRQLAction),
   419                                               ('managepermission', actions.ManagePermissionsAction)],
   424                                               ],
   420                               })
   425                               })
   421         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWRType"')
   426         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWRType"')
   422         self.assertDictEqual(self.pactions(req, rset),
   427         self.assertDictEqual(self.pactions(req, rset),
   423                              {'useractions': USERACTIONS,
   428                              {'useractions': USERACTIONS,
   424                               'siteactions': SITEACTIONS,
   429                               'siteactions': SITEACTIONS,
   425                               'mainactions': [('edit', actions.ModifyAction)],
   430                               'mainactions': [('edit', actions.ModifyAction)],
   426                               'moreactions': [('delete', actions.DeleteAction),
   431                               'moreactions': [('managepermission', actions.ManagePermissionsAction),
       
   432                                               ('delete', actions.DeleteAction),
   427                                               ('copy', actions.CopyAction),
   433                                               ('copy', actions.CopyAction),
   428                                               ('managepermission', actions.ManagePermissionsAction)],
   434                                               ],
   429                               })
   435                               })
   430 
   436 
   431 
   437 
   432 
   438 
   433 if __name__ == '__main__':
   439 if __name__ == '__main__':