Skip to content

Commit

Permalink
Improve errors detection in PUT and GET
Browse files Browse the repository at this point in the history
  • Loading branch information
amol- committed May 26, 2013
1 parent 2da7eaf commit 309e4aa
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 3 deletions.
37 changes: 35 additions & 2 deletions tests/test_rest_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,24 @@ def test_put_validation(self):
movie = DBSession.query(Movie).first()
assert movie.title == 'Movie Test'

def test_put_missing(self):
result = self.app.post('/movies.json', params={'title':'Movie Test'})
movie = result.json['value']
movie_id = movie['movie_id'] + 100

result = self.app.put('/movies/%s.json' % movie_id, status=404,
params={'title':'New Title'})
result = result.json
assert result['value'] is None

def test_put_invalid(self):
movie_id = 'A'

result = self.app.put('/movies/%s.json' % movie_id, status=400,
params={'title':'New Title'})
result = result.json
assert result['movie_id'] != None

def test_put_relationship(self):
result = self.app.post('/movies.json', params={'title':'Movie Test'})
movie = result.json['value']
Expand Down Expand Up @@ -133,7 +151,7 @@ def setUp(self):
map(DBSession.add, actors)

DBSession.add(Movie(title='First Movie', genre=genre, actors=actors[:2]))
DBSession.add(Movie(title='Second Movie', genre=genre, actors=actors[:2]))
DBSession.add(Movie(title='Second Movie', genre=genre))
DBSession.add(Movie(title='Third Movie', genre=genre))
DBSession.add(Movie(title='Fourth Movie', genre=genre))
DBSession.add(Movie(title='Fifth Movie'))
Expand Down Expand Up @@ -181,6 +199,21 @@ def test_get_one(self):
assert result['value']['title'] == movie.title
assert result['value']['movie_id'] == movie.movie_id

def test_get_missing(self):
movie = DBSession.query(Movie).order_by(Movie.movie_id.desc()).first()
movie_id = movie.movie_id + 100

result = self.app.get('/movies/%s.json' % movie_id, status=404)
result = result.json
assert result['value'] is None

def test_get_invalid(self):
movie_id = 'A'

result = self.app.get('/movies/%s.json' % movie_id, status=404)
result = result.json
assert result['value'] is None

def test_get_one___json__(self):
actor = DBSession.query(Actor).filter(Actor.movie_id!=None).first()
movie_title = actor.movie.title
Expand Down Expand Up @@ -218,7 +251,7 @@ def setUp(self):
map(DBSession.add, actors)

DBSession.add(Movie(title='First Movie', genre=genre, actors=actors[:2]))
DBSession.add(Movie(title='Second Movie', genre=genre, actors=actors[:2]))
DBSession.add(Movie(title='Second Movie', genre=genre))
DBSession.add(Movie(title='Third Movie', genre=genre))
DBSession.add(Movie(title='Fourth Movie', genre=genre))
DBSession.add(Movie(title='Fifth Movie'))
Expand Down
10 changes: 9 additions & 1 deletion tgext/crud/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,8 @@ def get_one(self, *args, **kw):

if tg.request.response_type == 'application/json':
obj = self.provider.get_obj(self.model, kw)
if obj is None:
tg.response.status_code = 404
return dict(model=self.model.__name__,
value=self._dictify(obj))

Expand Down Expand Up @@ -362,8 +364,14 @@ def put(self, *args, **kw):
if value is None or value == '':
omit_fields.append(remembered_value)

obj = self.provider.update(self.model, params=kw, omit_fields=omit_fields)
obj = self.provider.get_obj(self.model, kw)

if obj is not None:
obj = self.provider.update(self.model, params=kw, omit_fields=omit_fields)

if tg.request.response_type == 'application/json':
if obj is None:
tg.response.status_code = 404
return dict(model=self.model.__name__,
value=self._dictify(obj))

Expand Down

0 comments on commit 309e4aa

Please sign in to comment.