web/test/unittest_form.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 09 Sep 2015 08:32:49 +0200
changeset 10637 a8b33789b982
parent 10016 984505da8b89
child 10273 ef74abcf369d
permissions -rw-r--r--
[autoform] fix appearance of link to add inlined creation form On entity creation, if there are some local permissions on the relation, we have no way of checking them since neither the subject nor the object of the relation exists yet. In such a case, we should add the link by default, for consistency (see other places where we use `may_have_permission`). Closes #6711900
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7584
e1881933f366 [form, controller] closes #1787233: form should provide a method to process posted content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7161
diff changeset
     1
# copyright 2003-2011 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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
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: 4678
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
2005
e8032965f37a turn every form class into appobject. They should not be instantiated manually anymore.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1995
diff changeset
    18
10016
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
    19
import time
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
    20
2145
529867c301fc add datetime form test
Florent <florent@secondweb.fr>
parents: 2005
diff changeset
    21
from xml.etree.ElementTree import fromstring
10016
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
    22
from lxml import html
2145
529867c301fc add datetime form test
Florent <florent@secondweb.fr>
parents: 2005
diff changeset
    23
866
6fdb029663ca use EnvBasedTC since we need to access the schema
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 848
diff changeset
    24
from logilab.common.testlib import unittest_main, mock_object
2005
e8032965f37a turn every form class into appobject. They should not be instantiated manually anymore.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1995
diff changeset
    25
7584
e1881933f366 [form, controller] closes #1787233: form should provide a method to process posted content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7161
diff changeset
    26
from cubicweb import Binary, ValidationError
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2755
diff changeset
    27
from cubicweb.devtools.testlib import CubicWebTC
1111
bcb81e7c41bc fix test: form_add_entity_hiddens *must* be called before build context, resulting in slightly different outputs...
sylvain.thenault@logilab.fr
parents: 1074
diff changeset
    28
from cubicweb.web.formfields import (IntField, StringField, RichTextField,
4390
0285c1fa1459 test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    29
                                     PasswordField, DateTimeField,
1111
bcb81e7c41bc fix test: form_add_entity_hiddens *must* be called before build context, resulting in slightly different outputs...
sylvain.thenault@logilab.fr
parents: 1074
diff changeset
    30
                                     FileField, EditableFileField)
4390
0285c1fa1459 test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    31
from cubicweb.web.formwidgets import PasswordInput, Input, DateTimePicker
2005
e8032965f37a turn every form class into appobject. They should not be instantiated manually anymore.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1995
diff changeset
    32
from cubicweb.web.views.forms import EntityFieldsForm, FieldsForm
1111
bcb81e7c41bc fix test: form_add_entity_hiddens *must* be called before build context, resulting in slightly different outputs...
sylvain.thenault@logilab.fr
parents: 1074
diff changeset
    33
from cubicweb.web.views.workflow import ChangeStateForm
1995
ec95eaa2b711 turn renderers into appobjects
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1983
diff changeset
    34
from cubicweb.web.views.formrenderers import FormRenderer
845
6103d0f55a0b simple tags
sylvain.thenault@logilab.fr
parents:
diff changeset
    35
869
168ad6d424d1 form to edit multiple entities, use it in DeleteConfForm
sylvain.thenault@logilab.fr
parents: 868
diff changeset
    36
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2755
diff changeset
    37
class FieldsFormTC(CubicWebTC):
1359
bef6891393d7 backport some tests
sylvain.thenault@logilab.fr
parents: 1345
diff changeset
    38
bef6891393d7 backport some tests
sylvain.thenault@logilab.fr
parents: 1345
diff changeset
    39
    def test_form_field_format(self):
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    40
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    41
            form = FieldsForm(req, None)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    42
            self.assertEqual(StringField().format(form), 'text/html')
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    43
            req.cnx.execute('INSERT CWProperty X: X pkey "ui.default-text-format", X value "text/rest", X for_user U WHERE U login "admin"')
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    44
            req.cnx.commit()
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    45
            self.assertEqual(StringField().format(form), 'text/rest')
1359
bef6891393d7 backport some tests
sylvain.thenault@logilab.fr
parents: 1345
diff changeset
    46
bef6891393d7 backport some tests
sylvain.thenault@logilab.fr
parents: 1345
diff changeset
    47
7584
e1881933f366 [form, controller] closes #1787233: form should provide a method to process posted content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7161
diff changeset
    48
    def test_process_posted(self):
e1881933f366 [form, controller] closes #1787233: form should provide a method to process posted content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7161
diff changeset
    49
        class AForm(FieldsForm):
e1881933f366 [form, controller] closes #1787233: form should provide a method to process posted content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7161
diff changeset
    50
            anint = IntField()
e1881933f366 [form, controller] closes #1787233: form should provide a method to process posted content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7161
diff changeset
    51
            astring = StringField()
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    52
        with self.admin_access.web_request(anint='1', astring='2', _cw_fields='anint,astring') as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    53
            form = AForm(req)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    54
            self.assertEqual(form.process_posted(), {'anint': 1, 'astring': '2'})
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    55
        with self.admin_access.web_request(anint='1a', astring='2b', _cw_fields='anint,astring') as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    56
            form = AForm(req)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    57
            self.assertRaises(ValidationError, form.process_posted)
7584
e1881933f366 [form, controller] closes #1787233: form should provide a method to process posted content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7161
diff changeset
    58
e1881933f366 [form, controller] closes #1787233: form should provide a method to process posted content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7161
diff changeset
    59
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2755
diff changeset
    60
class EntityFieldsFormTC(CubicWebTC):
845
6103d0f55a0b simple tags
sylvain.thenault@logilab.fr
parents:
diff changeset
    61
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    62
    def test_form_field_choices(self):
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    63
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    64
            b = req.create_entity('BlogEntry', title=u'di mascii code', content=u'a best-seller')
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    65
            t = req.create_entity('Tag', name=u'x')
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    66
            form1 = self.vreg['forms'].select('edition', req, entity=t)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    67
            choices = [reid for rview, reid in form1.field_by_name('tags', 'subject', t.e_schema).choices(form1)]
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    68
            self.assertIn(unicode(b.eid), choices)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    69
            form2 = self.vreg['forms'].select('edition', req, entity=b)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    70
            choices = [reid for rview, reid in form2.field_by_name('tags', 'object', t.e_schema).choices(form2)]
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    71
            self.assertIn(unicode(t.eid), choices)
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    72
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    73
            b.cw_clear_all_caches()
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    74
            t.cw_clear_all_caches()
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    75
            req.cnx.execute('SET X tags Y WHERE X is Tag, Y is BlogEntry')
8734
3530b7494195 [test/web] fix invisibly bogus test (prepares #2755994)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7791
diff changeset
    76
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    77
            choices = [reid for rview, reid in form1.field_by_name('tags', 'subject', t.e_schema).choices(form1)]
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    78
            self.assertIn(unicode(b.eid), choices)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    79
            choices = [reid for rview, reid in form2.field_by_name('tags', 'object', t.e_schema).choices(form2)]
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    80
            self.assertIn(unicode(t.eid), choices)
3176
b94703b131ad hopefully correctly fix the breadcrumbs escaping
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 3002
diff changeset
    81
8734
3530b7494195 [test/web] fix invisibly bogus test (prepares #2755994)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 7791
diff changeset
    82
    def test_form_field_choices_new_entity(self):
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    83
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    84
            e = self.vreg['etypes'].etype_class('CWUser')(req)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    85
            form = self.vreg['forms'].select('edition', req, entity=e)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    86
            unrelated = [rview for rview, reid in form.field_by_name('in_group', 'subject').choices(form)]
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    87
            # should be default groups but owners, i.e. managers, users, guests
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    88
            self.assertEqual(unrelated, [u'guests', u'managers', u'users'])
1345
9f086baa2537 backport tests
sylvain.thenault@logilab.fr
parents: 1300
diff changeset
    89
1843
646c2dd1f03e #343290: inputs don't use value specified in URL
sylvain.thenault@logilab.fr
parents: 1793
diff changeset
    90
    def test_consider_req_form_params(self):
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    91
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    92
            e = self.vreg['etypes'].etype_class('CWUser')(req)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    93
            e.eid = 'A'
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    94
            with self.admin_access.web_request(login=u'toto') as toto_req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    95
                form = EntityFieldsForm(toto_req, None, entity=e)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    96
                field = StringField(name='login', role='subject', eidparam=True)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    97
                form.append_field(field)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    98
                form.build_context({})
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
    99
                self.assertEqual(field.widget.values(form, field), (u'toto',))
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   100
9377
4e0d8f06efbc [js/widgets] fix the InOut widget with modern jQuery versions
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8849
diff changeset
   101
    def test_linkto_field_duplication_inout(self):
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   102
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   103
            e = self.vreg['etypes'].etype_class('CWUser')(req)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   104
            e.eid = 'A'
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   105
            e._cw = req
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   106
            geid = req.cnx.execute('CWGroup X WHERE X name "users"')[0][0]
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   107
            req.form['__linkto'] = 'in_group:%s:subject' % geid
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   108
            form = self.vreg['forms'].select('edition', req, entity=e)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   109
            form.content_type = 'text/html'
10006
8391bf718485 remove most 3.10 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9990
diff changeset
   110
            data = []
8391bf718485 remove most 3.10 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9990
diff changeset
   111
            form.render(w=data.append)
8391bf718485 remove most 3.10 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9990
diff changeset
   112
            pageinfo = self._check_html(u'\n'.join(data), form, template=None)
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   113
            inputs = pageinfo.find_tag('select', False)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   114
            ok = False
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   115
            for selectnode in pageinfo.matching_nodes('select', name='from_in_group-subject:A'):
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   116
                for optionnode in selectnode:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   117
                    self.assertEqual(optionnode.get('value'), str(geid))
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   118
                    self.assertEqual(ok, False)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   119
                    ok = True
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   120
            inputs = pageinfo.find_tag('input', False)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   121
            self.assertFalse(list(pageinfo.matching_nodes('input', name='__linkto')))
1947
8696403e5324 test and fix __linkto handling (#343421)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1843
diff changeset
   122
2198
ac45d4dbaf76 close #344264, pb with composite fields / renderer.display_fields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2174
diff changeset
   123
    def test_reledit_composite_field(self):
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   124
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   125
            rset = req.execute('INSERT BlogEntry X: X title "cubicweb.org", X content "hop"')
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   126
            form = self.vreg['views'].select('reledit', req,
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   127
                                             rset=rset, row=0, rtype='content')
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   128
            data = form.render(row=0, rtype='content', formid='base', action='edit_rtype')
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   129
            self.assertIn('content_format', data)
2198
ac45d4dbaf76 close #344264, pb with composite fields / renderer.display_fields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2174
diff changeset
   130
1181
620ec8e6ae19 cleanup, various fix to get something working
sylvain.thenault@logilab.fr
parents: 1147
diff changeset
   131
10016
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   132
    def test_form_generation_time(self):
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   133
        with self.admin_access.web_request() as req:
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   134
            e = req.create_entity('BlogEntry', title=u'cubicweb.org', content=u"hop")
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   135
            expected_field_name = '__form_generation_time:%d' % e.eid
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   136
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   137
            ts_before = time.time()
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   138
            form = self.vreg['forms'].select('edition', req, entity=e)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   139
            ts_after = time.time()
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   140
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   141
            data = []
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   142
            form.render(action='edit', w=data.append)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   143
            html_form = html.fromstring(''.join(data)).forms[0]
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   144
            fields = dict(html_form.form_values())
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   145
            self.assertIn(expected_field_name, fields)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   146
            ts = float(fields[expected_field_name])
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   147
            self.assertTrue(ts_before < ts  < ts_after)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   148
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 10012
diff changeset
   149
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   150
    # form tests ##############################################################
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   151
869
168ad6d424d1 form to edit multiple entities, use it in DeleteConfForm
sylvain.thenault@logilab.fr
parents: 868
diff changeset
   152
    def test_form_inheritance(self):
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   153
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   154
            class CustomChangeStateForm(ChangeStateForm):
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   155
                hello = IntField(name='youlou')
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   156
                creation_date = DateTimeField(widget=DateTimePicker)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   157
            form = CustomChangeStateForm(req, redirect_path='perdu.com',
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   158
                                         entity=req.user)
10006
8391bf718485 remove most 3.10 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9990
diff changeset
   159
            data = []
8391bf718485 remove most 3.10 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9990
diff changeset
   160
            form.render(w=data.append,
8391bf718485 remove most 3.10 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9990
diff changeset
   161
                        formvalues=dict(state=123, trcomment=u'',
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   162
                                        trcomment_format=u'text/plain'))
869
168ad6d424d1 form to edit multiple entities, use it in DeleteConfForm
sylvain.thenault@logilab.fr
parents: 868
diff changeset
   163
168ad6d424d1 form to edit multiple entities, use it in DeleteConfForm
sylvain.thenault@logilab.fr
parents: 868
diff changeset
   164
    def test_change_state_form(self):
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   165
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   166
            form = ChangeStateForm(req, redirect_path='perdu.com',
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   167
                                   entity=req.user)
10006
8391bf718485 remove most 3.10 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9990
diff changeset
   168
            data = []
8391bf718485 remove most 3.10 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9990
diff changeset
   169
            form.render(w=data.append,
8391bf718485 remove most 3.10 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9990
diff changeset
   170
                        formvalues=dict(state=123, trcomment=u'',
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   171
                                        trcomment_format=u'text/plain'))
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   172
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   173
    # fields tests ############################################################
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   174
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   175
    def _render_entity_field(self, req, name, form):
3510
bf746bf4a394 rename form_build_context to build_context, and call it from form, not renderer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3176
diff changeset
   176
        form.build_context({})
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   177
        renderer = FormRenderer(req)
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   178
        return form.field_by_name(name, 'subject').render(form, renderer)
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   179
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   180
    def _test_richtextfield(self, req, expected):
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   181
        class RTFForm(EntityFieldsForm):
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   182
            description = RichTextField(eidparam=True, role='subject')
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   183
        state = self.vreg['etypes'].etype_class('State')(req)
4390
0285c1fa1459 test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   184
        state.eid = 'S'
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   185
        form = RTFForm(req, redirect_path='perdu.com', entity=state)
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   186
        # make it think it can use fck editor anyway
6637
6bbfc628555b [3.10] more form api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   187
        form.field_by_name('description', 'subject').format = lambda form, field=None: 'text/html'
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   188
        self.assertMultiLineEqual(self._render_entity_field(req, 'description', form),
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   189
                              expected % {'eid': state.eid})
1111
bcb81e7c41bc fix test: form_add_entity_hiddens *must* be called before build context, resulting in slightly different outputs...
sylvain.thenault@logilab.fr
parents: 1074
diff changeset
   190
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   191
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   192
    def test_richtextfield_1(self):
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   193
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   194
            req.use_fckeditor = lambda: False
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   195
            self._test_richtextfield(req, '''<select id="description_format-subject:%(eid)s" name="description_format-subject:%(eid)s" size="1" style="display: block" tabindex="1">
1300
62d2b890a980 move tests where they belong
sylvain.thenault@logilab.fr
parents: 1181
diff changeset
   196
<option value="text/cubicweb-page-template">text/cubicweb-page-template</option>
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   197
<option selected="selected" value="text/html">text/html</option>
10012
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 10006
diff changeset
   198
<option value="text/markdown">text/markdown</option>
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   199
<option value="text/plain">text/plain</option>
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   200
<option value="text/rest">text/rest</option>
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   201
</select><textarea cols="80" id="description-subject:%(eid)s" name="description-subject:%(eid)s" onkeyup="autogrow(this)" rows="2" tabindex="2"></textarea>''')
1111
bcb81e7c41bc fix test: form_add_entity_hiddens *must* be called before build context, resulting in slightly different outputs...
sylvain.thenault@logilab.fr
parents: 1074
diff changeset
   202
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   203
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   204
    def test_richtextfield_2(self):
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   205
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   206
            req.use_fckeditor = lambda: True
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   207
            self._test_richtextfield(req, '<input name="description_format-subject:%(eid)s" type="hidden" value="text/html" /><textarea cols="80" cubicweb:type="wysiwyg" id="description-subject:%(eid)s" name="description-subject:%(eid)s" onkeyup="autogrow(this)" rows="2" tabindex="1"></textarea>')
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   208
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   209
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   210
    def test_filefield(self):
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   211
        class FFForm(EntityFieldsForm):
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   212
            data = FileField(
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   213
                format_field=StringField(name='data_format', max_length=50,
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   214
                                         eidparam=True, role='subject'),
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   215
                encoding_field=StringField(name='data_encoding', max_length=20,
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   216
                                           eidparam=True, role='subject'),
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   217
                eidparam=True, role='subject')
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   218
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   219
            file = req.create_entity('File', data_name=u"pouet.txt", data_encoding=u'UTF-8',
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   220
                                     data=Binary('new widgets system'))
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   221
            form = FFForm(req, redirect_path='perdu.com', entity=file)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   222
            self.assertMultiLineEqual(self._render_entity_field(req, 'data', form),
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   223
                              '''<input id="data-subject:%(eid)s" name="data-subject:%(eid)s" tabindex="1" type="file" value="" />
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   224
<a href="javascript: toggleVisibility(&#39;data-subject:%(eid)s-advanced&#39;)" title="show advanced fields"><img src="http://testing.fr/cubicweb/data/puce_down.png" alt="show advanced fields"/></a>
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   225
<div id="data-subject:%(eid)s-advanced" class="hidden">
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   226
<label for="data_format-subject:%(eid)s">data_format</label><input id="data_format-subject:%(eid)s" maxlength="50" name="data_format-subject:%(eid)s" size="45" tabindex="2" type="text" value="text/plain" /><br/>
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   227
<label for="data_encoding-subject:%(eid)s">data_encoding</label><input id="data_encoding-subject:%(eid)s" maxlength="20" name="data_encoding-subject:%(eid)s" size="20" tabindex="3" type="text" value="UTF-8" /><br/>
1111
bcb81e7c41bc fix test: form_add_entity_hiddens *must* be called before build context, resulting in slightly different outputs...
sylvain.thenault@logilab.fr
parents: 1074
diff changeset
   228
</div>
bcb81e7c41bc fix test: form_add_entity_hiddens *must* be called before build context, resulting in slightly different outputs...
sylvain.thenault@logilab.fr
parents: 1074
diff changeset
   229
<br/>
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   230
<input name="data-subject__detach:%(eid)s" type="checkbox" />
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5914
diff changeset
   231
detach attached file''' % {'eid': file.eid})
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   232
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   233
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   234
    def test_editablefilefield(self):
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   235
        class EFFForm(EntityFieldsForm):
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   236
            data = EditableFileField(
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   237
                format_field=StringField('data_format', max_length=50,
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   238
                                         eidparam=True, role='subject'),
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   239
                encoding_field=StringField('data_encoding', max_length=20,
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   240
                                           eidparam=True, role='subject'),
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   241
                eidparam=True, role='subject')
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   242
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   243
            file = req.create_entity('File', data_name=u"pouet.txt", data_encoding=u'UTF-8',
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   244
                                     data=Binary('new widgets system'))
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   245
            form = EFFForm(req, redirect_path='perdu.com', entity=file)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   246
            self.assertMultiLineEqual(self._render_entity_field(req, 'data', form),
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   247
                              '''<input id="data-subject:%(eid)s" name="data-subject:%(eid)s" tabindex="1" type="file" value="" />
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   248
<a href="javascript: toggleVisibility(&#39;data-subject:%(eid)s-advanced&#39;)" title="show advanced fields"><img src="http://testing.fr/cubicweb/data/puce_down.png" alt="show advanced fields"/></a>
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   249
<div id="data-subject:%(eid)s-advanced" class="hidden">
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   250
<label for="data_format-subject:%(eid)s">data_format</label><input id="data_format-subject:%(eid)s" maxlength="50" name="data_format-subject:%(eid)s" size="45" tabindex="2" type="text" value="text/plain" /><br/>
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   251
<label for="data_encoding-subject:%(eid)s">data_encoding</label><input id="data_encoding-subject:%(eid)s" maxlength="20" name="data_encoding-subject:%(eid)s" size="20" tabindex="3" type="text" value="UTF-8" /><br/>
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   252
</div>
1111
bcb81e7c41bc fix test: form_add_entity_hiddens *must* be called before build context, resulting in slightly different outputs...
sylvain.thenault@logilab.fr
parents: 1074
diff changeset
   253
<br/>
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   254
<input name="data-subject__detach:%(eid)s" type="checkbox" />
1111
bcb81e7c41bc fix test: form_add_entity_hiddens *must* be called before build context, resulting in slightly different outputs...
sylvain.thenault@logilab.fr
parents: 1074
diff changeset
   255
detach attached file
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   256
<p><b>You can either submit a new file using the browse button above, or choose to remove already uploaded file by checking the "detach attached file" check-box, or edit file content online with the widget below.</b></p>
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   257
<textarea cols="80" name="data-subject:%(eid)s" onkeyup="autogrow(this)" rows="3" tabindex="4">new widgets system</textarea>''' % {'eid': file.eid})
1111
bcb81e7c41bc fix test: form_add_entity_hiddens *must* be called before build context, resulting in slightly different outputs...
sylvain.thenault@logilab.fr
parents: 1074
diff changeset
   258
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   259
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   260
    def test_passwordfield(self):
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   261
        class PFForm(EntityFieldsForm):
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   262
            upassword = PasswordField(eidparam=True, role='subject')
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   263
        with self.admin_access.web_request() as req:
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   264
            form = PFForm(req, redirect_path='perdu.com', entity=req.user)
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   265
            self.assertMultiLineEqual(self._render_entity_field(req, 'upassword', form),
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   266
                                  '''<input id="upassword-subject:%(eid)s" name="upassword-subject:%(eid)s" tabindex="1" type="password" value="" />
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   267
<br/>
4678
45661175f1da [test] no more __cubicweb_internal_field__ value displayed on password widget
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4536
diff changeset
   268
<input name="upassword-subject-confirm:%(eid)s" tabindex="1" type="password" value="" />
2996
866a2c135c33 B #345282 xhtml requires to use &#160; instead of &nbsp;
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2755
diff changeset
   269
&#160;
9646
0e245d071c19 [web/test] port unittest_form to RepoAccess API
Julien Cristau <julien.cristau@logilab.fr>
parents: 9377
diff changeset
   270
<span class="emphasis">confirm password</span>''' % {'eid': req.user.eid})
1057
6636c75c4aa9 actual fields test, though it's still to early for form tests
sylvain.thenault@logilab.fr
parents: 1052
diff changeset
   271
1570
5c40d9fb4e8d stop using card in test, update form tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   272
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   273
    # def test_datefield(self):
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   274
    #     class DFForm(EntityFieldsForm):
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   275
    #         creation_date = DateTimeField(widget=Input)
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   276
    #     form = DFForm(self.req, entity=self.entity)
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   277
    #     init, cur = (fromstring(self._render_entity_field(attr, form)).get('value')
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   278
    #                  for attr in ('edits-creation_date', 'creation_date'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5914
diff changeset
   279
    #     self.assertEqual(init, cur)
2145
529867c301fc add datetime form test
Florent <florent@secondweb.fr>
parents: 2005
diff changeset
   280
845
6103d0f55a0b simple tags
sylvain.thenault@logilab.fr
parents:
diff changeset
   281
if __name__ == '__main__':
6103d0f55a0b simple tags
sylvain.thenault@logilab.fr
parents:
diff changeset
   282
    unittest_main()