import unittest import json import webtest from cornice import Service from pyramid.config import Configurator from wsme.types import text, Base, HostRequest from wsmeext.cornice import signature class User(Base): id = int name = text users = Service(name='users', path='/users') @users.get() @signature([User]) def users_get(): return [User(id=1, name='first')] @users.post() @signature(User, body=User) def users_create(data): data.id = 2 return data needrequest = Service(name='needrequest', path='/needrequest') @needrequest.get() @signature(bool, HostRequest) def needrequest_get(request): assert request.path == '/needrequest', request.path return True def make_app(): config = Configurator() config.include("cornice") config.include("wsmeext.cornice") config.scan("test_cornice") return config.make_wsgi_app() class WSMECorniceTestCase(unittest.TestCase): def setUp(self): self.app = webtest.TestApp(make_app()) def test_get_json_list(self): resp = self.app.get('/users') self.assertEquals( resp.body, '[{"id": 1, "name": "first"}]' ) def test_get_xml_list(self): resp = self.app.get('/users', headers={"Accept": "text/xml"}) self.assertEquals( resp.body, '1first' ) def test_post_json_data(self): data = json.dumps({"name": "new"}) resp = self.app.post( '/users', data, headers={"Content-Type": "application/json"} ) self.assertEquals( resp.body, '{"id": 2, "name": "new"}' ) def test_post_xml_data(self): data = 'new' resp = self.app.post( '/users', data, headers={"Content-Type": "text/xml"} ) self.assertEquals( resp.body, '2new' ) def test_pass_request(self): resp = self.app.get('/needrequest') assert resp.json is True