web/test/unittest_viewselector.py
changeset 2650 18aec79ec3a3
parent 2643 9976f511003b
child 2657 de974465d381
equal deleted inserted replaced
2649:5d4a943695d1 2650:18aec79ec3a3
    33         self.add_entity('Bookmark', title=u"un signet !", path=u"view?vid=index")
    33         self.add_entity('Bookmark', title=u"un signet !", path=u"view?vid=index")
    34         self.add_entity('EmailAddress', address=u"devel@logilab.fr", alias=u'devel')
    34         self.add_entity('EmailAddress', address=u"devel@logilab.fr", alias=u'devel')
    35         self.add_entity('Tag', name=u'x')
    35         self.add_entity('Tag', name=u'x')
    36 
    36 
    37     def pactions(self, req, rset):
    37     def pactions(self, req, rset):
    38         resdict = self.vreg.possible_actions(req, rset)
    38         resdict = self.vreg['actions'].possible_actions(req, rset)
    39         for cat, actions in resdict.items():
    39         for cat, actions in resdict.items():
    40             resdict[cat] = [(a.id, a.__class__) for a in actions]
    40             resdict[cat] = [(a.id, a.__class__) for a in actions]
    41         return resdict
    41         return resdict
    42 
    42 
    43 
    43 
   130 
   130 
   131     def test_propertiesform_admin(self):
   131     def test_propertiesform_admin(self):
   132         assert self.vreg['views']['propertiesform']
   132         assert self.vreg['views']['propertiesform']
   133         rset1, req1 = self.env.get_rset_and_req('CWUser X WHERE X login "admin"')
   133         rset1, req1 = self.env.get_rset_and_req('CWUser X WHERE X login "admin"')
   134         rset2, req2 = self.env.get_rset_and_req('CWUser X WHERE X login "anon"')
   134         rset2, req2 = self.env.get_rset_and_req('CWUser X WHERE X login "anon"')
   135         self.failUnless(self.vreg.select('views', 'propertiesform', req1, rset=None))
   135         self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=None))
   136         self.failUnless(self.vreg.select('views', 'propertiesform', req1, rset=rset1))
   136         self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=rset1))
   137         self.failUnless(self.vreg.select('views', 'propertiesform', req2, rset=rset2))
   137         self.failUnless(self.vreg['views'].select('propertiesform', req2, rset=rset2))
   138 
   138 
   139     def test_propertiesform_anon(self):
   139     def test_propertiesform_anon(self):
   140         self.login('anon')
   140         self.login('anon')
   141         rset1, req1 = self.env.get_rset_and_req('CWUser X WHERE X login "admin"')
   141         rset1, req1 = self.env.get_rset_and_req('CWUser X WHERE X login "admin"')
   142         rset2, req2 = self.env.get_rset_and_req('CWUser X WHERE X login "anon"')
   142         rset2, req2 = self.env.get_rset_and_req('CWUser X WHERE X login "anon"')
   143         self.assertRaises(NoSelectableObject, self.vreg.select, 'views', 'propertiesform', req1, rset=None)
   143         self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=None)
   144         self.assertRaises(NoSelectableObject, self.vreg.select, 'views', 'propertiesform', req1, rset=rset1)
   144         self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset1)
   145         self.assertRaises(NoSelectableObject, self.vreg.select, 'views', 'propertiesform', req1, rset=rset2)
   145         self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset2)
   146 
   146 
   147     def test_propertiesform_jdoe(self):
   147     def test_propertiesform_jdoe(self):
   148         self.create_user('jdoe')
   148         self.create_user('jdoe')
   149         self.login('jdoe')
   149         self.login('jdoe')
   150         rset1, req1 = self.env.get_rset_and_req('CWUser X WHERE X login "admin"')
   150         rset1, req1 = self.env.get_rset_and_req('CWUser X WHERE X login "admin"')
   151         rset2, req2 = self.env.get_rset_and_req('CWUser X WHERE X login "jdoe"')
   151         rset2, req2 = self.env.get_rset_and_req('CWUser X WHERE X login "jdoe"')
   152         self.failUnless(self.vreg.select('views', 'propertiesform', req1, rset=None))
   152         self.failUnless(self.vreg['views'].select('propertiesform', req1, rset=None))
   153         self.assertRaises(NoSelectableObject, self.vreg.select, 'views', 'propertiesform', req1, rset=rset1)
   153         self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'propertiesform', req1, rset=rset1)
   154         self.failUnless(self.vreg.select('views', 'propertiesform', req2, rset=rset2))
   154         self.failUnless(self.vreg['views'].select('propertiesform', req2, rset=rset2))
   155 
   155 
   156     def test_possible_views_multiple_different_types(self):
   156     def test_possible_views_multiple_different_types(self):
   157         rset, req = self.env.get_rset_and_req('Any X')
   157         rset, req = self.env.get_rset_and_req('Any X')
   158         self.assertListEqual(self.pviews(req, rset),
   158         self.assertListEqual(self.pviews(req, rset),
   159                              [('csvexport', csvexport.CSVRsetView),
   159                              [('csvexport', csvexport.CSVRsetView),
   265     def test_select_creation_form(self):
   265     def test_select_creation_form(self):
   266         rset = None
   266         rset = None
   267         req = self.request()
   267         req = self.request()
   268         # creation form
   268         # creation form
   269         req.form['etype'] = 'CWGroup'
   269         req.form['etype'] = 'CWGroup'
   270         self.assertIsInstance(self.vreg.select('views', 'creation', req, rset=rset),
   270         self.assertIsInstance(self.vreg['views'].select('creation', req, rset=rset),
   271                               editforms.CreationFormView)
   271                               editforms.CreationFormView)
   272         del req.form['etype']
   272         del req.form['etype']
   273         # custom creation form
   273         # custom creation form
   274         class CWUserCreationForm(editforms.CreationFormView):
   274         class CWUserCreationForm(editforms.CreationFormView):
   275             __select__ = specified_etype_implements('CWUser')
   275             __select__ = specified_etype_implements('CWUser')
   276         self.vreg._loadedmods[__name__] = {}
   276         self.vreg._loadedmods[__name__] = {}
   277         self.vreg.register_vobject_class(CWUserCreationForm)
   277         self.vreg.register_vobject_class(CWUserCreationForm)
   278         req.form['etype'] = 'CWUser'
   278         req.form['etype'] = 'CWUser'
   279         self.assertIsInstance(self.vreg.select('views', 'creation', req, rset=rset),
   279         self.assertIsInstance(self.vreg['views'].select('creation', req, rset=rset),
   280                               CWUserCreationForm)
   280                               CWUserCreationForm)
   281 
   281 
   282     def test_select_view(self):
   282     def test_select_view(self):
   283         # no entity
   283         # no entity
   284         rset = None
   284         rset = None
   285         req = self.request()
   285         req = self.request()
   286         self.assertIsInstance(self.vreg.select('views', 'index', req, rset=rset),
   286         self.assertIsInstance(self.vreg['views'].select('index', req, rset=rset),
   287                              startup.IndexView)
   287                              startup.IndexView)
   288         self.failUnlessRaises(NoSelectableObject,
   288         self.failUnlessRaises(NoSelectableObject,
   289                              self.vreg.select, 'views', 'primary', req, rset=rset)
   289                              self.vreg['views'].select, 'primary', req, rset=rset)
   290         self.failUnlessRaises(NoSelectableObject,
   290         self.failUnlessRaises(NoSelectableObject,
   291                              self.vreg.select, 'views', 'table', req, rset=rset)
   291                              self.vreg['views'].select, 'table', req, rset=rset)
   292 
   292 
   293         # no entity
   293         # no entity
   294         rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999')
   294         rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999')
   295         self.failUnlessRaises(NoSelectableObject,
   295         self.failUnlessRaises(NoSelectableObject,
   296                               self.vreg.select, 'views', 'index', req, rset=rset)
   296                               self.vreg['views'].select, 'index', req, rset=rset)
   297         self.failUnlessRaises(NoSelectableObject,
   297         self.failUnlessRaises(NoSelectableObject,
   298                               self.vreg.select, 'views', 'creation', req, rset=rset)
   298                               self.vreg['views'].select, 'creation', req, rset=rset)
   299         self.failUnlessRaises(NoSelectableObject,
   299         self.failUnlessRaises(NoSelectableObject,
   300                               self.vreg.select, 'views', 'primary', req, rset=rset)
   300                               self.vreg['views'].select, 'primary', req, rset=rset)
   301         self.failUnlessRaises(NoSelectableObject,
   301         self.failUnlessRaises(NoSelectableObject,
   302                              self.vreg.select, 'views', 'table', req, rset=rset)
   302                              self.vreg['views'].select, 'table', req, rset=rset)
   303         # one entity
   303         # one entity
   304         rset, req = self.env.get_rset_and_req('CWGroup X WHERE X name "managers"')
   304         rset, req = self.env.get_rset_and_req('CWGroup X WHERE X name "managers"')
   305         self.assertIsInstance(self.vreg.select('views', 'primary', req, rset=rset),
   305         self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset),
   306                              primary.PrimaryView)
   306                              primary.PrimaryView)
   307         self.assertIsInstance(self.vreg.select('views', 'list', req, rset=rset),
   307         self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset),
   308                              baseviews.ListView)
   308                              baseviews.ListView)
   309         self.assertIsInstance(self.vreg.select('views', 'edition', req, rset=rset),
   309         self.assertIsInstance(self.vreg['views'].select('edition', req, rset=rset),
   310                              editforms.EditionFormView)
   310                              editforms.EditionFormView)
   311         self.assertIsInstance(self.vreg.select('views', 'table', req, rset=rset),
   311         self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset),
   312                              tableview.TableView)
   312                              tableview.TableView)
   313         self.failUnlessRaises(NoSelectableObject,
   313         self.failUnlessRaises(NoSelectableObject,
   314                               self.vreg.select, 'views', 'creation', req, rset=rset)
   314                               self.vreg['views'].select, 'creation', req, rset=rset)
   315         self.failUnlessRaises(NoSelectableObject,
   315         self.failUnlessRaises(NoSelectableObject,
   316                               self.vreg.select, 'views', 'index', req, rset=rset)
   316                               self.vreg['views'].select, 'index', req, rset=rset)
   317         # list of entities of the same type
   317         # list of entities of the same type
   318         rset, req = self.env.get_rset_and_req('CWGroup X')
   318         rset, req = self.env.get_rset_and_req('CWGroup X')
   319         self.assertIsInstance(self.vreg.select('views', 'primary', req, rset=rset),
   319         self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset),
   320                              primary.PrimaryView)
   320                              primary.PrimaryView)
   321         self.assertIsInstance(self.vreg.select('views', 'list', req, rset=rset),
   321         self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset),
   322                              baseviews.ListView)
   322                              baseviews.ListView)
   323         self.assertIsInstance(self.vreg.select('views', 'table', req, rset=rset),
   323         self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset),
   324                              tableview.TableView)
   324                              tableview.TableView)
   325         self.failUnlessRaises(NoSelectableObject,
   325         self.failUnlessRaises(NoSelectableObject,
   326                               self.vreg.select, 'views', 'creation', req, rset=rset)
   326                               self.vreg['views'].select, 'creation', req, rset=rset)
   327         # list of entities of different types
   327         # list of entities of different types
   328         rset, req = self.env.get_rset_and_req('Any X')
   328         rset, req = self.env.get_rset_and_req('Any X')
   329         self.assertIsInstance(self.vreg.select('views', 'primary', req, rset=rset),
   329         self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset),
   330                                   primary.PrimaryView)
   330                                   primary.PrimaryView)
   331         self.assertIsInstance(self.vreg.select('views', 'list', req, rset=rset),
   331         self.assertIsInstance(self.vreg['views'].select('list', req, rset=rset),
   332                                   baseviews.ListView)
   332                                   baseviews.ListView)
   333         self.assertIsInstance(self.vreg.select('views', 'table', req, rset=rset),
   333         self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset),
   334                                   tableview.TableView)
   334                                   tableview.TableView)
   335         self.failUnlessRaises(NoSelectableObject,
   335         self.failUnlessRaises(NoSelectableObject,
   336                              self.vreg.select, 'views', 'creation', req, rset=rset)
   336                              self.vreg['views'].select, 'creation', req, rset=rset)
   337         self.failUnlessRaises(NoSelectableObject,
   337         self.failUnlessRaises(NoSelectableObject,
   338                               self.vreg.select, 'views', 'index', req, rset=rset)
   338                               self.vreg['views'].select, 'index', req, rset=rset)
   339         # whatever
   339         # whatever
   340         rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N')
   340         rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N')
   341         self.assertIsInstance(self.vreg.select('views', 'table', req, rset=rset),
   341         self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset),
   342                                   tableview.TableView)
   342                                   tableview.TableView)
   343         self.failUnlessRaises(NoSelectableObject,
   343         self.failUnlessRaises(NoSelectableObject,
   344                               self.vreg.select, 'views', 'index', req, rset=rset)
   344                               self.vreg['views'].select, 'index', req, rset=rset)
   345         self.failUnlessRaises(NoSelectableObject,
   345         self.failUnlessRaises(NoSelectableObject,
   346                               self.vreg.select, 'views', 'creation', req, rset=rset)
   346                               self.vreg['views'].select, 'creation', req, rset=rset)
   347         self.failUnlessRaises(NoSelectableObject,
   347         self.failUnlessRaises(NoSelectableObject,
   348                              self.vreg.select, 'views', 'primary', req, rset=rset)
   348                              self.vreg['views'].select, 'primary', req, rset=rset)
   349         self.failUnlessRaises(NoSelectableObject,
   349         self.failUnlessRaises(NoSelectableObject,
   350                              self.vreg.select, 'views', 'list', req, rset=rset)
   350                              self.vreg['views'].select, 'list', req, rset=rset)
   351         self.failUnlessRaises(NoSelectableObject,
   351         self.failUnlessRaises(NoSelectableObject,
   352                              self.vreg.select, 'views', 'edition', req, rset=rset)
   352                              self.vreg['views'].select, 'edition', req, rset=rset)
   353         # mixed query
   353         # mixed query
   354         rset, req = self.env.get_rset_and_req('Any U,G WHERE U is CWUser, G is CWGroup')
   354         rset, req = self.env.get_rset_and_req('Any U,G WHERE U is CWUser, G is CWGroup')
   355         self.failUnlessRaises(NoSelectableObject,
   355         self.failUnlessRaises(NoSelectableObject,
   356                               self.vreg.select, 'views', 'edition', req, rset=rset)
   356                               self.vreg['views'].select, 'edition', req, rset=rset)
   357         self.failUnlessRaises(NoSelectableObject,
   357         self.failUnlessRaises(NoSelectableObject,
   358                               self.vreg.select, 'views', 'creation', req, rset=rset)
   358                               self.vreg['views'].select, 'creation', req, rset=rset)
   359         self.assertIsInstance(self.vreg.select('views', 'table', req, rset=rset),
   359         self.assertIsInstance(self.vreg['views'].select('table', req, rset=rset),
   360                               tableview.TableView)
   360                               tableview.TableView)
   361 
   361 
   362     def test_interface_selector(self):
   362     def test_interface_selector(self):
   363         image = self.add_entity('Image', name=u'bim.png', data=Binary('bim'))
   363         image = self.add_entity('Image', name=u'bim.png', data=Binary('bim'))
   364         # image primary view priority
   364         # image primary view priority
   365         rset, req = self.env.get_rset_and_req('Image X WHERE X name "bim.png"')
   365         rset, req = self.env.get_rset_and_req('Image X WHERE X name "bim.png"')
   366         self.assertIsInstance(self.vreg.select('views', 'primary', req, rset=rset),
   366         self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset),
   367                               idownloadable.IDownloadablePrimaryView)
   367                               idownloadable.IDownloadablePrimaryView)
   368 
   368 
   369 
   369 
   370     def test_score_entity_selector(self):
   370     def test_score_entity_selector(self):
   371         image = self.add_entity('Image', name=u'bim.png', data=Binary('bim'))
   371         image = self.add_entity('Image', name=u'bim.png', data=Binary('bim'))
   372         # image primary view priority
   372         # image primary view priority
   373         rset, req = self.env.get_rset_and_req('Image X WHERE X name "bim.png"')
   373         rset, req = self.env.get_rset_and_req('Image X WHERE X name "bim.png"')
   374         self.assertIsInstance(self.vreg.select('views', 'image', req, rset=rset),
   374         self.assertIsInstance(self.vreg['views'].select('image', req, rset=rset),
   375                               idownloadable.ImageView)
   375                               idownloadable.ImageView)
   376         fileobj = self.add_entity('File', name=u'bim.txt', data=Binary('bim'))
   376         fileobj = self.add_entity('File', name=u'bim.txt', data=Binary('bim'))
   377         # image primary view priority
   377         # image primary view priority
   378         rset, req = self.env.get_rset_and_req('File X WHERE X name "bim.txt"')
   378         rset, req = self.env.get_rset_and_req('File X WHERE X name "bim.txt"')
   379         self.assertRaises(NoSelectableObject, self.vreg.select, 'views', 'image', req, rset=rset)
   379         self.assertRaises(NoSelectableObject, self.vreg['views'].select, 'image', req, rset=rset)
   380 
   380 
   381 
   381 
   382 
   382 
   383     def _test_view(self, vid, rql, args):
   383     def _test_view(self, vid, rql, args):
   384         if rql is None:
   384         if rql is None:
   385             rset = None
   385             rset = None
   386             req = self.request()
   386             req = self.request()
   387         else:
   387         else:
   388             rset, req = self.env.get_rset_and_req(rql)
   388             rset, req = self.env.get_rset_and_req(rql)
   389         try:
   389         try:
   390             self.vreg.render(vid, req, rset=rset, **args)
   390             self.vreg['views'].render(vid, req, rset=rset, **args)
   391         except:
   391         except:
   392             print vid, rset, args
   392             print vid, rset, args
   393             raise
   393             raise
   394 
   394 
   395     def test_form(self):
   395     def test_form(self):
   433         self.vreg._loadedmods[__name__] = {}
   433         self.vreg._loadedmods[__name__] = {}
   434         self.vreg.register_vobject_class(CWETypeRQLAction)
   434         self.vreg.register_vobject_class(CWETypeRQLAction)
   435 
   435 
   436     def tearDown(self):
   436     def tearDown(self):
   437         super(RQLActionTC, self).tearDown()
   437         super(RQLActionTC, self).tearDown()
   438         del self.vreg._registries['actions']['testaction']
   438         del self.vreg['actions']['testaction']
   439 
   439 
   440     def test(self):
   440     def test(self):
   441         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWEType"')
   441         rset, req = self.env.get_rset_and_req('CWEType X WHERE X name "CWEType"')
   442         self.assertDictEqual(self.pactions(req, rset),
   442         self.assertDictEqual(self.pactions(req, rset),
   443                              {'useractions': USERACTIONS,
   443                              {'useractions': USERACTIONS,