Esempio n. 1
0
    def test_submit_by_name(self):
        f = Form('login')
        f.add_text('username', 'User Name')
        f.add_submit('submit')
        post = {
            'login-submit-flag': 'submitted',
            'username': '******',
            'submit': 'Submit'
        }
        f.set_submitted(post)
        assert f.get_values() == {
            'username': '******',
            'login-submit-flag': 'submitted',
            'submit': 'Submit'
        }

        f = Form('login')
        f.add_text('username', 'User Name', name="unfield")
        f.add_submit('submit', name="submitbtn")
        post = {
            'login-submit-flag': 'submitted',
            'unfield': 'test2',
            'submitbtn': 'Submit'
        }
        f.set_submitted(post)
        self.assertEqual(
            f.get_values(), {
                'unfield': 'test2',
                'login-submit-flag': 'submitted',
                'submitbtn': 'Submit'
            })
Esempio n. 2
0
 def testForm1(self):
     """
     most basic usage of a form
     """
     form = Form('login')
     form.add_text('username', 'User Name')
     self.assertEqual(self.render_html,
                      str(form.elements.username.render()))
Esempio n. 3
0
 def test_dup_fields(self):
     f = Form('f')
     f.add_text('f')
     try:
         f.add_text('f')
         self.fail('should not be able to add elements with the same id')
     except ValueError:
         pass
Esempio n. 4
0
 def test_exception_on_static_submit(self):
     f1 = Form('login1', static=True)
     f1.add_text('field')
     post = {'login1-submit-flag': 'submitted', 'field': 'foo'}
     try:
         f1.set_submitted(post)
         assert False, 'expected exception for submitting to static form'
     except ProgrammingError:
         pass
Esempio n. 5
0
 def test_default(self):
     f = Form('login')
     f.add_text('username', 'User Name')
     f.add_file('file')
     filesub = DumbObject(filename='text.txt',
                          content_type='text/plain',
                          content_length=10)
     f.set_defaults({'username': '******', 'file': filesub})
     self.assertEqual(
         '<input class="text" id="login-username" name="username" type="text" value="test1" />',
         str(f.elements.username.render()))
Esempio n. 6
0
    def test_add_field_errors_string(self):
        form = Form('f')
        form.add_text('text1', 'Value')
        form.add_text('text2', 'Value')

        result = form.add_field_errors({
            'text1': 'Generic Error',
            'text2': 'Error'
        })
        assert result
        self.assertEqual(form.elements.text1.errors, ['Generic Error'])
        self.assertEqual(form.elements.text2.errors, ['Error'])
Esempio n. 7
0
    def test_add_field_errors_extras(self):
        # the result of calling add_field_errors() when all errors are not
        # processed should be False
        form = Form('f')
        form.add_text('text1', 'Value')
        form.add_text('text2', 'Value')

        result = form.add_field_errors({
            'text1': 'Generic Error',
            'text2': 'Error',
            'not there': 'Error'
        })
        assert result is False
Esempio n. 8
0
 def test_first_class_elements(self):
     """
     first element in form and under header should have a 'first' class
     """
     form_first_html = '<div id="user-username-row" class="text row odd first">'
     header_first_html = '<div id="user-groupname-row" class="text row even first">'
     form = Form('user')
     form.add_text('username', 'User Name')
     form.add_header('group_membership_header', 'Group Membership')
     form.add_text('groupname', 'Group')
     form_html = form.render()
     assert form_html.find(form_first_html) > -1
     assert form_html.find(header_first_html) > -1
Esempio n. 9
0
 def test_submit(self):
     f = Form('login')
     f.add_text('username', 'User Name')
     f.set_defaults({'username': '******'})
     post = {'login-submit-flag': 'submitted', 'username': '******'}
     f.set_submitted(post)
     self.assertEqual(
         '<input class="text" id="login-username" name="username" type="text" value="test2" />',
         str(f.elements.username.render()))
     assert f.get_values() == {
         'username': '******',
         'login-submit-flag': 'submitted'
     }
Esempio n. 10
0
def test_el_text():
    html = '<span class="text static" id="f-field">&nbsp;</span>'
    form = Form('f', static=True)
    el = form.add_text('field', 'Field')
    assert el() == html, el()

    form = Form('f', static=True)
    el = form.add_text('field', 'Field', maxlength=1)
    assert el() == html, el()

    html = '<span class="text static" id="f-field">one</span>'
    form = Form('f', static=True)
    el = form.add_text('field', 'Field', defaultval='one')
    assert el() == html, el()
Esempio n. 11
0
    def test_submitted_only_when_appropriate(self):
        f1 = Form('login1')
        f1.add_text('field')
        f2 = Form('login2')
        f2.add_text('field')

        post = {'login1-submit-flag': 'submitted', 'field': 'foo'}
        f1.set_submitted(post)
        assert f1.is_submitted()
        assert f1.elements.field.value == 'foo'

        f2.set_submitted(post)
        assert not f2.is_submitted()
        assert f2.elements.field.value is NotGiven
Esempio n. 12
0
    def test_add_field_errors_list(self):
        form = Form('f')
        form.add_text('text1', 'Value')
        form.add_text('text2', 'Value')

        result = form.add_field_errors({
            'text1': ['Generic Error 1', 'Generic Error 2'],
            'text2': ['Error 1', 'Error 2']
        })
        assert result
        assert len(form.elements.text1.errors) == 2
        self.assertEqual(form.elements.text1.errors,
                         ['Generic Error 1', 'Generic Error 2'])
        self.assertEqual(form.elements.text2.errors, ['Error 1', 'Error 2'])
Esempio n. 13
0
    def test_validator_element_invalid(self):
        """
            If a validator references an invalid element, then we don't let
            that exception propogate
        """
        f = Form('f')

        def validator(form):
            f.elements.f1.value

        f.add_text('f1', 'f1', maxlength=1)
        f.add_text('f2', 'f2')
        f.add_validator(validator)
        f.set_submitted({'f-submit-flag': 'submitted', 'f1': '12'})
        assert not f.is_valid()
Esempio n. 14
0
    def test_formencoding(self):
        """ensure form has correct encoding for file uploads"""

        f1 = Form('login')
        f1.add_text('username', 'User Name')
        assert "multipart/form-data" not in f1.render()

        f2 = Form('pictures')
        f2.add_file('picture', 'Picture')
        assert "multipart/form-data" in f2.render()

        # make sure this works with grouped elements
        f = Form('f')
        fg = f.add_elgroup('file-group')
        fg.add_file('picture', 'Picture')
        assert "multipart/form-data" in f.render()
Esempio n. 15
0
    def test_is_valid(self):
        f = Form('f')
        f.add_text('f')
        # wasn't submitted, so not valid
        assert not f.is_valid()
        f.set_submitted({'f-submit-flag': 'submitted'})
        assert f.is_valid()

        f = Form('f')
        f.add_text('f', required=True)
        # wasn't submitted, so not valid
        assert not f.is_valid()
        f.set_submitted({'f-submit-flag': 'submitted'})
        assert not f.is_valid()
        f.set_submitted({'f-submit-flag': 'submitted', 'f': 'foo'})
        assert f.is_valid()
Esempio n. 16
0
    def test_exception_handling(self):
        # works with an element handler
        form = Form('f')
        el = form.add_text('field', 'Field')
        el.add_handler('text exception', 'test error msg')
        assert form.handle_exception(Exception('text exception'))
        self.assertEqual(el.errors[0], 'test error msg')

        # make sure exception on second field works
        form = Form('f')
        el = form.add_text('field', 'Field')
        el.add_handler('not it', '')
        el2 = form.add_text('field2', 'Field')
        el2.add_handler('text exception', 'test error msg')
        assert form.handle_exception(Exception('text exception'))
        self.assertEqual(el2.errors[0], 'test error msg')

        # form exceptions
        f = Form('f')
        f.add_handler('text exception', 'test error msg')
        assert f.handle_exception(Exception('text exception'))
        self.assertEqual(f._errors[0], 'test error msg')

        # make sure second exception works too
        f = Form('f')
        f.add_handler('not it', '')
        f.add_handler('text exception', 'test error msg')
        assert f.handle_exception(Exception('text exception'))
        self.assertEqual(f._errors[0], 'test error msg')

        # specifying exception type
        f = Form('f')
        f.add_handler('text exception', 'test error msg', Exception)
        assert f.handle_exception(Exception('text exception'))
        self.assertEqual(f._errors[0], 'test error msg')

        # right message, wrong type
        f = Form('f')
        f.add_handler('text exception', 'test error msg', ValueError)
        assert not f.handle_exception(Exception('text exception'))
        self.assertEqual(len(f._errors), 0)

        # wrong message
        f = Form('f')
        f.add_handler('text exception', 'test error msg', Exception)
        assert not f.handle_exception(Exception('text'))
        self.assertEqual(len(f._errors), 0)
Esempio n. 17
0
    def test_all_errors(self):
        def validator(form):
            if form.elements.myfield.is_valid():
                if form.elements.myfield.value != 'foo':
                    raise ValueInvalid('My Field: must be "foo", not "%s"' %
                                       form.elements.myfield.value)

        f1 = Form('login1')
        f1.add_text('field', 'Field', required=True)
        f1.add_text('myfield', 'My Field', required=True)
        f1.add_validator(validator)

        post = {'login1-submit-flag': 'submitted', 'myfield': 'bar'}
        f1.set_submitted(post)
        assert not f1.is_valid()

        form_errors, field_errors = f1.all_errors()
        self.assertEqual(field_errors, {'Field': ['field is required']})
        self.assertEqual(form_errors, ['My Field: must be "foo", not "bar"'])

        # now make sure we can set the id as the field errors dict key if needed
        form_errors, field_errors = f1.all_errors(id_as_key=True)
        self.assertEqual(field_errors, {'field': ['field is required']})
Esempio n. 18
0
    def test_form_validators(self):
        def validator(form):
            if form.elements.myfield.is_valid():
                if form.elements.myfield.value != 'foo':
                    raise ValueInvalid('My Field: must be "foo", not "%s"' %
                                       form.elements.myfield.value)

        f = Form('f')
        f.add_text('myfield', 'My Field')
        f.add_validator(validator)
        f.set_submitted({'f-submit-flag': 'submitted', 'myfield': 'bar'})
        assert not f.is_valid()
        self.assertEqual(f._errors[0], 'My Field: must be "foo", not "bar"')
        f.set_submitted({'f-submit-flag': 'submitted', 'myfield': 'foo'})
        assert f.is_valid()
        assert len(f._errors) == 0

        # custom message
        f = Form('f')
        f.add_text('myfield', 'My Field')
        f.add_validator(validator, 'value incorrect')
        f.set_submitted({'f-submit-flag': 'submitted', 'myfield': 'bar'})
        assert not f.is_valid()
        self.assertEqual(f._errors[0], 'value incorrect')
Esempio n. 19
0
    def test_validator_recursion(self):
        """
            referencing .value from that field's validator causes a recursion
        """
        f = Form('f')

        def validator(form):
            try:
                f.elements.myfield.value
            except ElementInvalid as e:
                raise ValueInvalid(e)

        el = f.add_text('myfield', 'My Field', maxlength=1)
        el.add_processor(validator)
        f.set_submitted({'f-submit-flag': 'submitted', 'myfield': '12'})
        try:
            assert not f.is_valid()
        except RuntimeError as e:
            assert 'maximum recursion depth exceeded' in str(e), str(e)
Esempio n. 20
0
 def testForm4(self):
     form = Form('login')
     el = form.add_text('username', 'User Name')
     self.assertEqual(self.render_html,
                      str(form.elements.username.render()))
     self.assertEqual(self.render_html, str(el.render()))
Esempio n. 21
0
 def test_validator_fe_instance(self):
     form = Form('f')
     form.add_text('units', 'Units')
     form.add_validator(Int())
     assert isinstance(form._validators[0][0], Int)