def test_headers(self): """make sure headers don't persist between class instantiations""" r = Response() r.headers["foo"] = "bar" self.assertEqual("bar", r.headers["foo"]) self.assertEqual(1, len(r.headers)) r = Response() self.assertFalse("foo" in r.headers) self.assertEqual(0, len(r.headers))
def test_body_json_error(self): """I was originally going to have the body method smother the error, but after thinking about it a little more, I think it is better to bubble up the error and rely on the user to handle it in their code""" class Foo(object): pass b = {'foo': Foo()} r = Response() r.headers['Content-Type'] = 'application/json' r.body = b with self.assertRaises(TypeError): rb = r.body
def test_code(self): r = Response() self.assertEqual(204, r.code) r.body = "this is the body" self.assertEqual(200, r.code) r.code = 404 self.assertEqual(404, r.code) r.body = "this is the body 2" self.assertEqual(404, r.code) r.body = None self.assertEqual(404, r.code) # now let's test defaults del (r._code) self.assertEqual(204, r.code) r.body = '' self.assertEqual(200, r.code) r.body = {} self.assertEqual(200, r.code)
def test_cors(self): class Cors(Controller): def POST(self): pass res = Response() req = Request() c = Cors(req, res) self.assertTrue(c.OPTIONS) self.assertFalse('Access-Control-Allow-Origin' in c.response.headers) req.set_header('Origin', 'http://example.com') c = Cors(req, res) self.assertEqual(req.get_header('Origin'), c.response.get_header('Access-Control-Allow-Origin')) req.set_header('Access-Control-Request-Method', 'POST') req.set_header('Access-Control-Request-Headers', 'xone, xtwo') c = Cors(req, res) c.OPTIONS() self.assertEqual(req.get_header('Origin'), c.response.get_header('Access-Control-Allow-Origin')) self.assertEqual(req.get_header('Access-Control-Request-Method'), c.response.get_header('Access-Control-Allow-Methods')) self.assertEqual(req.get_header('Access-Control-Request-Headers'), c.response.get_header('Access-Control-Allow-Headers')) c = Cors(req, res) c.POST() self.assertEqual(req.get_header('Origin'), c.response.get_header('Access-Control-Allow-Origin'))
def test_code(self): r = Response() self.assertEqual(204, r.code) r.body = "this is the body" self.assertEqual(200, r.code) r.code = 404 self.assertEqual(404, r.code) r.body = "this is the body 2" self.assertEqual(404, r.code) r.body = None self.assertEqual(404, r.code) # now let's test defaults del(r._code) self.assertEqual(204, r.code) r.body = '' self.assertEqual(200, r.code) r.body = {} self.assertEqual(200, r.code)
def test_status(self): r = Response() for code, status in BaseHTTPRequestHandler.responses.items(): r.code = code self.assertEqual(status[0], r.status) r.code = None r.status = None r = Response() r.code = 1000 self.assertEqual("UNKNOWN", r.status)
def test_body_file(self): r = Response() self.assertFalse("Content-Type" in r.headers) self.assertFalse("Content-Length" in r.headers) path = testdata.create_file("foo.jpg", "12345") with path.open() as fp: r.body = fp mt = r.headers["Content-Type"] fs = r.headers["Content-Length"] self.assertEqual("image/jpeg", mt) self.assertEqual(5, int(fs)) path = testdata.create_file("foo.txt", "123") with path.open() as fp: r.body = fp mt = r.headers["Content-Type"] fs = r.headers["Content-Length"] self.assertEqual("text/plain", mt) self.assertEqual(3, int(fs))
def get_http_instances(self, path="", method="GET"): req = Request() req.method = method req.path = path res = Response() return req, res
def test_body(self): b = {'foo': 'bar'} r = Response() r.headers['Content-Type'] = 'plain/text' self.assertEqual('', r.body) r.body = b self.assertEqual(String(b), r.body) r = Response() r.headers['Content-Type'] = 'application/json' r.body = b self.assertEqual(json.dumps(b), r.body) r = Response() r.headers['Content-Type'] = 'plain/text' self.assertEqual('', r.body) self.assertEqual('', r.body) # Make sure it doesn't change r.body = b self.assertEqual(String(b), r.body) r = Response() r.headers['Content-Type'] = 'application/json' r.body = {} self.assertEqual(r.body, "{}") r = Response() r.headers['Content-Type'] = 'application/json' r.body = ValueError("this is the message") r.code = 500 #self.assertEqual(r.body, '{"errno": 500, "errmsg": "this is the message"}') self.assertEqual(r.body, '{"errmsg": "this is the message"}') r.headers['Content-Type'] = '' self.assertEqual("this is the message", r.body) r = Response() r.headers['Content-Type'] = 'application/json' r.body = None self.assertEqual('', r.body) # was getting "null" when content-type was set to json
def test_body(self): b = {'foo': 'bar'} r = Response() r.headers['Content-Type'] = 'plain/text' self.assertEqual('', r.body) r.body = b self.assertEqual(str(b), r.body) r = Response() r.headers['Content-Type'] = 'application/json' r.body = b self.assertEqual(json.dumps(b), r.body) r = Response() r.headers['Content-Type'] = 'plain/text' self.assertEqual('', r.body) self.assertEqual('', r.body) # Make sure it doesn't change r.body = b self.assertEqual(str(b), r.body) r = Response() r.headers['Content-Type'] = 'application/json' r.body = {} self.assertEqual(r.body, "{}") r = Response() r.headers['Content-Type'] = 'application/json' r.body = ValueError("this is the message") r.code = 500 #self.assertEqual(r.body, '{"errno": 500, "errmsg": "this is the message"}') self.assertEqual(r.body, '{"errmsg": "this is the message"}') r.headers['Content-Type'] = '' self.assertEqual(r.body, "this is the message") r = Response() r.headers['Content-Type'] = 'application/json' r.body = None self.assertEqual( '', r.body) # was getting "null" when content-type was set to json