示例#1
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()
示例#2
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()
示例#3
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')
示例#4
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)
示例#5
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']})