# HG changeset patch -- Bitbucket.org # Project django-modelviews # URL http://bitbucket.org/david/django-modelviews/overview # User Will Larson # Date 1213797276 -32400 # Node ID e608ece7917f7629765fc068784b449463ad37ae # Parent be8c4ff20004b95954648767a49981d90e2e670f # Parent 8b382746c1d39db8428bce6daf4b8bd033258fb1 Merged in changes from head. --- a/tests/test_modelview/tests.py +++ b/tests/test_modelview/tests.py @@ -24,7 +24,9 @@ class ModelViewTest(TestCase): all other http methods. """ a = Article.objects.all()[0] - response = self.client.post('/articles/%s/' % a.slug) + response = self.client.post('/articles/', {'name': "Not allowed article", + 'slug': "not-allowed-article", + 'body': "some not allowed text"}) self.assertEqual(response.status_code, 405) # no explicit way to send DELETE or PUT methods, so get # a bit sneaky here. @@ -40,20 +42,45 @@ class ModelViewTest(TestCase): response = self.client.get('/articles/%s/' % a.slug) self.assertEqual(response.status_code, 200) - def test_html_responder_detail(self): + def test_html_responder_read_detail(self): a = Article.objects.all()[0] response = self.client.get('/articles/%s/html/' % a.slug) self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, 'test_modelview/article_detail.html') self.assertNotEqual(response.content.find(a.name), -1) - def test_html_responder_list(self): + def test_html_responder_read_list(self): response = self.client.get('/articles/') self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, 'test_modelview/article_list.html') for article in Article.objects.all(): self.assertNotEqual(response.content.find(article.name),-1) + def test_html_responder_create(self): + response = self.client.post('/rw-articles/', {'name': "Another article", + 'slug': "another-article", + 'body': "some other text"}) + self.assertEqual(response.status_code, 302) + self.assertEqual(Article.objects.count(), 2) + + def test_html_responder_update(self): + a = Article.objects.all()[0] + response = self.client.post('/rw-articles/%s/' % a.slug, + {'name': "An updated article", + 'slug': "an-article", + 'body': "some text"}, + REQUEST_METHOD='PUT') + self.assertEqual(response.status_code, 302) + self.assertEqual(Article.objects.count(), 1) + self.assertEqual(Article.objects.all()[0].name, u'An updated article') + + def test_html_responder_delete(self): + a = Article.objects.all()[0] + response = self.client.post('/rw-articles/%s/' % a.slug, + REQUEST_METHOD='DELETE') + self.assertEqual(response.status_code, 302) + self.assertEqual(Article.objects.count(), 0) + def test_json_responder_detail(self): a = Article.objects.all()[0] response = self.client.get('/articles/%s/json/' % a.slug) --- a/tests/urls.py +++ b/tests/urls.py @@ -6,9 +6,11 @@ from django_modelview.generic.rest_views articles = ModelView(Article.objects.all(), responders=(HtmlResponder,JsonResponder,XmlResponder), methods=('GET',)) +rw_articles = ModelView(Article.objects.all(), + responders=(HtmlResponder,), + methods=('GET', 'POST', 'PUT', 'DELETE')) -urlpatterns = patterns( - '', - ('^articles/(?P[-\w]*)/(?P(html|json|xml))?/?$', - articles), +urlpatterns = patterns('', + ('^articles/(?P[-\w]+)?/?(?P(html|json))?/?$', articles), + ('^rw-articles/(?P[-\w]+)?/?$', rw_articles), ) --- a/generic/rest_views.py +++ b/generic/rest_views.py @@ -1,9 +1,10 @@ from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured -from django.http import Http404, HttpResponse, HttpResponseNotAllowed +from django.http import Http404, HttpResponse, HttpResponseRedirect, HttpResponseNotAllowed from django.template import loader, RequestContext from django.shortcuts import render_to_response from django.core.xheaders import populate_xheaders from django.core.serializers import serialize +from django.newforms.models import ModelFormMetaclass, ModelForm try: from django.views.generic.base import BaseDetailView