diff --git a/tests/test_rest_json.py b/tests/test_rest_json.py index a796a82..37a9867 100644 --- a/tests/test_rest_json.py +++ b/tests/test_rest_json.py @@ -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'] @@ -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')) @@ -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 @@ -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')) diff --git a/tgext/crud/controller.py b/tgext/crud/controller.py index 92723a2..e446d2d 100644 --- a/tgext/crud/controller.py +++ b/tgext/crud/controller.py @@ -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)) @@ -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))