web/test/unittest_views_navigation.py
author sylvain.thenault@logilab.fr
Fri, 03 Apr 2009 19:04:00 +0200
changeset 1228 91ae10ffb611
parent 47 54087a269bdd
child 1398 5fe84a5f7035
permissions -rw-r--r--
* refactor ms planner (renaming, reorganization) * fix a bug originaly demonstrated by test_version_depends_on * enhance crossed relation support, though there is still some bug renaming. some tests were actually wrong. Buggy tests (wether they fail or not, they are byggy) marked by XXXFIXME)

"""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()