web/test/unittest_views_editforms.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 02 Sep 2015 15:31:18 +0200
changeset 10634 06a43f727601
parent 10386 82071f767cb8
child 10637 a8b33789b982
permissions -rw-r--r--
[web/views] avoid propagation of NoSelectableObject in some case of inlined relations / permissions When selecting an inlined creation form, we should catch the NoSelectable exception that will be raised if the user cannot add entities of the target type (this is not and cannot be verified earlier) or if some other custom selector prevents the form from being selected. Closes #6510921
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
     1
# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4758
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
3930
c0ae3148b893 fix test: required to fake parent form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3771
diff changeset
    18
from logilab.common.testlib import unittest_main, mock_object
3722
c414f402cbff 2.4 compat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3589
diff changeset
    19
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2661
diff changeset
    20
from cubicweb.devtools.testlib import CubicWebTC
8665
e65af61bde7d [uicfg] uicfg.py moves from web/ to web/views/ (prepares #2406609)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7791
diff changeset
    21
from cubicweb.web.views import uicfg
1359
bef6891393d7 backport some tests
sylvain.thenault@logilab.fr
parents: 1300
diff changeset
    22
from cubicweb.web.formwidgets import AutoCompletionWidget
3722
c414f402cbff 2.4 compat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3589
diff changeset
    23
4080
f88331eb374c test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
    24
AFFK = uicfg.autoform_field_kwargs
f88331eb374c test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
    25
AFS = uicfg.autoform_section
1287
984e249764d1 test rcategories
sylvain.thenault@logilab.fr
parents:
diff changeset
    26
4080
f88331eb374c test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
    27
def rbc(entity, formtype, section):
4570
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    28
    if section in ('attributes', 'metadata', 'hidden'):
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    29
        permission = 'update'
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    30
    else:
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    31
        permission = 'add'
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    32
    return [(rschema.type, x)
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    33
            for rschema, tschemas, x in AFS.relations_by_section(entity,
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    34
                                                                 formtype,
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    35
                                                                 section,
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    36
                                                                 permission)]
1287
984e249764d1 test rcategories
sylvain.thenault@logilab.fr
parents:
diff changeset
    37
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2661
diff changeset
    38
class AutomaticEntityFormTC(CubicWebTC):
1287
984e249764d1 test rcategories
sylvain.thenault@logilab.fr
parents:
diff changeset
    39
1359
bef6891393d7 backport some tests
sylvain.thenault@logilab.fr
parents: 1300
diff changeset
    40
    def test_custom_widget(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    41
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    42
            AFFK.tag_subject_of(('CWUser', 'login', '*'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    43
                                {'widget': AutoCompletionWidget(autocomplete_initfunc='get_logins')})
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    44
            form = self.vreg['forms'].select('edition', req, entity=self.user(req))
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    45
            field = form.field_by_name('login', 'subject')
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    46
            self.assertIsInstance(field.widget, AutoCompletionWidget)
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    47
            AFFK.del_rtag('CWUser', 'login', '*', 'subject')
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    48
1359
bef6891393d7 backport some tests
sylvain.thenault@logilab.fr
parents: 1300
diff changeset
    49
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2058
diff changeset
    50
    def test_cwuser_relations_by_category(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    51
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    52
            e = self.vreg['etypes'].etype_class('CWUser')(req)
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    53
            # see custom configuration in views.cwuser
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    54
            self.assertEqual(rbc(e, 'main', 'attributes'),
4080
f88331eb374c test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
    55
                              [('login', 'subject'),
f88331eb374c test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
    56
                               ('upassword', 'subject'),
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    57
                               ('firstname', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    58
                               ('surname', 'subject'),
4080
f88331eb374c test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
    59
                               ('in_group', 'subject'),
1287
984e249764d1 test rcategories
sylvain.thenault@logilab.fr
parents:
diff changeset
    60
                               ])
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    61
            self.assertListEqual(rbc(e, 'muledit', 'attributes'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    62
                                  [('login', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    63
                                   ('upassword', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    64
                                   ('in_group', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    65
                                   ])
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    66
            self.assertListEqual(rbc(e, 'main', 'metadata'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    67
                                  [('last_login_time', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    68
                                   ('cw_source', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    69
                                   ('creation_date', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    70
                                   ('modification_date', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    71
                                   ('created_by', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    72
                                   ('owned_by', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    73
                                   ('bookmarked_by', 'object'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    74
                                   ])
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    75
            # XXX skip 'tags' relation here and in the hidden category because
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    76
            # of some test interdependancy when pytest is launched on whole cw
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    77
            # (appears here while expected in hidden
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    78
            self.assertListEqual([x for x in rbc(e, 'main', 'relations')
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    79
                                   if x != ('tags', 'object')],
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    80
                                  [('connait', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    81
                                   ('custom_workflow', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    82
                                   ('primary_email', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    83
                                   ('checked_by', 'object'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    84
                                   ])
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    85
            self.assertListEqual(rbc(e, 'main', 'inlined'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    86
                                  [('use_email', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    87
                                   ])
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    88
            # owned_by is defined both as subject and object relations on CWUser
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    89
            self.assertListEqual(sorted(x for x in rbc(e, 'main', 'hidden')
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    90
                                         if x != ('tags', 'object')),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    91
                                  sorted([('for_user', 'object'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    92
                                          ('created_by', 'object'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    93
                                          ('wf_info_for', 'object'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    94
                                          ('owned_by', 'object'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    95
                                          ]))
1298
ca02a2b5e9be test inlined rtags
sylvain.thenault@logilab.fr
parents: 1287
diff changeset
    96
ca02a2b5e9be test inlined rtags
sylvain.thenault@logilab.fr
parents: 1287
diff changeset
    97
    def test_inlined_view(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    98
        self.assertIn('main_inlined',
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
    99
                      AFS.etype_get('CWUser', 'use_email', 'subject', 'EmailAddress'))
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   100
        self.assertNotIn('main_inlined',
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   101
                         AFS.etype_get('CWUser', 'primary_email', 'subject', 'EmailAddress'))
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   102
        self.assertIn('main_relations',
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   103
                      AFS.etype_get('CWUser', 'primary_email', 'subject', 'EmailAddress'))
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   104
1287
984e249764d1 test rcategories
sylvain.thenault@logilab.fr
parents:
diff changeset
   105
    def test_personne_relations_by_category(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   106
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   107
            e = self.vreg['etypes'].etype_class('Personne')(req)
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   108
            self.assertListEqual(rbc(e, 'main', 'attributes'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   109
                                  [('nom', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   110
                                   ('prenom', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   111
                                   ('sexe', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   112
                                   ('promo', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   113
                                   ('titre', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   114
                                   ('ass', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   115
                                   ('web', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   116
                                   ('tel', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   117
                                   ('fax', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   118
                                   ('datenaiss', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   119
                                   ('test', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   120
                                   ('description', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   121
                                   ('salary', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   122
                                   ])
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   123
            self.assertListEqual(rbc(e, 'muledit', 'attributes'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   124
                                  [('nom', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   125
                                   ])
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   126
            self.assertListEqual(rbc(e, 'main', 'metadata'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   127
                                  [('cw_source', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   128
                                   ('creation_date', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   129
                                   ('modification_date', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   130
                                   ('created_by', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   131
                                   ('owned_by', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   132
                                   ])
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   133
            self.assertListEqual(rbc(e, 'main', 'relations'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   134
                                  [('travaille', 'subject'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   135
                                   ('manager', 'object'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   136
                                   ('connait', 'object'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   137
                                   ])
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   138
            self.assertListEqual(rbc(e, 'main', 'hidden'),
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   139
                                  [])
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   140
1300
62d2b890a980 move tests where they belong
sylvain.thenault@logilab.fr
parents: 1298
diff changeset
   141
    def test_edition_form(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   142
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   143
            rset = req.execute('CWUser X LIMIT 1')
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   144
            form = self.vreg['forms'].select('edition', req, rset=rset, row=0, col=0)
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   145
            # should be also selectable by specifying entity
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   146
            self.vreg['forms'].select('edition', req, entity=rset.get_entity(0, 0))
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   147
            self.assertFalse(any(f for f in form.fields if f is None))
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   148
10223
fbb370195199 [web/views] Honor 'action' attribute on AutomaticEntityForm, closes #4943392
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9984
diff changeset
   149
    def test_edition_form_with_action(self):
fbb370195199 [web/views] Honor 'action' attribute on AutomaticEntityForm, closes #4943392
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9984
diff changeset
   150
        with self.admin_access.web_request() as req:
fbb370195199 [web/views] Honor 'action' attribute on AutomaticEntityForm, closes #4943392
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9984
diff changeset
   151
            rset = req.execute('CWUser X LIMIT 1')
fbb370195199 [web/views] Honor 'action' attribute on AutomaticEntityForm, closes #4943392
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9984
diff changeset
   152
            form = self.vreg['forms'].select('edition', req, rset=rset, row=0,
fbb370195199 [web/views] Honor 'action' attribute on AutomaticEntityForm, closes #4943392
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9984
diff changeset
   153
                                             col=0, action='my_custom_action')
fbb370195199 [web/views] Honor 'action' attribute on AutomaticEntityForm, closes #4943392
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9984
diff changeset
   154
            self.assertEqual(form.form_action(), 'my_custom_action')
fbb370195199 [web/views] Honor 'action' attribute on AutomaticEntityForm, closes #4943392
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9984
diff changeset
   155
9976
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   156
    def test_attribute_add_permissions(self):
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   157
        # https://www.cubicweb.org/ticket/4342844
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   158
        with self.admin_access.repo_cnx() as cnx:
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   159
            self.create_user(cnx, 'toto')
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   160
            cnx.commit()
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   161
        with self.new_access('toto').web_request() as req:
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   162
            e = self.vreg['etypes'].etype_class('Personne')(req)
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   163
            cform = self.vreg['forms'].select('edition', req, entity=e)
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   164
            self.assertIn('sexe',
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   165
                          [rschema.type
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   166
                           for rschema, _ in cform.editable_attributes()])
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   167
            with self.new_access('toto').repo_cnx() as cnx:
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   168
                person_eid = cnx.create_entity('Personne', nom=u'Robert').eid
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   169
                cnx.commit()
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   170
            person = req.entity_from_eid(person_eid)
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   171
            mform = self.vreg['forms'].select('edition', req, entity=person)
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   172
            self.assertNotIn('sexe',
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   173
                             [rschema.type
457efde98629 [views] Display attributes in entity creation form based on "add" permission
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9842
diff changeset
   174
                              for rschema, _ in mform.editable_attributes()])
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   175
10634
06a43f727601 [web/views] avoid propagation of NoSelectableObject in some case of inlined relations / permissions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10386
diff changeset
   176
    def test_inlined_relations(self):
06a43f727601 [web/views] avoid propagation of NoSelectableObject in some case of inlined relations / permissions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10386
diff changeset
   177
        with self.admin_access.web_request() as req:
06a43f727601 [web/views] avoid propagation of NoSelectableObject in some case of inlined relations / permissions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10386
diff changeset
   178
            with self.temporary_permissions(EmailAddress={'add': ()}):
06a43f727601 [web/views] avoid propagation of NoSelectableObject in some case of inlined relations / permissions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10386
diff changeset
   179
                autoform = self.vreg['forms'].select('edition', req, entity=req.user)
06a43f727601 [web/views] avoid propagation of NoSelectableObject in some case of inlined relations / permissions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10386
diff changeset
   180
                self.assertEqual(list(autoform.inlined_form_views()), [])
06a43f727601 [web/views] avoid propagation of NoSelectableObject in some case of inlined relations / permissions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10386
diff changeset
   181
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   182
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2661
diff changeset
   183
class FormViewsTC(CubicWebTC):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   184
1300
62d2b890a980 move tests where they belong
sylvain.thenault@logilab.fr
parents: 1298
diff changeset
   185
    def test_delete_conf_formview(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   186
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   187
            rset = req.execute('CWGroup X')
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   188
            self.view('deleteconf', rset, template=None, req=req).source
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   189
1300
62d2b890a980 move tests where they belong
sylvain.thenault@logilab.fr
parents: 1298
diff changeset
   190
    def test_automatic_edition_formview(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   191
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   192
            rset = req.execute('CWUser X')
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   193
            self.view('edition', rset, row=0, template=None, req=req).source
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   194
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   195
    def test_automatic_edition_copyformview(self):
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   196
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   197
            rset = req.execute('CWUser X')
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   198
            self.view('copy', rset, row=0, template=None, req=req).source
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   199
1300
62d2b890a980 move tests where they belong
sylvain.thenault@logilab.fr
parents: 1298
diff changeset
   200
    def test_automatic_creation_formview(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   201
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   202
            self.view('creation', None, etype='CWUser', template=None, req=req).source
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   203
1300
62d2b890a980 move tests where they belong
sylvain.thenault@logilab.fr
parents: 1298
diff changeset
   204
    def test_automatic_muledit_formview(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   205
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   206
            rset = req.execute('CWUser X')
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   207
            self.view('muledit', rset, template=None, req=req).source
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   208
1300
62d2b890a980 move tests where they belong
sylvain.thenault@logilab.fr
parents: 1298
diff changeset
   209
    def test_automatic_reledit_formview(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   210
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   211
            rset = req.execute('CWUser X')
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   212
            self.view('reledit', rset, row=0, rtype='login', template=None, req=req).source
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   213
1300
62d2b890a980 move tests where they belong
sylvain.thenault@logilab.fr
parents: 1298
diff changeset
   214
    def test_automatic_inline_edit_formview(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   215
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   216
            geid = req.execute('CWGroup X LIMIT 1')[0][0]
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   217
            rset = req.execute('CWUser X LIMIT 1')
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   218
            self.view('inline-edition', rset, row=0, col=0, rtype='in_group',
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   219
                      peid=geid, role='object', i18nctx='', pform=MOCKPFORM,
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   220
                      template=None, req=req).source
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   221
1300
62d2b890a980 move tests where they belong
sylvain.thenault@logilab.fr
parents: 1298
diff changeset
   222
    def test_automatic_inline_creation_formview(self):
9842
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   223
        with self.admin_access.web_request() as req:
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   224
            geid = req.execute('CWGroup X LIMIT 1')[0][0]
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   225
            self.view('inline-creation', None, etype='CWUser', rtype='in_group',
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   226
                      peid=geid, petype='CWGroup', i18nctx='', role='object', pform=MOCKPFORM,
78d1beebdebc [webtests/views_editforms] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   227
                      template=None, req=req)
1300
62d2b890a980 move tests where they belong
sylvain.thenault@logilab.fr
parents: 1298
diff changeset
   228
3930
c0ae3148b893 fix test: required to fake parent form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3771
diff changeset
   229
MOCKPFORM = mock_object(form_previous_values={}, form_valerror=None)
1533
bcd4bfff658b update rtags api
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   230
1287
984e249764d1 test rcategories
sylvain.thenault@logilab.fr
parents:
diff changeset
   231
if __name__ == '__main__':
984e249764d1 test rcategories
sylvain.thenault@logilab.fr
parents:
diff changeset
   232
    unittest_main()
2637
07103211e511 R [test] update and fix deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2058
diff changeset
   233