2010-02-24 8 views
5

मैं परीक्षण करने के लिए है कि एक UserProfile मॉडल के रूप में एक नया उपयोगकर्ता django_authopenid में पंजीकृत है बनाई गई है कोशिश कर रहा हूँ। मैं पोस्ट करने के लिए OpenID सत्र डेटा जोड़ने के बारे में समझ में नहीं आता।आप कैसे एक Django परीक्षण ग्राहक पोस्ट करने के लिए OpenId सत्र डेटा जोड़ सकता हूँ?

class UserTestCAse(TestCase): 
    def test_register_should_create_UserProfile(self): 
    from django.test.client import Client 
    c = Client() 
    response = c.post('/account/register/', {u'username': [u'john'], u'email': [u'[email protected]'], u'bnewaccount': [u'Signup']},) 

    self.assertEqual(response.status_code, 302) 

    user = User.objects.get(username ='john') 
    self.assertTrue(user.get_profile()) 

उत्तर

2

जाहिर है, (Client.login का उपयोग किए बिना django.test.client.Client के लिए सत्र डेटा जोड़ने) इतना आसान नहीं है।

सबसे आसान समाधान तो मैं OpenID सत्र वस्तु के साथ एक अनुरोध बना सकते हैं एक नया RequestFactory वर्ग बनाने के लिए किया गया था।

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()) 
:

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 

मैं इस तरह RequestFactory विधि का इस्तेमाल किया

संबंधित मुद्दे

 संबंधित मुद्दे