Ticket #1621: compoundformfieldtest.patch

File compoundformfieldtest.patch, 5.8 kB (added by plewis, 2 years ago)
  • turbogears/widgets/tests/test_compoundformfield.py

    old new  
     1from turbogears import controllers 
     2from turbogears import expose 
     3from turbogears import widgets  
     4from turbogears import validators 
     5from turbogears import validate 
     6from turbogears import  error_handler 
     7from turbogears import testutil 
     8import cherrypy 
     9 
     10class MySchema(validators.Schema): 
     11        number = validators.Int(not_empty=True) 
     12        text = validators.String(not_empty=True)     
     13 
     14class MyWidget(widgets.CompoundFormField): 
     15    name = "mywidget" 
     16    fields = [widgets.TextField(name='number'),  
     17                widgets.TextField(name='text')] 
     18    validator = MySchema() 
     19    template = """ 
     20    <span xmlns:py="http://purl.org/kid/ns#"> 
     21        <div py:for="field in fields" py:strip="True"> 
     22            <span py:replace="field.display(value_for(field),  
     23                **params_for(field))"/> 
     24        </div> 
     25    </span> 
     26    """ 
     27 
     28myform = widgets.TableForm(fields=[ MyWidget()]) 
     29     
     30class MyRoot(controllers.RootController): 
     31     
     32    def __init__(self): 
     33        super(MyRoot, self).__init__() 
     34        self.errors = False 
     35        self.number = None 
     36        self.text = None 
     37     
     38    def index(self, mywidget={}, tg_errors=None): 
     39        if tg_errors: 
     40            self.errors = True 
     41        print tg_errors 
     42        self.number = mywidget.get('number') 
     43        self.text = mywidget.get('text') 
     44        print self.number, self.text 
     45        return dict(form=myform) 
     46    index = expose(html="turbogears.tests.form")(index) 
     47         
     48    def testform(self, **kw): 
     49        mywidget = kw['mywidget'] 
     50        if hasattr(mywidget, 'get'): 
     51            self.number = mywidget.get('number') 
     52            self.text = mywidget.get('text') 
     53        return dict(mywidget=mywidget, kw=kw) 
     54    testform = validate(form=myform)(testform) 
     55    testform = error_handler(index)(testform) 
     56    testform = expose()(testform) 
     57     
     58    def testform_explicitparams(self, mywidget={}, **kw): 
     59        if hasattr(mywidget, 'get'): 
     60                self.number = mywidget.get('number') 
     61                self.text = mywidget.get('text') 
     62        return dict(mywidget=mywidget, kw=kw) 
     63    testform_explicitparams = validate(form=myform)(testform_explicitparams) 
     64    testform_explicitparams = error_handler(index)(testform_explicitparams) 
     65    testform_explicitparams = expose()(testform_explicitparams) 
     66     
     67    def testform_param_uses_none(self, mywidget=None, **kw): 
     68        if hasattr(mywidget, 'get'): 
     69                self.number = mywidget.get('number') 
     70                self.text = mywidget.get('text') 
     71        return dict(mywidget=mywidget, kw=kw) 
     72    testform_param_uses_none = validate(form=myform)(testform_param_uses_none) 
     73    testform_param_uses_none = error_handler(index)(testform_param_uses_none) 
     74    testform_param_uses_none = expose()(testform_param_uses_none) 
     75         
     76    def testform_nodefaultparam(self, mywidget, **kw): 
     77        if hasattr(mywidget, 'get'): 
     78                self.number = mywidget.get('number') 
     79                self.text = mywidget.get('text') 
     80        return dict(mywidget=mywidget, kw=kw) 
     81    testform_nodefaultparam = validate(form=myform)(testform_nodefaultparam) 
     82    testform_nodefaultparam = error_handler(index)(testform_nodefaultparam) 
     83    testform_nodefaultparam = expose()(testform_nodefaultparam) 
     84     
     85def create_request(url): 
     86    root = MyRoot() 
     87    cherrypy.root = root 
     88    testutil.createRequest(url) 
     89    return root 
     90 
     91# This tests that a valid form properly validates         
     92def test_cffwidget_allgood(): 
     93    root = create_request('/testform?mywidget.number=1&mywidget.text=foo') 
     94    assert root.errors == False 
     95    assert root.number == 1, '"' + str(root.number) + '"' 
     96    assert root.text == 'foo' 
     97     
     98# The rest of these tests are to test that an invalid form will will not 
     99# validate properly, but gets redirected to the proper error handler 
     100def test_cffwidget_missingelement(): 
     101    root = create_request('/testform?mywidget.number=1') 
     102    assert root.errors == True 
     103    assert root.number == '1' 
     104    assert root.text == None 
     105     
     106def test_cffwidget_missingdata(): 
     107    root = create_request('/testform?mywidget.number=1&mywidget.text=') 
     108    assert root.errors == True 
     109    assert root.number == '1' 
     110    assert root.text == '' 
     111     
     112def test_cffwidget_invalidelement(): 
     113    root = create_request('/testform?mywidget.number=foo&mywidget.text=bar') 
     114    assert root.errors == True 
     115    assert root.number == 'foo' 
     116    assert root.text == 'bar' 
     117     
     118def test_cffwidget_allmissing(): 
     119    root = create_request('/testform') 
     120    assert root.errors == True, 'Expected a validation error to be raised,'+\ 
     121                                ' but none was.' 
     122    assert root.number == None 
     123    assert root.text == None 
     124     
     125def test_cffwidget_allmissing_explicitparams(): 
     126    root = create_request('/testform_explicitparams') 
     127    assert root.errors == True, 'Expected a validation error to be raised, '+\ 
     128                                'but none was.' 
     129    assert root.number == None 
     130    assert root.text == None 
     131     
     132def test_cffwidget_allmissing_usesnone(): 
     133    root = create_request('/testform_param_uses_none') 
     134    assert root.errors == True, 'Expected a validation error to be raised, '+\ 
     135                                'but none was.' 
     136    assert root.number == None 
     137    assert root.text == None 
     138 
     139def test_cffwidget_allmissing_nodefaultparam(): 
     140    root = create_request('/testform_nodefaultparam') 
     141    assert root.errors == True, 'Expected a validation error to be raised, '+\ 
     142                                'but none was.' 
     143    assert root.number == None 
     144    assert root.text == None 
     145