web/test/unittest_views_navigation.py
author sylvain.thenault@logilab.fr
Thu, 29 Jan 2009 16:26:33 +0100
changeset 519 06390418cd9a
parent 47 54087a269bdd
child 1398 5fe84a5f7035
permissions -rw-r--r--
pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)

"""cubicweb.web.views.navigation unit tests"""

from logilab.common.testlib import unittest_main, mock_object
from cubicweb.devtools.apptest import EnvBasedTC

from cubicweb.web.views.navigation import PageNavigation, SortedNavigation
from cubicweb.web.views.ibreadcrumbs import BreadCrumbEntityVComponent

BreadCrumbEntityVComponent.visible = True

class NavigationTC(EnvBasedTC):
    
    def test_navigation_selection(self):
        rset = self.execute('Any X,N WHERE X name N')
        req = self.request()
        navcomp = self.vreg.select_component('navigation', req, rset)
        self.assertIsInstance(navcomp, PageNavigation)
        req.set_search_state('W:X:Y:Z')
        navcomp = self.vreg.select_component('navigation', req, rset)
        self.assertIsInstance(navcomp, PageNavigation)
        req.set_search_state('normal')
        rset = self.execute('Any X,N ORDERBY N WHERE X name N')
        navcomp = self.vreg.select_component('navigation', req, rset)
        self.assertIsInstance(navcomp, SortedNavigation)
        req.set_search_state('W:X:Y:Z')
        navcomp = self.vreg.select_component('navigation', req, rset)
        self.assertIsInstance(navcomp, SortedNavigation)
        req.set_search_state('normal')
        rset = self.execute('Any X,N LIMIT 10 WHERE X name N')
        navcomp = self.vreg.select_component('navigation', req, rset)
        self.assertEquals(navcomp, None)
        req.set_search_state('W:X:Y:Z')
        navcomp = self.vreg.select_component('navigation', req, rset)
        self.assertEquals(navcomp, None)
        req.set_search_state('normal')
        rset = self.execute('Any N, COUNT(RDEF) GROUPBY N ORDERBY N WHERE RDEF relation_type RT, RT name N')
        navcomp = self.vreg.select_component('navigation', req, rset)
        self.assertIsInstance(navcomp, SortedNavigation)
        req.set_search_state('W:X:Y:Z')
        navcomp = self.vreg.select_component('navigation', req, rset)
        self.assertIsInstance(navcomp, SortedNavigation)
        
        
    def test_sorted_navigation(self):
        rset = self.execute('Any X,N ORDERBY N WHERE X name N')
        req = self.request()
        req.set_search_state('W:X:Y:Z')
        navcomp = self.vreg.select_component('navigation', rset.req, rset)
        html = navcomp.dispatch()
        rset = self.execute('Any RDEF ORDERBY RT WHERE RDEF relation_type RT')
        navcomp = self.vreg.select_component('navigation', req, rset)
        html = navcomp.dispatch()
        rset = self.execute('Any RDEF ORDERBY RDEF WHERE RDEF relation_type RT')
        navcomp = self.vreg.select_component('navigation', req, rset)
        html = navcomp.dispatch()
        rset = self.execute('EFRDef RDEF ORDERBY RDEF')
        navcomp = self.vreg.select_component('navigation', req, rset)
        html = navcomp.dispatch()
        rset = self.execute('Any RDEF ORDERBY N WHERE RDEF relation_type RT, RT name N')
        navcomp = self.vreg.select_component('navigation', req, rset)
        html = navcomp.dispatch()
        rset = self.execute('Any N, COUNT(RDEF) GROUPBY N ORDERBY N WHERE RDEF relation_type RT, RT name N')
        navcomp = self.vreg.select_component('navigation', rset.req, rset)
        html = navcomp.dispatch()



class ContentNavigationTC(EnvBasedTC):

    def test_component_context(self):
        view = mock_object(is_primary=lambda x: True)
        rset = self.execute('EUser X LIMIT 1')
        req = self.request()
        objs = self.vreg.possible_vobjects('contentnavigation', req, rset,
                                           view=view, context='navtop')
        # breadcrumbs should be in headers by default
        clsids = set(obj.id for obj in objs)
        self.failUnless('breadcrumbs' in clsids)
        objs = self.vreg.possible_vobjects('contentnavigation', req, rset,
                                          view=view, context='navbottom')
        # breadcrumbs should _NOT_ be in footers by default
        clsids = set(obj.id for obj in objs)
        self.failIf('breadcrumbs' in clsids)
        self.execute('INSERT EProperty P: P pkey "contentnavigation.breadcrumbs.context", '
                     'P value "navbottom"')
        # breadcrumbs should now be in footers
        req.cnx.commit()
        objs = self.vreg.possible_vobjects('contentnavigation', req, rset,
                                          view=view, context='navbottom')
        
        clsids = [obj.id for obj in objs]
        self.failUnless('breadcrumbs' in clsids)
        objs = self.vreg.possible_vobjects('contentnavigation', req, rset,
                                          view=view, context='navtop')
        
        clsids = [obj.id for obj in objs]
        self.failIf('breadcrumbs' in clsids)
        

if __name__ == '__main__':
    unittest_main()