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