Skip to content

Commit

Permalink
add additional content-type test; isolate database interaction to inc…
Browse files Browse the repository at this point in the history
…rease modularity
  • Loading branch information
jeffknupp committed Aug 23, 2013
1 parent b27e022 commit ae8ea42
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 16 deletions.
26 changes: 10 additions & 16 deletions sandman/sandman.py
Expand Up @@ -25,6 +25,11 @@ def _get_session():
session = g._session = db.session()
return session

def _perform_database_action(action, *args):
session = _get_session()
getattr(session, action)(*args)
session.commit()

def _get_acceptable_response_type():
"""Return the mimetype for this request."""
if 'Accept' not in request.headers:
Expand Down Expand Up @@ -246,9 +251,7 @@ def update_resource(resource, request):
"""
resource.from_dict(get_resource_data(request))
session = _get_session()
session.merge(resource)
session.commit()
_perform_database_action('merge', resource)
return no_content_response()


Expand All @@ -271,7 +274,6 @@ def patch_resource(collection, key):
:rtype: :class:`flask.Response`
"""
session = _get_session()
cls = endpoint_class(collection)

try:
Expand All @@ -285,8 +287,7 @@ def patch_resource(collection, key):
resource = cls()
resource.from_dict(get_resource_data(request))
setattr(resource, resource.primary_key(), key)
session.add(resource)
session.commit()
_perform_database_action('add', resource)
return resource_created_response(resource)
else:
return update_resource(resource, request)
Expand All @@ -305,10 +306,8 @@ def put_resource(collection, key):
_validate(endpoint_class(collection), request.method, resource)

resource.replace(get_resource_data(request))
session = _get_session()
session.add(resource)
try:
session.commit()
_perform_database_action('add', resource)
except IntegrityError as exception:
raise InvalidAPIUsage(422, FORWARDED_EXCEPTION_MESSAGE.format(exception.message))
return no_content_response()
Expand All @@ -328,9 +327,7 @@ def post_resource(collection):

_validate(cls, request.method, resource)

session = _get_session()
session.add(resource)
session.commit()
_perform_database_action('add', resource)
return resource_created_response(resource)

@app.route('/<collection>/<key>', methods=['DELETE'])
Expand All @@ -349,15 +346,12 @@ def delete_resource(collection, key):

_validate(cls, request.method, resource)

session = _get_session()
try:
session.delete(resource)
session.commit()
_perform_database_action('delete', resource)
except IntegrityError as exception:
raise InvalidAPIUsage(422, FORWARDED_EXCEPTION_MESSAGE.format(exception.message))
return no_content_response()


@app.route('/<collection>/<key>', methods=['GET'])
def get_resource(collection, key):
"""Return the appropriate *Response* for retrieving a single resource
Expand Down
13 changes: 13 additions & 0 deletions sandman/test/test_sandman.py
Expand Up @@ -328,6 +328,19 @@ def test_post_unsupported_accept_type(self):
data={'Foo': 'bar'})
assert response.status_code == 415

def test_put_unknown_resource_form_data(self):
"""Test HTTP PUTing a resource that doesn't exist. Should give 404."""
response = self.app.put('/tracks/99999',
data={'Name': 'Some New Album',
'AlbumId': 1,
'GenreId': 1,
'MediaTypeId': 1,
'Milliseconds': 343719,
'TrackId': 99999,
'UnitPrice': 0.99,})
assert response.status_code == 404



class TestSandmanAdmin(TestSandmanBase):
"""Test the admin GUI functionality."""
Expand Down

0 comments on commit ae8ea42

Please sign in to comment.