web/test/unittest_views_navigation.py
changeset 9848 ead7a288e08e
parent 9675 8aabfefc8a81
equal deleted inserted replaced
9847:b23c90721351 9848:ead7a288e08e
     1 # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     1 # copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     3 #
     3 #
     4 # This file is part of CubicWeb.
     4 # This file is part of CubicWeb.
     5 #
     5 #
     6 # CubicWeb is free software: you can redistribute it and/or modify it under the
     6 # CubicWeb is free software: you can redistribute it and/or modify it under the
    15 #
    15 #
    16 # You should have received a copy of the GNU Lesser General Public License along
    16 # You should have received a copy of the GNU Lesser General Public License along
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    18 """cubicweb.web.views.navigation unit tests"""
    18 """cubicweb.web.views.navigation unit tests"""
    19 
    19 
    20 from logilab.common.testlib import unittest_main, mock_object
    20 from logilab.common.testlib import unittest_main
    21 
    21 
    22 from cubicweb.devtools.testlib import CubicWebTC
    22 from cubicweb.devtools.testlib import CubicWebTC
    23 from cubicweb.web.views.navigation import (PageNavigation, SortedNavigation,
    23 from cubicweb.web.views.navigation import (PageNavigation, SortedNavigation,
    24                                            PageNavigationSelect)
    24                                            PageNavigationSelect)
    25 from cubicweb.web.views.ibreadcrumbs import BreadCrumbEntityVComponent
    25 from cubicweb.web.views.ibreadcrumbs import BreadCrumbEntityVComponent
    27 BreadCrumbEntityVComponent.visible = True
    27 BreadCrumbEntityVComponent.visible = True
    28 
    28 
    29 class NavigationTC(CubicWebTC):
    29 class NavigationTC(CubicWebTC):
    30 
    30 
    31     def test_navigation_selection_whatever(self):
    31     def test_navigation_selection_whatever(self):
    32         req = self.request()
    32         with self.admin_access.web_request() as req:
    33         rset = self.execute('Any X,N WHERE X name N')
    33             rset = req.execute('Any X,N WHERE X name N')
    34         navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    34             navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    35         self.assertIsInstance(navcomp, PageNavigation)
    35             self.assertIsInstance(navcomp, PageNavigation)
    36         req.set_search_state('W:X:Y:Z')
    36             req.set_search_state('W:X:Y:Z')
    37         navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    37             navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    38         self.assertIsInstance(navcomp, PageNavigation)
    38             self.assertIsInstance(navcomp, PageNavigation)
    39         req.set_search_state('normal')
    39             req.set_search_state('normal')
    40 
    40 
    41     def test_navigation_selection_ordered(self):
    41     def test_navigation_selection_ordered(self):
    42         req = self.request()
    42         with self.admin_access.web_request() as req:
    43         rset = self.execute('Any X,N ORDERBY N LIMIT 40 WHERE X name N')
    43             rset = req.execute('Any X,N ORDERBY N LIMIT 40 WHERE X name N')
    44         navcomp = self.vreg['components'].select('navigation', req, rset=rset, page_size=20)
    44             navcomp = self.vreg['components'].select('navigation', req, rset=rset, page_size=20)
    45         self.assertIsInstance(navcomp, SortedNavigation)
    45             self.assertIsInstance(navcomp, SortedNavigation)
    46         req.set_search_state('W:X:Y:Z')
    46             req.set_search_state('W:X:Y:Z')
    47         navcomp = self.vreg['components'].select('navigation', req, rset=rset, page_size=20)
    47             navcomp = self.vreg['components'].select('navigation', req, rset=rset, page_size=20)
    48         self.assertIsInstance(navcomp, SortedNavigation)
    48             self.assertIsInstance(navcomp, SortedNavigation)
    49         req.set_search_state('normal')
    49             req.set_search_state('normal')
    50         html = navcomp.render()
    50             navcomp.render()
    51 
    51 
    52     def test_navigation_selection_large_rset(self):
    52     def test_navigation_selection_large_rset(self):
    53         req = self.request()
    53         with self.admin_access.web_request() as req:
    54         rset = self.execute('Any X,N LIMIT 120 WHERE X name N')
    54             rset = req.execute('Any X,N LIMIT 120 WHERE X name N')
    55         navcomp = self.vreg['components'].select('navigation', req, rset=rset, page_size=20)
    55             navcomp = self.vreg['components'].select('navigation', req, rset=rset, page_size=20)
    56         self.assertIsInstance(navcomp, PageNavigationSelect)
    56             self.assertIsInstance(navcomp, PageNavigationSelect)
    57         rset = self.execute('Any X,N ORDERBY N LIMIT 120 WHERE X name N')
    57             rset = req.execute('Any X,N ORDERBY N LIMIT 120 WHERE X name N')
    58         navcomp = self.vreg['components'].select('navigation', req, rset=rset, page_size=20)
    58             navcomp = self.vreg['components'].select('navigation', req, rset=rset, page_size=20)
    59         self.assertIsInstance(navcomp, PageNavigationSelect)
    59             self.assertIsInstance(navcomp, PageNavigationSelect)
    60 
    60 
    61     def test_navigation_selection_not_enough_1(self):
    61     def test_navigation_selection_not_enough_1(self):
    62         req = self.request()
    62         with self.admin_access.web_request() as req:
    63         rset = self.execute('Any X,N LIMIT 10 WHERE X name N')
    63             rset = req.execute('Any X,N LIMIT 10 WHERE X name N')
    64         navcomp = self.vreg['components'].select_or_none('navigation', req, rset=rset)
    64             navcomp = self.vreg['components'].select_or_none('navigation', req, rset=rset)
    65         self.assertEqual(navcomp, None)
    65             self.assertEqual(navcomp, None)
    66         req.set_search_state('W:X:Y:Z')
    66             req.set_search_state('W:X:Y:Z')
    67         navcomp = self.vreg['components'].select_or_none('navigation', req, rset=rset)
    67             navcomp = self.vreg['components'].select_or_none('navigation', req, rset=rset)
    68         self.assertEqual(navcomp, None)
    68             self.assertEqual(navcomp, None)
    69         req.set_search_state('normal')
    69             req.set_search_state('normal')
    70 
    70 
    71     def test_navigation_selection_not_enough_2(self):
    71     def test_navigation_selection_not_enough_2(self):
    72         req = self.request()
    72         with self.admin_access.web_request() as req:
    73         rset = self.execute('Any N, COUNT(RDEF) GROUPBY N ORDERBY N WHERE RDEF relation_type RT, RT name N')
    73             rset = req.execute('Any N, COUNT(RDEF) GROUPBY N ORDERBY N '
    74         navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    74                                'WHERE RDEF relation_type RT, RT name N')
    75         self.assertIsInstance(navcomp, SortedNavigation)
    75             navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    76         req.set_search_state('W:X:Y:Z')
    76             self.assertIsInstance(navcomp, SortedNavigation)
    77         navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    77             req.set_search_state('W:X:Y:Z')
    78         self.assertIsInstance(navcomp, SortedNavigation)
    78             navcomp = self.vreg['components'].select('navigation', req, rset=rset)
       
    79             self.assertIsInstance(navcomp, SortedNavigation)
    79 
    80 
    80     def test_navigation_selection_wrong_boundary(self):
    81     def test_navigation_selection_wrong_boundary(self):
    81         req = self.request()
    82         with self.admin_access.web_request() as req:
    82         rset = self.execute('Any X,N WHERE X name N')
    83             rset = req.execute('Any X,N WHERE X name N')
    83         req = self.request()
    84             req.form['__start'] = 1000000
    84         req.form['__start'] = 1000000
    85             navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    85         navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    86             html = navcomp.render()
    86         html = navcomp.render()
       
    87 
    87 
    88     def test_sorted_navigation_1(self):
    88     def test_sorted_navigation_1(self):
    89         req = self.request()
    89         with self.admin_access.web_request() as req:
    90         rset = self.execute('Any RDEF ORDERBY RT WHERE RDEF relation_type RT')
    90             rset = req.execute('Any RDEF ORDERBY RT WHERE RDEF relation_type RT')
    91         navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    91             navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    92         html = navcomp.render()
    92             html = navcomp.render()
    93 
    93 
    94     def test_sorted_navigation_2(self):
    94     def test_sorted_navigation_2(self):
    95         req = self.request()
    95         with self.admin_access.web_request() as req:
    96         rset = self.execute('Any RDEF ORDERBY RDEF WHERE RDEF relation_type RT')
    96             rset = req.execute('Any RDEF ORDERBY RDEF WHERE RDEF relation_type RT')
    97         navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    97             navcomp = self.vreg['components'].select('navigation', req, rset=rset)
    98         html = navcomp.render()
    98             html = navcomp.render()
    99 
    99 
   100     def test_sorted_navigation_3(self):
   100     def test_sorted_navigation_3(self):
   101         req = self.request()
   101         with self.admin_access.web_request() as req:
   102         rset = self.execute('CWAttribute RDEF ORDERBY RDEF')
   102             rset = req.execute('CWAttribute RDEF ORDERBY RDEF')
   103         navcomp = self.vreg['components'].select('navigation', req, rset=rset)
   103             navcomp = self.vreg['components'].select('navigation', req, rset=rset)
   104         html = navcomp.render()
   104             html = navcomp.render()
   105 
   105 
   106     def test_sorted_navigation_4(self):
   106     def test_sorted_navigation_4(self):
   107         req = self.request()
   107         with self.admin_access.web_request() as req:
   108         rset = self.execute('Any RDEF ORDERBY N WHERE RDEF relation_type RT, RT name N')
   108             rset = req.execute('Any RDEF ORDERBY N '
   109         navcomp = self.vreg['components'].select('navigation', req, rset=rset)
   109                                'WHERE RDEF relation_type RT, RT name N')
   110         html = navcomp.render()
   110             navcomp = self.vreg['components'].select('navigation', req, rset=rset)
       
   111             html = navcomp.render()
   111 
   112 
   112     def test_sorted_navigation_5(self):
   113     def test_sorted_navigation_5(self):
   113         req = self.request()
   114         with self.admin_access.web_request() as req:
   114         rset = self.execute('Any N, COUNT(RDEF) GROUPBY N ORDERBY N WHERE RDEF relation_type RT, RT name N')
   115             rset = req.execute('Any N, COUNT(RDEF) GROUPBY N ORDERBY N '
   115         navcomp = self.vreg['components'].select('navigation', rset.req, rset=rset)
   116                                'WHERE RDEF relation_type RT, RT name N')
   116         html = navcomp.render()
   117             navcomp = self.vreg['components'].select('navigation', rset.req, rset=rset)
       
   118             html = navcomp.render()
   117 
   119 
   118 
       
   119 # XXX deactivate, contextual component has been removed
       
   120 # class ContentNavigationTC(CubicWebTC):
       
   121     # def test_component_context(self):
       
   122     #     view = mock_object(is_primary=lambda x: True)
       
   123     #     rset = self.execute('CWUser X LIMIT 1')
       
   124     #     req = self.request()
       
   125     #     objs = self.vreg['ctxcomponents'].poss_visible_objects(
       
   126     #         req, rset=rset, view=view, context='navtop')
       
   127     #     # breadcrumbs should be in headers by default
       
   128     #     clsids = set(obj.id for obj in objs)
       
   129     #     self.assertIn('breadcrumbs', clsids)
       
   130     #     objs = self.vreg['ctxcomponents'].poss_visible_objects(
       
   131     #         req, rset=rset, view=view, context='navbottom')
       
   132     #     # breadcrumbs should _NOT_ be in footers by default
       
   133     #     clsids = set(obj.id for obj in objs)
       
   134     #     self.assertNotIn('breadcrumbs', clsids)
       
   135     #     self.execute('INSERT CWProperty P: P pkey "ctxcomponents.breadcrumbs.context", '
       
   136     #                  'P value "navbottom"')
       
   137     #     # breadcrumbs should now be in footers
       
   138     #     req.cnx.commit()
       
   139     #     objs = self.vreg['ctxcomponents'].poss_visible_objects(
       
   140     #         req, rset=rset, view=view, context='navbottom')
       
   141 
       
   142     #     clsids = [obj.id for obj in objs]
       
   143     #     self.assertIn('breadcrumbs', clsids)
       
   144     #     objs = self.vreg['ctxcomponents'].poss_visible_objects(
       
   145     #         req, rset=rset, view=view, context='navtop')
       
   146 
       
   147     #     clsids = [obj.id for obj in objs]
       
   148     #     self.assertNotIn('breadcrumbs', clsids)
       
   149 
   120 
   150 
   121 
   151 if __name__ == '__main__':
   122 if __name__ == '__main__':
   152     unittest_main()
   123     unittest_main()