Al parecer, la adición de los datos de sesión a la django.test.client.Client sin utilizar CLIENT.LOGIN() no es tan fácil.
La solución más fácil fue crear una nueva clase RequestFactory para poder crear una solicitud con el objeto de sesión de OpenID.
class RequestFactory(Client):
"""
Class that lets you create mock Request objects for use in testing.
Usage:
rf = RequestFactory()
get_request = rf.get('/hello/')
post_request = rf.post('/submit/', {'foo': 'bar'})
This class re-uses the django.test.client.Client interface, docs here:
http://www.djangoproject.com/documentation/testing/#the-test-client
Once you have a request object you can pass it to any view function,
just as if that view had been hooked up using a URLconf.
"""
def request(self, **request):
"""
Similar to parent class, but returns the request object as soon as it
has created it.
"""
environ = {
'HTTP_COOKIE': self.cookies,
'PATH_INFO': '/',
'QUERY_STRING': '',
'REQUEST_METHOD': 'GET',
'SCRIPT_NAME': '',
'SERVER_NAME': 'testserver',
'SERVER_PORT': 80,
'SERVER_PROTOCOL': 'HTTP/1.1',
}
environ.update(self.defaults)
environ.update(request)
request = WSGIRequest(environ)
handler = BaseHandler()
handler.load_middleware()
for middleware_method in handler._request_middleware:
if middleware_method(request):
raise Exception("Couldn't create request mock object - "
"request middleware returned a response")
return request
I utilizó el método RequestFactory como esto:
class UserProfileCreation(TestCase):
def test_register_should_create_UserProfile(self):
count = User.objects.count()
print 'Original Users' + str(count)
from forum.tests.request_factory import RequestFactory
rf = RequestFactory()
post_request = rf.post('/register/', {u'username': [u'john'], u'email': [u'[email protected]'], u'bnewaccount': [u'Signup'] })
from django_authopenid.util import OpenID
openid_instance = OpenID('https://www.google.com/accounts/o8/id?id=AItOxxxxxxxxxxxxxxxxxA',
1267727884,
[u'openid.op_endpoint', u'openid.claimed_id', u'openid.identity', u'openid.return_to', u'openid.response_nonce', u'openid.assoc_handle'],
)
post_request.session['openid'] = openid_instance
from django_authopenid.views import register
response = register(post_request)
print "after POST User count: " + str(User.objects.count())
self.assertEqual(response.status_code, 302)
user = User.objects.get(username ='john')
self.assertTrue(user.get_profile())