def test_is_submit(self): f1 = Form('login') assert not f1.is_submitted() post = {'login-submit-flag': 'submitted'} f1.set_submitted(post) assert f1.is_submitted()
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' })
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
def test_blank_multiselect(self): f = Form('login') options = [(1, 'one'), (2, 'two')] el = f.add_mselect('numlist', options, 'Disabled', defaultval=2) assert 'selected="selected"' in el() post = {'login-submit-flag': 'submitted'} f.set_submitted(post) assert not f.get_values()['numlist'] # should unset on re-post after a blank submit assert 'selected="selected"' not in el()
def test_blank_radio(self): f = Form('login') el1 = f.add_radio('radio1', 'Radio 1', 1, 'rgroup1', selected=True) el2 = f.add_radio('radio2', 'Radio 2', 2, 'rgroup1') assert 'checked="checked"' in el1() assert 'checked="checked"' not in el2() post = {'login-submit-flag': 'submitted'} f.set_submitted(post) assert not f.get_values()['rgroup1'] # should unset on re-post after a blank submit assert 'selected="selected"' not in el1() assert 'selected="selected"' not in el2()
def test_blank_multicheckbox(self): f = Form('login') el1 = f.add_mcheckbox('mcheck1', 'Check 1', 1, 'cgroup1', checked=True) el2 = f.add_mcheckbox('mcheck2', 'Check 2', 2, 'cgroup1') assert 'checked="checked"' in el1() assert 'checked="checked"' not in el2() post = {'login-submit-flag': 'submitted'} f.set_submitted(post) assert not f.get_values()['cgroup1'] # should unset on re-post after a blank submit assert 'checked="checked"' not in el1() assert 'checked="checked"' not in el2()
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' }
def test_is_cancel(self): f1 = Form('login') f1.add_cancel('cancel', 'Cancel') assert not f1.is_cancel() # cancel button, but form is not submitted post = {'cancel': 'submitted'} f1.set_submitted(post) assert not f1.is_cancel() # now submit form post['login-submit-flag'] = 'submitted' f1.set_submitted(post) assert f1.is_cancel()
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
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()
def test_blank_checkbox(self): html = L( '<input checked="checked" class="checkbox" id="login-disabled" name="disabled" ' 'type="checkbox" />') f = Form('login') el = f.add_checkbox('disabled', 'Disabled', defaultval=True) self.assertEqual(el(), html) post = {'login-submit-flag': 'submitted'} f.set_submitted(post) dvalue = f.get_values()['disabled'] assert dvalue is False # should unset on re-post after a blank submit html = L( '<input class="checkbox" id="login-disabled" name="disabled" type="checkbox" />' ) self.assertEqual(el(), html)
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)
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']})
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()
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')