web/test/unittest_viewselector.py
branchtls-sprint
changeset 1398 5fe84a5f7035
parent 793 06b05dce4831
child 1570 5c40d9fb4e8d
equal deleted inserted replaced
1397:6cbc7bc8ea6d 1398:5fe84a5f7035
    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         
    81         
    82     def test_possible_views_one_egroup(self):
    82     def test_possible_views_one_egroup(self):
    83         rset, req = self.env.get_rset_and_req('EGroup X WHERE X name "managers"')
    83         rset, req = self.env.get_rset_and_req('CWGroup X WHERE X name "managers"')
    84         self.assertListEqual(self.pviews(req, rset),
    84         self.assertListEqual(self.pviews(req, rset),
    85                              [('csvexport', baseviews.CSVRsetView),
    85                              [('csvexport', baseviews.CSVRsetView),
    86                               ('ecsvexport', baseviews.CSVEntityView),
    86                               ('ecsvexport', baseviews.CSVEntityView),
    87                               ('editable-table', tableview.EditableTableView),
    87                               ('editable-table', tableview.EditableTableView),
    88                               ('filetree', treeview.FileTreeView),
    88                               ('filetree', treeview.FileTreeView),
   100                               ('xbel', xbel.XbelView),
   100                               ('xbel', xbel.XbelView),
   101                               ('xml', baseviews.XmlView),
   101                               ('xml', baseviews.XmlView),
   102                               ])
   102                               ])
   103             
   103             
   104     def test_possible_views_multiple_egroups(self):
   104     def test_possible_views_multiple_egroups(self):
   105         rset, req = self.env.get_rset_and_req('EGroup X')
   105         rset, req = self.env.get_rset_and_req('CWGroup X')
   106         self.assertListEqual(self.pviews(req, rset),
   106         self.assertListEqual(self.pviews(req, rset),
   107                              [('csvexport', baseviews.CSVRsetView),
   107                              [('csvexport', baseviews.CSVRsetView),
   108                               ('ecsvexport', baseviews.CSVEntityView),
   108                               ('ecsvexport', baseviews.CSVEntityView),
   109                               ('editable-table', tableview.EditableTableView),
   109                               ('editable-table', tableview.EditableTableView),
   110                               ('filetree', treeview.FileTreeView),
   110                               ('filetree', treeview.FileTreeView),
   153                               ('rsetxml', baseviews.XMLRsetView),
   153                               ('rsetxml', baseviews.XMLRsetView),
   154                               ('table', tableview.TableView),
   154                               ('table', tableview.TableView),
   155                               ])
   155                               ])
   156 
   156 
   157     def test_possible_views_multiple_eusers(self):
   157     def test_possible_views_multiple_eusers(self):
   158         rset, req = self.env.get_rset_and_req('EUser X')
   158         rset, req = self.env.get_rset_and_req('CWUser X')
   159         self.assertListEqual(self.pviews(req, rset),
   159         self.assertListEqual(self.pviews(req, rset),
   160                              [('csvexport', baseviews.CSVRsetView),
   160                              [('csvexport', baseviews.CSVRsetView),
   161                               ('ecsvexport', baseviews.CSVEntityView),
   161                               ('ecsvexport', baseviews.CSVEntityView),
   162                               ('editable-table', tableview.EditableTableView),
   162                               ('editable-table', tableview.EditableTableView),
   163                               ('filetree', treeview.FileTreeView),
   163                               ('filetree', treeview.FileTreeView),
   164                               ('foaf', euser.FoafView),
   164                               ('foaf', euser.FoafView),
   165                               ('list', baseviews.ListView),
   165                               ('list', baseviews.ListView),
   166                               ('oneline', baseviews.OneLineView),
   166                               ('oneline', baseviews.OneLineView),
   167                               ('owlabox', owl.OWLABOXView),
   167                               ('owlabox', owl.OWLABOXView),
   168                               ('primary', euser.EUserPrimaryView),
   168                               ('primary', euser.CWUserPrimaryView),
   169                               ('rsetxml', baseviews.XMLRsetView),
   169                               ('rsetxml', baseviews.XMLRsetView),
   170                               ('rss', baseviews.RssView),
   170                               ('rss', baseviews.RssView),
   171                               ('secondary', baseviews.SecondaryView),
   171                               ('secondary', baseviews.SecondaryView),
   172                               ('security', management.SecurityManagementView),
   172                               ('security', management.SecurityManagementView),
   173                               ('table', tableview.TableView),
   173                               ('table', tableview.TableView),
   174                               ('text', baseviews.TextView),
   174                               ('text', baseviews.TextView),
   175                               ('treeview', treeview.TreeView),
   175                               ('treeview', treeview.TreeView),
   176                               ('vcard', vcard.VCardEUserView),
   176                               ('vcard', vcard.VCardCWUserView),
   177                               ('xbel', xbel.XbelView),
   177                               ('xbel', xbel.XbelView),
   178                               ('xml', baseviews.XmlView),
   178                               ('xml', baseviews.XmlView),
   179                               ])
   179                               ])
   180         
   180         
   181     def test_possible_actions_none_rset(self):
   181     def test_possible_actions_none_rset(self):
   191                              {'useractions': USERACTIONS,
   191                              {'useractions': USERACTIONS,
   192                               'siteactions': SITEACTIONS,
   192                               'siteactions': SITEACTIONS,
   193                               })
   193                               })
   194         
   194         
   195     def test_possible_actions_same_type_entities(self):
   195     def test_possible_actions_same_type_entities(self):
   196         rset, req = self.env.get_rset_and_req('EGroup X')
   196         rset, req = self.env.get_rset_and_req('CWGroup X')
   197         self.assertDictEqual(self.pactions(req, rset),
   197         self.assertDictEqual(self.pactions(req, rset),
   198                              {'useractions': USERACTIONS,
   198                              {'useractions': USERACTIONS,
   199                               'siteactions': SITEACTIONS,
   199                               'siteactions': SITEACTIONS,
   200                               'mainactions': [('muledit', actions.MultipleEditAction)],
   200                               'mainactions': [('muledit', actions.MultipleEditAction)],
   201                               'moreactions': [('delete', actions.DeleteAction),
   201                               'moreactions': [('delete', actions.DeleteAction),
   215         self.assertDictEqual(self.pactions(req, rset),
   215         self.assertDictEqual(self.pactions(req, rset),
   216                              {'useractions': USERACTIONS,
   216                              {'useractions': USERACTIONS,
   217                               'siteactions': SITEACTIONS})
   217                               'siteactions': SITEACTIONS})
   218         
   218         
   219     def test_possible_actions_eetype_euser_entity(self):
   219     def test_possible_actions_eetype_euser_entity(self):
   220         rset, req = self.env.get_rset_and_req('EEType X WHERE X name "EUser"')
   220         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWUser"')
   221         self.assertDictEqual(self.pactions(req, rset),
   221         self.assertDictEqual(self.pactions(req, rset),
   222                              {'useractions': USERACTIONS,
   222                              {'useractions': USERACTIONS,
   223                               'siteactions': SITEACTIONS,
   223                               'siteactions': SITEACTIONS,
   224                               'mainactions': [('edit', actions.ModifyAction),
   224                               'mainactions': [('edit', actions.ModifyAction),
   225                                               ('workflow', schemaentities.ViewWorkflowAction),],
   225                                               ('workflow', schemaentities.ViewWorkflowAction),],
   231 
   231 
   232     def test_select_creation_form(self):
   232     def test_select_creation_form(self):
   233         rset = None
   233         rset = None
   234         req = self.request()
   234         req = self.request()
   235         # creation form
   235         # creation form
   236         req.form['etype'] = 'EGroup'
   236         req.form['etype'] = 'CWGroup'
   237         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   237         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   238                                   baseforms.CreationForm)
   238                                   baseforms.CreationForm)
   239         del req.form['etype']
   239         del req.form['etype']
   240         # custom creation form
   240         # custom creation form
   241         class EUserCreationForm(baseforms.CreationForm):
   241         class CWUserCreationForm(baseforms.CreationForm):
   242             __select__ = specified_etype_implements('EUser')
   242             __select__ = specified_etype_implements('CWUser')
   243         self.vreg.register_vobject_class(EUserCreationForm)
   243         self.vreg.register_vobject_class(CWUserCreationForm)
   244         req.form['etype'] = 'EUser'
   244         req.form['etype'] = 'CWUser'
   245         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   245         self.assertIsInstance(self.vreg.select_view('creation', req, rset),
   246                               EUserCreationForm)
   246                               CWUserCreationForm)
   247             
   247             
   248     def test_select_view(self):
   248     def test_select_view(self):
   249         # no entity
   249         # no entity
   250         rset = None
   250         rset = None
   251         req = self.request()
   251         req = self.request()
   265         self.failUnlessRaises(NoSelectableObject,
   265         self.failUnlessRaises(NoSelectableObject,
   266                               self.vreg.select_view, 'primary', req, rset)
   266                               self.vreg.select_view, 'primary', req, rset)
   267         self.failUnlessRaises(NoSelectableObject,
   267         self.failUnlessRaises(NoSelectableObject,
   268                              self.vreg.select_view, 'table', req, rset)
   268                              self.vreg.select_view, 'table', req, rset)
   269         # one entity
   269         # one entity
   270         rset, req = self.env.get_rset_and_req('EGroup X WHERE X name "managers"')
   270         rset, req = self.env.get_rset_and_req('CWGroup X WHERE X name "managers"')
   271         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   271         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   272                              baseviews.PrimaryView)
   272                              baseviews.PrimaryView)
   273         self.assertIsInstance(self.vreg.select_view('list', req, rset),
   273         self.assertIsInstance(self.vreg.select_view('list', req, rset),
   274                              baseviews.ListView)
   274                              baseviews.ListView)
   275         self.assertIsInstance(self.vreg.select_view('edition', req, rset),
   275         self.assertIsInstance(self.vreg.select_view('edition', req, rset),
   279         self.failUnlessRaises(NoSelectableObject,
   279         self.failUnlessRaises(NoSelectableObject,
   280                               self.vreg.select_view, 'creation', req, rset)
   280                               self.vreg.select_view, 'creation', req, rset)
   281         self.failUnlessRaises(NoSelectableObject,
   281         self.failUnlessRaises(NoSelectableObject,
   282                               self.vreg.select_view, 'index', req, rset)
   282                               self.vreg.select_view, 'index', req, rset)
   283         # list of entities of the same type
   283         # list of entities of the same type
   284         rset, req = self.env.get_rset_and_req('EGroup X')
   284         rset, req = self.env.get_rset_and_req('CWGroup X')
   285         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   285         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   286                              baseviews.PrimaryView)
   286                              baseviews.PrimaryView)
   287         self.assertIsInstance(self.vreg.select_view('list', req, rset),
   287         self.assertIsInstance(self.vreg.select_view('list', req, rset),
   288                              baseviews.ListView)
   288                              baseviews.ListView)
   289         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   289         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   315         self.failUnlessRaises(NoSelectableObject,
   315         self.failUnlessRaises(NoSelectableObject,
   316                              self.vreg.select_view, 'list', req, rset)
   316                              self.vreg.select_view, 'list', req, rset)
   317         self.failUnlessRaises(NoSelectableObject,
   317         self.failUnlessRaises(NoSelectableObject,
   318                              self.vreg.select_view, 'edition', req, rset)
   318                              self.vreg.select_view, 'edition', req, rset)
   319         # mixed query
   319         # mixed query
   320         rset, req = self.env.get_rset_and_req('Any U,G WHERE U is EUser, G is EGroup')
   320         rset, req = self.env.get_rset_and_req('Any U,G WHERE U is CWUser, G is CWGroup')
   321         self.failUnlessRaises(NoSelectableObject,
   321         self.failUnlessRaises(NoSelectableObject,
   322                               self.vreg.select_view, 'edition', req, rset)
   322                               self.vreg.select_view, 'edition', req, rset)
   323         self.failUnlessRaises(NoSelectableObject,
   323         self.failUnlessRaises(NoSelectableObject,
   324                               self.vreg.select_view, 'creation', req, rset)
   324                               self.vreg.select_view, 'creation', req, rset)
   325         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   325         self.assertIsInstance(self.vreg.select_view('table', req, rset),
   326                               tableview.TableView)
   326                               tableview.TableView)
   327         # euser primary view priority
   327         # euser primary view priority
   328         rset, req = self.env.get_rset_and_req('EUser X WHERE X login "admin"')
   328         rset, req = self.env.get_rset_and_req('CWUser X WHERE X login "admin"')
   329         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   329         self.assertIsInstance(self.vreg.select_view('primary', req, rset),
   330                              euser.EUserPrimaryView)
   330                              euser.CWUserPrimaryView)
   331         self.assertIsInstance(self.vreg.select_view('text', req, rset),
   331         self.assertIsInstance(self.vreg.select_view('text', req, rset),
   332                              baseviews.TextView)
   332                              baseviews.TextView)
   333 
   333 
   334     def test_interface_selector(self):
   334     def test_interface_selector(self):
   335         image = self.add_entity('Image', name=u'bim.png', data=Binary('bim'))
   335         image = self.add_entity('Image', name=u'bim.png', data=Binary('bim'))
   365             raise
   365             raise
   366 
   366 
   367     def test_form(self):
   367     def test_form(self):
   368         for vid, rql, args in (
   368         for vid, rql, args in (
   369             #('creation', 'Any X WHERE X eid 999999', {}),
   369             #('creation', 'Any X WHERE X eid 999999', {}),
   370             ('edition', 'EGroup X WHERE X name "managers"', {}),
   370             ('edition', 'CWGroup X WHERE X name "managers"', {}),
   371             ('copy', 'EGroup X WHERE X name "managers"', {}),
   371             ('copy', 'CWGroup X WHERE X name "managers"', {}),
   372             ('muledit', 'EGroup X', {}),
   372             ('muledit', 'CWGroup X', {}),
   373             #('muledit', 'Any X', {}),
   373             #('muledit', 'Any X', {}),
   374             ):
   374             ):
   375             self._test_view(vid, rql, args)
   375             self._test_view(vid, rql, args)
   376 
   376 
   377 
   377 
   403         try:
   403         try:
   404             # login as a simple user
   404             # login as a simple user
   405             self.create_user('john')
   405             self.create_user('john')
   406             self.login('john')
   406             self.login('john')
   407             # it should not be possible to use SomeAction not owned objects
   407             # it should not be possible to use SomeAction not owned objects
   408             rset, req = self.env.get_rset_and_req('Any G WHERE G is EGroup, G name "managers"')
   408             rset, req = self.env.get_rset_and_req('Any G WHERE G is CWGroup, G name "managers"')
   409             self.failIf('foo' in self.pactions(req, rset))
   409             self.failIf('foo' in self.pactions(req, rset))
   410             # insert a new card, and check that we can use SomeAction on our object
   410             # insert a new card, and check that we can use SomeAction on our object
   411             self.execute('INSERT Card C: C title "zoubidou"')
   411             self.execute('INSERT Card C: C title "zoubidou"')
   412             self.commit()
   412             self.commit()
   413             rset, req = self.env.get_rset_and_req('Card C WHERE C title "zoubidou"')
   413             rset, req = self.env.get_rset_and_req('Card C WHERE C title "zoubidou"')
   418             self.failIf('foo' in self.pactions(req, rset))
   418             self.failIf('foo' in self.pactions(req, rset))
   419         finally:
   419         finally:
   420             del self.vreg[SomeAction.__registry__][SomeAction.id]
   420             del self.vreg[SomeAction.__registry__][SomeAction.id]
   421 
   421 
   422 
   422 
   423 class EETypeRQLAction(Action):
   423 class CWETypeRQLAction(Action):
   424     id = 'testaction'
   424     id = 'testaction'
   425     __select__ = implements('EEType') & rql_condition('X name "EEType"')
   425     __select__ = implements('CWEType') & rql_condition('X name "CWEType"')
   426     title = 'bla'
   426     title = 'bla'
   427 
   427 
   428 class RQLActionTC(ViewSelectorTC):
   428 class RQLActionTC(ViewSelectorTC):
   429             
   429             
   430     def setUp(self):
   430     def setUp(self):
   431         super(RQLActionTC, self).setUp()
   431         super(RQLActionTC, self).setUp()
   432         self.vreg.register_vobject_class(EETypeRQLAction)
   432         self.vreg.register_vobject_class(CWETypeRQLAction)
   433         
   433         
   434     def tearDown(self):
   434     def tearDown(self):
   435         super(RQLActionTC, self).tearDown()        
   435         super(RQLActionTC, self).tearDown()        
   436         del self.vreg._registries['actions']['testaction']
   436         del self.vreg._registries['actions']['testaction']
   437         
   437         
   438     def test(self):
   438     def test(self):
   439         rset, req = self.env.get_rset_and_req('EEType X WHERE X name "EEType"')
   439         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWEType"')
   440         self.assertDictEqual(self.pactions(req, rset),
   440         self.assertDictEqual(self.pactions(req, rset),
   441                              {'useractions': USERACTIONS,
   441                              {'useractions': USERACTIONS,
   442                               'siteactions': SITEACTIONS,
   442                               'siteactions': SITEACTIONS,
   443                               'mainactions': [('edit', actions.ModifyAction)],
   443                               'mainactions': [('edit', actions.ModifyAction)],
   444                               'moreactions': [('delete', actions.DeleteAction),
   444                               'moreactions': [('delete', actions.DeleteAction),
   445                                               ('copy', actions.CopyAction),
   445                                               ('copy', actions.CopyAction),
   446                                               ('testaction', EETypeRQLAction),
   446                                               ('testaction', CWETypeRQLAction),
   447                                               ('managepermission', actions.ManagePermissionsAction)],
   447                                               ('managepermission', actions.ManagePermissionsAction)],
   448                               })
   448                               })
   449         rset, req = self.env.get_rset_and_req('EEType X WHERE X name "ERType"')
   449         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWRType"')
   450         self.assertDictEqual(self.pactions(req, rset),
   450         self.assertDictEqual(self.pactions(req, rset),
   451                              {'useractions': USERACTIONS,
   451                              {'useractions': USERACTIONS,
   452                               'siteactions': SITEACTIONS,
   452                               'siteactions': SITEACTIONS,
   453                               'mainactions': [('edit', actions.ModifyAction)],
   453                               'mainactions': [('edit', actions.ModifyAction)],
   454                               'moreactions': [('delete', actions.DeleteAction),
   454                               'moreactions': [('delete', actions.DeleteAction),