cubicweb/web/test/unittest_formwidgets.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Thu, 21 Mar 2019 14:33:54 +0100
changeset 12530 9d88e1177c35
parent 11875 011730a4af73
permissions -rw-r--r--
Remove Twisted web server Twisted web server is not used anymore and has been superseded by pyramid many years ago. Furthermore, our usage is not compatible with Python 3. So we drop the "etwist" sub-package. As a consequence, "all-in-one" configuration type gets dropped as it was Twisted-specific. We resurrect it in cubicweb/pyramid/config.py by only keeping options used by the "pyramid". Similarly, we introduce a AllInOneCreateHandler in cubicweb/pyramid/pyramidctl.py that is basically the one that lived in cubicweb/etwist/twctl.py and is used to create the "all-in-one" instance. Added a TODO here about "pyramid.ini" that could be generated at the end of bootstrap() method. In cubicweb/devtools/httptest.py, CubicWebServerTC is now equivalent to CubicWebWsgiTC and the latter is dropped.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6682
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     1
# copyright 2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     3
#
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     4
# This file is part of CubicWeb.
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     5
#
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     9
# any later version.
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    10
#
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    14
# details.
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    15
#
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    18
"""unittests for cw.web.formwidgets"""
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    19
10901
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    20
from logilab.common.testlib import unittest_main, mock_object as mock
6682
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    21
10901
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    22
from cubicweb.devtools import fake
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    23
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: 8029
diff changeset
    24
from cubicweb.web import formwidgets, formfields
10901
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    25
from cubicweb.web.views.forms import FieldsForm
6682
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    26
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    27
10901
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    28
class WidgetsTC(CubicWebTC):
10596
3a7ce5c9fe35 [web/test] Use TestCase.setUpClass instead of setUpModule
Julien Cristau <julien.cristau@logilab.fr>
parents: 8665
diff changeset
    29
8029
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    30
    def test_editableurl_widget(self):
10596
3a7ce5c9fe35 [web/test] Use TestCase.setUpClass instead of setUpModule
Julien Cristau <julien.cristau@logilab.fr>
parents: 8665
diff changeset
    31
        field = formfields.guess_field(self.schema['Bookmark'], self.schema['path'])
6682
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    32
        widget = formwidgets.EditableURLWidget()
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    33
        req = fake.FakeRequest(form={'path-subjectfqs:A': 'param=value&vid=view'})
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    34
        form = mock(_cw=req, formvalues={}, edited_entity=mock(eid='A'))
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    35
        self.assertEqual(widget.process_field_data(form, field),
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    36
                         '?param=value%26vid%3Dview')
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    37
8029
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    38
    def test_bitselect_widget(self):
10596
3a7ce5c9fe35 [web/test] Use TestCase.setUpClass instead of setUpModule
Julien Cristau <julien.cristau@logilab.fr>
parents: 8665
diff changeset
    39
        field = formfields.guess_field(self.schema['CWAttribute'], self.schema['ordernum'])
8029
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    40
        field.choices = [('un', '1',), ('deux', '2',)]
11875
011730a4af73 [web] remove next_tabindex()
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
    41
        widget = formwidgets.BitSelect()
8029
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    42
        req = fake.FakeRequest(form={'ordernum-subject:A': ['1', '2']})
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    43
        form = mock(_cw=req, formvalues={}, edited_entity=mock(eid='A'),
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    44
                    form_previous_values=())
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    45
        self.assertMultiLineEqual(widget._render(form, field, None),
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    46
                             '''\
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    47
<select id="ordernum-subject:A" multiple="multiple" name="ordernum-subject:A" size="2">
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    48
<option selected="selected" value="2">deux</option>
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    49
<option selected="selected" value="1">un</option>
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    50
</select>''')
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    51
        self.assertEqual(widget.process_field_data(form, field),
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    52
                         3)
805d4e121b65 [ui lib] facet and form widget for Integer used to store binary mask. Closes #2054771
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6781
diff changeset
    53
10901
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    54
    def test_xml_escape_checkbox(self):
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    55
        class TestForm(FieldsForm):
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    56
            bool = formfields.BooleanField(ignore_req_params=True,
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    57
                choices=[('python >> others', '1')],
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    58
                widget=formwidgets.CheckBox())
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    59
        with self.admin_access.web_request() as req:
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    60
            form = TestForm(req, None)
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    61
            form.build_context()
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    62
            field = form.field_by_name('bool')
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    63
            widget = field.widget
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    64
            self.assertMultiLineEqual(widget._render(form, field, None),
11875
011730a4af73 [web] remove next_tabindex()
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
    65
                '<label><input id="bool" name="bool" '
10901
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    66
                'type="checkbox" value="1" />&#160;'
10902
41bd01ebebb4 [web] Add a <label> around choices on CheckBox and Radio form widgets
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10901
diff changeset
    67
                'python &gt;&gt; others</label>')
10901
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    68
ddeac3ecdd88 [web] xml_escape CheckBox and Radio labels (closes #7672764)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10596
diff changeset
    69
6682
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    70
if __name__ == '__main__':
bdf9424b499c test and fix #1232202: [bookmarks] broken link for startupviews
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    71
    unittest_main()