I'm looking over http://packages.python.org/web2py_utils/test_runner.html . 
 I'm trying to test my controller function "upload".  It uses an SQLFORM(). 
 The below code results in:

 test_upload (web2py_utils.test_runner.TestDefaultController) ... please 
fill out the form

The problem seems to occur during this line:

        if self.formname != self.request_vars._formname:
            status = False

in accepts()  in gluon/html.py .  I.e., the form is not "accepted".

However, it seems impossible via the test driver to properly set the 
formname in gluon/sqlhtml.py (I pasted the code segment in question below).

Is there a way to accomplish what I would like to?

------------ controller function ---------------

 @auth.requires_login()
 def upload():
     form = SQLFORM(db.mydb)
     if form.process().accepted:
         response.flash = 'form accepted'
     elif form.errors:
         response.flash = 'form has errors'
     else:
         response.flash = 'please fill out the form'
     return dict(form=form)

---------------- test driver -----------------

 import unittest
 from gluon.storage import Storage
 from gluon.tools import Auth
 
 class TestDefaultController(unittest.TestCase):
     def setUp(self):
         # recipe 
from http://packages.python.org/web2py_utils/test_runner.html
         self.env = new_env(app='myapp', controller='default')
         self.db = copy_db(self.env, db_name='db', db_link='sqlite:memory')
         # copied from the models/db.py
         global auth
         auth = Auth(self.db, hmac_key=Auth.get_or_create_key())
     def test_upload(self):
         # copied 
from http://packages.python.org/web2py_utils/test_runner.html
         set_vars(self.env, id=1, file="/tmp/foo",
                  title="test"+str(os.getpid()),
                  _formname="myapp/upload")
         exec '\n'.join("%s=self.env['%s']" % (i, i) for i in self.env)
         # auth.user trick to get past authentication issues
         auth.user = Storage(dict(id=1))
         upload()
         print response.flash

----------------- sqlhtml.py ----------------

        if self.record:
            if keyed:
                formname_id = '.'.join(str(self.record[k])
                                       for k in self.table._primarykey
                                       if hasattr(self.record,k))
                record_id = dict((k, request_vars.get(k,None)) \
                                     for k in self.table._primarykey)
            else:
                (formname_id, record_id) = (self.record[self.id_field_name],
                                            request_vars.get('id', None))
            keepvalues = True
        else:
            if keyed:
                formname_id = 'create'
                record_id = dict([(k, None) for k in 
self.table._primarykey])
            else:
                (formname_id, record_id) = ('create', None)

        if formname:
            formname = formname % dict(tablename = self.table._tablename,
                                       record_id = formname_id)

Reply via email to