web/test/unittest_views_editforms.py
changeset 9842 78d1beebdebc
parent 8665 e65af61bde7d
child 9897 fa44db7da2dc
child 9976 457efde98629
equal deleted inserted replaced
9841:d2e196f12db4 9842:78d1beebdebc
     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
    13 # FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
    13 # FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
    14 # details.
    14 # details.
    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 """
       
    19 
       
    20 """
       
    21 from logilab.common.testlib import unittest_main, mock_object
    18 from logilab.common.testlib import unittest_main, mock_object
    22 from logilab.common.compat import any
       
    23 
    19 
    24 from cubicweb.devtools.testlib import CubicWebTC
    20 from cubicweb.devtools.testlib import CubicWebTC
    25 from cubicweb.web.views import uicfg
    21 from cubicweb.web.views import uicfg
    26 from cubicweb.web.formwidgets import AutoCompletionWidget
    22 from cubicweb.web.formwidgets import AutoCompletionWidget
    27 
    23 
    31 def rbc(entity, formtype, section):
    27 def rbc(entity, formtype, section):
    32     if section in ('attributes', 'metadata', 'hidden'):
    28     if section in ('attributes', 'metadata', 'hidden'):
    33         permission = 'update'
    29         permission = 'update'
    34     else:
    30     else:
    35         permission = 'add'
    31         permission = 'add'
    36     return [(rschema.type, x) for rschema, tschemas, x in AFS.relations_by_section(entity, formtype, section, permission)]
    32     return [(rschema.type, x)
       
    33             for rschema, tschemas, x in AFS.relations_by_section(entity,
       
    34                                                                  formtype,
       
    35                                                                  section,
       
    36                                                                  permission)]
    37 
    37 
    38 class AutomaticEntityFormTC(CubicWebTC):
    38 class AutomaticEntityFormTC(CubicWebTC):
    39 
    39 
    40     def test_custom_widget(self):
    40     def test_custom_widget(self):
    41         AFFK.tag_subject_of(('CWUser', 'login', '*'),
    41         with self.admin_access.web_request() as req:
    42                             {'widget': AutoCompletionWidget(autocomplete_initfunc='get_logins')})
    42             AFFK.tag_subject_of(('CWUser', 'login', '*'),
    43         form = self.vreg['forms'].select('edition', self.request(),
    43                                 {'widget': AutoCompletionWidget(autocomplete_initfunc='get_logins')})
    44                                          entity=self.user())
    44             form = self.vreg['forms'].select('edition', req, entity=self.user(req))
    45         field = form.field_by_name('login', 'subject')
    45             field = form.field_by_name('login', 'subject')
    46         self.assertIsInstance(field.widget, AutoCompletionWidget)
    46             self.assertIsInstance(field.widget, AutoCompletionWidget)
    47         AFFK.del_rtag('CWUser', 'login', '*', 'subject')
    47             AFFK.del_rtag('CWUser', 'login', '*', 'subject')
    48 
    48 
    49 
    49 
    50     def test_cwuser_relations_by_category(self):
    50     def test_cwuser_relations_by_category(self):
    51         e = self.vreg['etypes'].etype_class('CWUser')(self.request())
    51         with self.admin_access.web_request() as req:
    52         # see custom configuration in views.cwuser
    52             e = self.vreg['etypes'].etype_class('CWUser')(req)
    53         self.assertEqual(rbc(e, 'main', 'attributes'),
    53             # see custom configuration in views.cwuser
    54                           [('login', 'subject'),
    54             self.assertEqual(rbc(e, 'main', 'attributes'),
    55                            ('upassword', 'subject'),
       
    56                            ('firstname', 'subject'),
       
    57                            ('surname', 'subject'),
       
    58                            ('in_group', 'subject'),
       
    59                            ])
       
    60         self.assertListEqual(rbc(e, 'muledit', 'attributes'),
       
    61                               [('login', 'subject'),
    55                               [('login', 'subject'),
    62                                ('upassword', 'subject'),
    56                                ('upassword', 'subject'),
       
    57                                ('firstname', 'subject'),
       
    58                                ('surname', 'subject'),
    63                                ('in_group', 'subject'),
    59                                ('in_group', 'subject'),
    64                                ])
    60                                ])
    65         self.assertListEqual(rbc(e, 'main', 'metadata'),
    61             self.assertListEqual(rbc(e, 'muledit', 'attributes'),
    66                               [('last_login_time', 'subject'),
    62                                   [('login', 'subject'),
    67                                ('cw_source', 'subject'),
    63                                    ('upassword', 'subject'),
    68                                ('creation_date', 'subject'),
    64                                    ('in_group', 'subject'),
    69                                ('cwuri', 'subject'),
    65                                    ])
    70                                ('modification_date', 'subject'),
    66             self.assertListEqual(rbc(e, 'main', 'metadata'),
    71                                ('created_by', 'subject'),
    67                                   [('last_login_time', 'subject'),
    72                                ('owned_by', 'subject'),
    68                                    ('cw_source', 'subject'),
    73                                ('bookmarked_by', 'object'),
    69                                    ('creation_date', 'subject'),
    74                                ])
    70                                    ('cwuri', 'subject'),
    75         # XXX skip 'tags' relation here and in the hidden category because
    71                                    ('modification_date', 'subject'),
    76         # of some test interdependancy when pytest is launched on whole cw
    72                                    ('created_by', 'subject'),
    77         # (appears here while expected in hidden
    73                                    ('owned_by', 'subject'),
    78         self.assertListEqual([x for x in rbc(e, 'main', 'relations')
    74                                    ('bookmarked_by', 'object'),
    79                                if x != ('tags', 'object')],
    75                                    ])
    80                               [('connait', 'subject'),
    76             # XXX skip 'tags' relation here and in the hidden category because
    81                                ('custom_workflow', 'subject'),
    77             # of some test interdependancy when pytest is launched on whole cw
    82                                ('primary_email', 'subject'),
    78             # (appears here while expected in hidden
    83                                ('checked_by', 'object'),
    79             self.assertListEqual([x for x in rbc(e, 'main', 'relations')
    84                                ])
    80                                    if x != ('tags', 'object')],
    85         self.assertListEqual(rbc(e, 'main', 'inlined'),
    81                                   [('connait', 'subject'),
    86                               [('use_email', 'subject'),
    82                                    ('custom_workflow', 'subject'),
    87                                ])
    83                                    ('primary_email', 'subject'),
    88         # owned_by is defined both as subject and object relations on CWUser
    84                                    ('checked_by', 'object'),
    89         self.assertListEqual(sorted(x for x in rbc(e, 'main', 'hidden')
    85                                    ])
    90                                      if x != ('tags', 'object')),
    86             self.assertListEqual(rbc(e, 'main', 'inlined'),
    91                               sorted([('for_user', 'object'),
    87                                   [('use_email', 'subject'),
    92                                       ('created_by', 'object'),
    88                                    ])
    93                                       ('wf_info_for', 'object'),
    89             # owned_by is defined both as subject and object relations on CWUser
    94                                       ('owned_by', 'object'),
    90             self.assertListEqual(sorted(x for x in rbc(e, 'main', 'hidden')
    95                                       ]))
    91                                          if x != ('tags', 'object')),
       
    92                                   sorted([('for_user', 'object'),
       
    93                                           ('created_by', 'object'),
       
    94                                           ('wf_info_for', 'object'),
       
    95                                           ('owned_by', 'object'),
       
    96                                           ]))
    96 
    97 
    97     def test_inlined_view(self):
    98     def test_inlined_view(self):
    98         self.assertTrue('main_inlined' in AFS.etype_get('CWUser', 'use_email', 'subject', 'EmailAddress'))
    99         self.assertIn('main_inlined',
    99         self.assertFalse('main_inlined' in AFS.etype_get('CWUser', 'primary_email', 'subject', 'EmailAddress'))
   100                       AFS.etype_get('CWUser', 'use_email', 'subject', 'EmailAddress'))
   100         self.assertTrue('main_relations' in AFS.etype_get('CWUser', 'primary_email', 'subject', 'EmailAddress'))
   101         self.assertNotIn('main_inlined',
       
   102                          AFS.etype_get('CWUser', 'primary_email', 'subject', 'EmailAddress'))
       
   103         self.assertIn('main_relations',
       
   104                       AFS.etype_get('CWUser', 'primary_email', 'subject', 'EmailAddress'))
   101 
   105 
   102     def test_personne_relations_by_category(self):
   106     def test_personne_relations_by_category(self):
   103         e = self.vreg['etypes'].etype_class('Personne')(self.request())
   107         with self.admin_access.web_request() as req:
   104         self.assertListEqual(rbc(e, 'main', 'attributes'),
   108             e = self.vreg['etypes'].etype_class('Personne')(req)
   105                               [('nom', 'subject'),
   109             self.assertListEqual(rbc(e, 'main', 'attributes'),
   106                                ('prenom', 'subject'),
   110                                   [('nom', 'subject'),
   107                                ('sexe', 'subject'),
   111                                    ('prenom', 'subject'),
   108                                ('promo', 'subject'),
   112                                    ('sexe', 'subject'),
   109                                ('titre', 'subject'),
   113                                    ('promo', 'subject'),
   110                                ('ass', 'subject'),
   114                                    ('titre', 'subject'),
   111                                ('web', 'subject'),
   115                                    ('ass', 'subject'),
   112                                ('tel', 'subject'),
   116                                    ('web', 'subject'),
   113                                ('fax', 'subject'),
   117                                    ('tel', 'subject'),
   114                                ('datenaiss', 'subject'),
   118                                    ('fax', 'subject'),
   115                                ('test', 'subject'),
   119                                    ('datenaiss', 'subject'),
   116                                ('description', 'subject'),
   120                                    ('test', 'subject'),
   117                                ('salary', 'subject'),
   121                                    ('description', 'subject'),
   118                                ])
   122                                    ('salary', 'subject'),
   119         self.assertListEqual(rbc(e, 'muledit', 'attributes'),
   123                                    ])
   120                               [('nom', 'subject'),
   124             self.assertListEqual(rbc(e, 'muledit', 'attributes'),
   121                                ])
   125                                   [('nom', 'subject'),
   122         self.assertListEqual(rbc(e, 'main', 'metadata'),
   126                                    ])
   123                               [('cw_source', 'subject'),
   127             self.assertListEqual(rbc(e, 'main', 'metadata'),
   124                                ('creation_date', 'subject'),
   128                                   [('cw_source', 'subject'),
   125                                ('cwuri', 'subject'),
   129                                    ('creation_date', 'subject'),
   126                                ('modification_date', 'subject'),
   130                                    ('cwuri', 'subject'),
   127                                ('created_by', 'subject'),
   131                                    ('modification_date', 'subject'),
   128                                ('owned_by', 'subject'),
   132                                    ('created_by', 'subject'),
   129                                ])
   133                                    ('owned_by', 'subject'),
   130         self.assertListEqual(rbc(e, 'main', 'relations'),
   134                                    ])
   131                               [('travaille', 'subject'),
   135             self.assertListEqual(rbc(e, 'main', 'relations'),
   132                                ('manager', 'object'),
   136                                   [('travaille', 'subject'),
   133                                ('connait', 'object'),
   137                                    ('manager', 'object'),
   134                                ])
   138                                    ('connait', 'object'),
   135         self.assertListEqual(rbc(e, 'main', 'hidden'),
   139                                    ])
   136                               [])
   140             self.assertListEqual(rbc(e, 'main', 'hidden'),
       
   141                                   [])
   137 
   142 
   138     def test_edition_form(self):
   143     def test_edition_form(self):
   139         rset = self.execute('CWUser X LIMIT 1')
   144         with self.admin_access.web_request() as req:
   140         form = self.vreg['forms'].select('edition', rset.req, rset=rset,
   145             rset = req.execute('CWUser X LIMIT 1')
   141                                 row=0, col=0)
   146             form = self.vreg['forms'].select('edition', req, rset=rset, row=0, col=0)
   142         # should be also selectable by specifying entity
   147             # should be also selectable by specifying entity
   143         self.vreg['forms'].select('edition', rset.req,
   148             self.vreg['forms'].select('edition', req, entity=rset.get_entity(0, 0))
   144                          entity=rset.get_entity(0, 0))
   149             self.assertFalse(any(f for f in form.fields if f is None))
   145         self.assertFalse(any(f for f in form.fields if f is None))
       
   146 
   150 
   147 
   151 
   148 class FormViewsTC(CubicWebTC):
   152 class FormViewsTC(CubicWebTC):
       
   153 
   149     def test_delete_conf_formview(self):
   154     def test_delete_conf_formview(self):
   150         rset = self.execute('CWGroup X')
   155         with self.admin_access.web_request() as req:
   151         self.view('deleteconf', rset, template=None).source
   156             rset = req.execute('CWGroup X')
       
   157             self.view('deleteconf', rset, template=None, req=req).source
   152 
   158 
   153     def test_automatic_edition_formview(self):
   159     def test_automatic_edition_formview(self):
   154         rset = self.execute('CWUser X')
   160         with self.admin_access.web_request() as req:
   155         self.view('edition', rset, row=0, template=None).source
   161             rset = req.execute('CWUser X')
   156 
   162             self.view('edition', rset, row=0, template=None, req=req).source
   157     def test_automatic_edition_formview(self):
   163 
   158         rset = self.execute('CWUser X')
   164     def test_automatic_edition_copyformview(self):
   159         self.view('copy', rset, row=0, template=None).source
   165         with self.admin_access.web_request() as req:
       
   166             rset = req.execute('CWUser X')
       
   167             self.view('copy', rset, row=0, template=None, req=req).source
   160 
   168 
   161     def test_automatic_creation_formview(self):
   169     def test_automatic_creation_formview(self):
   162         self.view('creation', None, etype='CWUser', template=None).source
   170         with self.admin_access.web_request() as req:
       
   171             self.view('creation', None, etype='CWUser', template=None, req=req).source
   163 
   172 
   164     def test_automatic_muledit_formview(self):
   173     def test_automatic_muledit_formview(self):
   165         rset = self.execute('CWUser X')
   174         with self.admin_access.web_request() as req:
   166         self.view('muledit', rset, template=None).source
   175             rset = req.execute('CWUser X')
       
   176             self.view('muledit', rset, template=None, req=req).source
   167 
   177 
   168     def test_automatic_reledit_formview(self):
   178     def test_automatic_reledit_formview(self):
   169         rset = self.execute('CWUser X')
   179         with self.admin_access.web_request() as req:
   170         self.view('reledit', rset, row=0, rtype='login', template=None).source
   180             rset = req.execute('CWUser X')
       
   181             self.view('reledit', rset, row=0, rtype='login', template=None, req=req).source
   171 
   182 
   172     def test_automatic_inline_edit_formview(self):
   183     def test_automatic_inline_edit_formview(self):
   173         geid = self.execute('CWGroup X LIMIT 1')[0][0]
   184         with self.admin_access.web_request() as req:
   174         rset = self.execute('CWUser X LIMIT 1')
   185             geid = req.execute('CWGroup X LIMIT 1')[0][0]
   175         self.view('inline-edition', rset, row=0, col=0, rtype='in_group',
   186             rset = req.execute('CWUser X LIMIT 1')
   176                   peid=geid, role='object', i18nctx='', pform=MOCKPFORM,
   187             self.view('inline-edition', rset, row=0, col=0, rtype='in_group',
   177                   template=None).source
   188                       peid=geid, role='object', i18nctx='', pform=MOCKPFORM,
       
   189                       template=None, req=req).source
   178 
   190 
   179     def test_automatic_inline_creation_formview(self):
   191     def test_automatic_inline_creation_formview(self):
   180         geid = self.execute('CWGroup X LIMIT 1')[0][0]
   192         with self.admin_access.web_request() as req:
   181         self.view('inline-creation', None, etype='CWUser', rtype='in_group',
   193             geid = req.execute('CWGroup X LIMIT 1')[0][0]
   182                   peid=geid, petype='CWGroup', i18nctx='', role='object', pform=MOCKPFORM,
   194             self.view('inline-creation', None, etype='CWUser', rtype='in_group',
   183                   template=None)
   195                       peid=geid, petype='CWGroup', i18nctx='', role='object', pform=MOCKPFORM,
       
   196                       template=None, req=req)
   184 
   197 
   185 MOCKPFORM = mock_object(form_previous_values={}, form_valerror=None)
   198 MOCKPFORM = mock_object(form_previous_values={}, form_valerror=None)
   186 
   199 
   187 if __name__ == '__main__':
   200 if __name__ == '__main__':
   188     unittest_main()
   201     unittest_main()