#2243: Regression: SQLAlchemy is not properly set up in test environments
------------------------+---------------------------------------------------
Reporter: Gustavo | Owner:
Type: defect | Status: new
Priority: highest | Milestone: 2.0rc1
Component: TurboGears | Version: trunk
Severity: blocker | Keywords:
------------------------+---------------------------------------------------
To reproduce the bug, copy/paste the following method of !RootController:
{{{
@expose('authproj.templates.index')
def show_email(self, userid):
user = model.User.by_user_name(userid)
flash('The email address is: %s' % user.email_address)
return dict(page='email')
}}}
Next, test it with the following code:
{{{
def test_email(self):
# Adding the user:
manager = User(user_name=u'manager',
email_address=u'[email protected]')
DBSession.add(manager)
DBSession.flush()
# Checking that it works:
resp = self.app.get('/show_email/manager', status=200)
assert "The email address is: [email protected]" in
resp.body, resp.body
}}}
The result?
{{{
ERROR:
authproj.tests.functional.test_authentication.TestAuthentication.test_email
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/nose-0.10.4-py2.6.egg/nose/case.py", line 182, in runTest
self.test(*self.arg)
File
"/home/gustavo/Projeti/TurboGears/FakeProjects/authproj/authproj/tests/functional/test_authentication.py",
line 14, in test_email
resp = self.app.get('/show_email/manager', status=200)
File "build/bdist.linux-i686/egg/webtest/__init__.py", line 148, in get
File "build/bdist.linux-i686/egg/webtest/__init__.py", line 306, in
do_request
File "build/bdist.linux-i686/egg/webob/__init__.py", line 1321, in
get_response
File "build/bdist.linux-i686/egg/webob/__init__.py", line 1293, in
call_application
File "build/bdist.linux-i686/egg/webtest/lint.py", line 170, in lint_app
iterator = application(environ, start_response_wrapper)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Paste-1.7.2-py2.6.egg/paste/cascade.py", line 130, in __call__
return self.apps[-1](environ, start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Paste-1.7.2-py2.6.egg/paste/registry.py", line 350, in __call__
app_iter = self.application(environ, start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Pylons-0.9.7-py2.6.egg/pylons/middleware.py", line 201, in
__call__
self.app, environ, catch_exc_info=True)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Pylons-0.9.7-py2.6.egg/pylons/util.py", line 94, in
call_wsgi_application
app_iter = application(environ, start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/WebError-0.10.1-py2.6.egg/weberror/evalexception.py", line 235,
in __call__
return self.respond(environ, start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/WebError-0.10.1-py2.6.egg/weberror/evalexception.py", line 418,
in respond
return self.application(environ, start_response)
File "/home/gustavo/Projeti/TurboGears/TG2/tg/configuration.py", line
631, in wrapper
return app(environ, start_response)
File "/home/gustavo/Projeti/TurboGears/TG2/tg/configuration.py", line
534, in remover
return app(environ, start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/repoze.tm2-1.0a3-py2.6.egg/repoze/tm/__init__.py", line 19, in
__call__
result = self.application(environ, save_status_and_headers)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/repoze.who-1.0.10-py2.6.egg/repoze/who/middleware.py", line 107,
in __call__
app_iter = app(environ, wrapper.wrap_start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/ToscaWidgets-0.9.5dev_20081026-py2.6.egg/tw/core/middleware.py",
line 36, in __call__
return self.wsgi_app(environ, start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/ToscaWidgets-0.9.5dev_20081026-py2.6.egg/tw/core/middleware.py",
line 59, in wsgi_app
resp = req.get_response(self.application)
File "build/bdist.linux-i686/egg/webob/__init__.py", line 1325, in
get_response
File "build/bdist.linux-i686/egg/webob/__init__.py", line 1293, in
call_application
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/ToscaWidgets-0.9.5dev_20081026-py2.6.egg/tw/core/resource_injector.py",
line 67, in _injector
resp = req.get_response(app)
File "build/bdist.linux-i686/egg/webob/__init__.py", line 1325, in
get_response
File "build/bdist.linux-i686/egg/webob/__init__.py", line 1293, in
call_application
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Beaker-1.2.2-py2.6.egg/beaker/middleware.py", line 81, in
__call__
return self.app(environ, start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Beaker-1.2.2-py2.6.egg/beaker/middleware.py", line 160, in
__call__
return self.wrap_app(environ, session_start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Routes-1.10.3-py2.6.egg/routes/middleware.py", line 130, in
__call__
response = self.app(environ, start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Pylons-0.9.7-py2.6.egg/pylons/wsgiapp.py", line 125, in __call__
response = self.dispatch(controller, environ, start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Pylons-0.9.7-py2.6.egg/pylons/wsgiapp.py", line 324, in dispatch
return controller(environ, start_response)
File
"/home/gustavo/Projeti/TurboGears/FakeProjects/authproj/authproj/lib/base.py",
line 36, in __call__
return TGController.__call__(self, environ, start_response)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Pylons-0.9.7-py2.6.egg/pylons/controllers/core.py", line 221, in
__call__
response = self._dispatch_call()
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Pylons-0.9.7-py2.6.egg/pylons/controllers/core.py", line 172, in
_dispatch_call
response = self._inspect_call(func)
File "/home/gustavo/System/Pyenvs/tg2/lib/python2.6/site-
packages/Pylons-0.9.7-py2.6.egg/pylons/controllers/core.py", line 107, in
_inspect_call
result = self._perform_call(func, args)
File "/home/gustavo/Projeti/TurboGears/TG2/tg/controllers.py", line 745,
in _perform_call
self, controller, params, remainder=remainder)
File "/home/gustavo/Projeti/TurboGears/TG2/tg/controllers.py", line 137,
in _perform_call
output = controller(*remainder, **dict(params))
File
"/home/gustavo/Projeti/TurboGears/FakeProjects/authproj/authproj/controllers/root.py",
line 66, in show_email
flash('The email address is: %s' % user.email_address)
AttributeError: 'NoneType' object has no attribute 'email_address'
}}}
This bug is also present in TG 2.0b5, when it was not necessary to add the
user manually because "paster setup-app ..." was run.
I'll also attach a test case which verifies that the same bug occurs at
the middleware level (on ingress).
--
Ticket URL: <http://trac.turbogears.org/ticket/2243>
TurboGears <http://www.turbogears.org/>
TurboGears front-to-back web development
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "TurboGears Tickets" group.
This group is read-only. No posting by normal members allowed.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/turbogears-tickets?hl=en?hl=en
-~----------~----~----~----~------~----~------~--~---