def test_update_forbidden(self): from papyrus.protocol import Protocol from pyramid.testing import DummyRequest engine = self._get_engine() Session = self._get_session(engine) MappedClass = self._get_mapped_class() proto = Protocol(Session, MappedClass, "geom", readonly=True) # we need an actual Request object here, for body to do its job request = DummyRequest({}) request.method = 'PUT' request.body = '{"type": "Feature", "id": 1, "properties": {"text": "foo"}, "geometry": {"type": "Point", "coordinates": [45, 5]}}' # NOQA response = proto.update(request, 1) self.assertTrue(response.headers.get('Allow') == "GET, HEAD") self.assertEqual(response.status_int, 405)
def test_update_forbidden(self): from papyrus.protocol import Protocol from pyramid.testing import DummyRequest engine = self._get_engine() Session = self._get_session(engine) MappedClass = self._get_mapped_class() proto = Protocol(Session, MappedClass, "geom", readonly=True) # we need an actual Request object here, for body to do its job request = DummyRequest({}) request.method = 'PUT' request.body = '{"type": "Feature", "id": 1, "properties": {"text": "foo"}, "geometry": {"type": "Point", "coordinates": [45, 5]}}' response = proto.update(request, 1) self.assertTrue(response.headers.get('Allow') == "GET, HEAD") self.assertEqual(response.status_int, 405)
def test_update_badrequest(self): from papyrus.protocol import Protocol from pyramid.testing import DummyRequest # a mock session specific to this test class MockSession(object): def query(self, mapped_class): return {'a': {}} proto = Protocol(MockSession, self._get_mapped_class(), "geom") # we need an actual Request object here, for body to do its job request = DummyRequest({}) request.method = 'PUT' request.body = '{"type": "Point", "coordinates": [45, 5]}' response = proto.update(request, 'a') self.assertEqual(response.status_int, 400)
def test_update_notfound(self): from papyrus.protocol import Protocol from pyramid.testing import DummyRequest MappedClass = self._get_mapped_class() # a mock session specific to this test class MockSession(object): def query(self, mapped_class): return {} proto = Protocol(MockSession, MappedClass, "geom") # we need an actual Request object here, for body to do its job request = DummyRequest({}) request.method = 'PUT' request.body = '{"type": "Feature", "id": 1, "properties": {"text": "foo"}, "geometry": {"type": "Point", "coordinates": [45, 5]}}' # NOQA response = proto.update(request, 1) self.assertEqual(response.status_int, 404)
def test_update(self): from papyrus.protocol import Protocol from geojson import Feature from pyramid.testing import DummyRequest from pyramid.response import Response from geoalchemy2.elements import WKBElement MappedClass = self._get_mapped_class() # a mock session specific to this test class MockSession(object): def query(self, mapped_class): return {'a': MappedClass(Feature(id='a'))} def flush(self): pass # a before_update callback def before_update(request, feature, obj): request._log = dict(feature=feature, obj=obj) proto = Protocol(MockSession, MappedClass, "geom", before_update=before_update) # we need an actual Request object here, for body to do its job request = DummyRequest({}) request.method = 'PUT' request.body = '{"type": "Feature", "id": "a", "properties": {"text": "foo"}, "geometry": {"type": "Point", "coordinates": [45, 5]}}' obj = proto.update(request, "a") self.assertTrue(isinstance(obj, MappedClass)) self.assertTrue(isinstance(obj.geom, WKBElement)) self.assertEqual(obj.text, "foo") # test before_update self.assertTrue(hasattr(request, '_log')) self.assertEqual(request._log["feature"].id, 'a') self.assertEqual(request._log["feature"].properties['text'], 'foo') self.assertTrue(isinstance(request._log["obj"], MappedClass)) # test response status self.assertEqual(request.response.status_int, 201)
def test_update(self): from papyrus.protocol import Protocol from geojson import Feature from pyramid.request import Request from pyramid.response import Response from geoalchemy import WKBSpatialElement MappedClass = self._get_mapped_class() # a mock session specific to this test class MockSession(object): def query(self, mapped_class): return {'a': MappedClass(Feature(id='a'))} def flush(self): pass # a before_update callback def before_update(request, feature, obj): request._log = dict(feature=feature, obj=obj) proto = Protocol(MockSession, MappedClass, "geom", before_update=before_update) # we need an actual Request object here, for body to do its job request = Request({}) request.method = 'PUT' request.body = '{"type": "Feature", "id": "a", "properties": {"text": "foo"}, "geometry": {"type": "Point", "coordinates": [45, 5]}}' obj = proto.update(request, "a") self.assertEqual(len(request.response_callbacks), 1) self.assertTrue(isinstance(obj, MappedClass)) self.assertTrue(isinstance(obj.geom, WKBSpatialElement)) self.assertEqual(obj.text, "foo") # test before_update self.assertTrue(hasattr(request, '_log')) self.assertEqual(request._log["feature"].id, 'a') self.assertEqual(request._log["feature"].properties['text'], 'foo') self.assertTrue(isinstance(request._log["obj"], MappedClass)) # test response status response = Response(status_int=400) request._process_response_callbacks(response) self.assertEqual(response.status_int, 201)
def test_update_notfound(self): from papyrus.protocol import Protocol from pyramid.request import Request from StringIO import StringIO engine = self._get_engine() Session = self._get_session(engine) MappedClass = self._get_mapped_class() # a mock session specific to this test class MockSession(object): def query(self, mapped_class): return {} proto = Protocol(MockSession, MappedClass, "geom") # we need an actual Request object here, for body_file to do its job request = Request({}) request.body_file = StringIO('{"type": "Feature", "id": 1, "properties": {"text": "foo"}, "geometry": {"type": "Point", "coordinates": [45, 5]}}') response = proto.update(request, 1) self.assertEqual(response.status_int, 404)