def test_render_unauthorized(self):
     """
     render a resource that requires authorization, but user hasn't auth'ed
     
     Verifies:
         returns 401
     """
     api = self.twisted_web_interface
     request = HTTPRequestProxy()
     resource = FunctionResource(api, self.return_list, auth=True)
     response = resource.render(request)
     self.assertEqual(request.response_code, 401)
 def test_render_no_auth_required(self):
     """
     rendering a resource that does not require authentication
     
     Verifies:
         * response returned
     """
     api = self.twisted_web_interface
     request = HTTPRequestProxy()
     resource = FunctionResource(api, self.return_list, auth=False)
     response = resource.render(request)
     response = simplejson.loads(response)
     self.assertEqual([1,2,3], response)
 def test_render_with_args(self):
     """
     Renders a resource that requires args
     """
     api = self.twisted_web_interface
     args = [1,2,3]
     kwargs = {'a':1, 'b':2, 'c':3}
     request = HTTPRequestProxy(args={'args':[simplejson.dumps(args)], \
                                     'kwargs':[simplejson.dumps(kwargs)]})
     resource = FunctionResource(api, self.return_list, auth=False)
     response = resource.render(request)
     response = simplejson.loads(response)
     self.assertEqual([1,2,3], response)
     self.return_list.assertCalled(self, *args, **kwargs)
 def test_render_with_user(self):
     """
     render a resource that requires the session_id as an arg
     
     Verifies:
         * response is returned
     """
     api = self.twisted_web_interface
     request = HTTPRequestProxy()
     resource = FunctionResource(api, self.return_list, auth=False, include_user=True)
     response = resource.render(request)
     response = simplejson.loads(response)
     self.assertEqual([1,2,3], response)
     self.return_list.assertCalled(self, 'SESSION_ID')
 def test_render_deferred(self):
     """
     Renders a resource that returns a deferred
     
     Verifies:
         * server NOT_DONE_YET returned
         * deferred callback writes to response
     """
     self.deferred = Deferred()
     api = self.twisted_web_interface
     request = HTTPRequestProxy()
     resource = FunctionResource(api, self.return_deferred, auth=False)
     response = resource.render(request)
     
     self.assertEqual(server.NOT_DONE_YET, response)
     
     self.deferred.callback([1,2,3])
     request.finish.assertCalled(self)
     self.assertEqual([1,2,3], simplejson.loads(request.writer.getvalue()))
 def test_new_session(self):
     """
     Test request from user without session
     
     Verifies:
         * session is created
         * session structure is correct
     """
     api = self.twisted_web_interface
     request = HTTPRequestProxy()
     resource = FunctionResource(api, self.return_list)
     resource.render(request)
     
     self.assert_('SESSION_ID' in api.sessions)
     session = api.sessions['SESSION_ID']
     self.assert_('expire' in session)
     self.assert_('auth' in session)
     self.assert_('challenge' in session)
     self.assertFalse(session['auth'])
     self.assertFalse(session['challenge'])
 def test_render_error(self):
     """
     renders a resource that throws an error
     
     Verifies:
         * returns 500
         * response includes exception and stacktrace
     """
     api = self.twisted_web_interface
     request = HTTPRequestProxy()
     resource = FunctionResource(api, self.raise_exception, auth=False)
     
     with MuteStdout():
         response = resource.render(request)
     self.assertEqual(request.response_code, 500)
     
     self.assert_(isinstance(response,(str,)))
     response = simplejson.loads(response)
     self.assert_(isinstance(response, (dict,)), response)
     self.assert_('exception' in response, response)
     self.assert_('traceback' in response, response)
     self.assert_(isinstance(response['exception'], (str,)), response)
     self.assert_(isinstance(response['traceback'], (str,)), response)