aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework/tests/views.py
diff options
context:
space:
mode:
authorCarles Barrobés2011-07-30 22:23:53 +0200
committerCarles Barrobés2011-07-30 22:23:53 +0200
commit3b413dbb40128fb3e3b62a5359b2bd2968d626d8 (patch)
tree437d0a58ede41c649a1a926e1c4a3ca71048707f /djangorestframework/tests/views.py
parent53fcf290811f062c54939f40db1cd7c06544f002 (diff)
downloaddjango-rest-framework-3b413dbb40128fb3e3b62a5359b2bd2968d626d8.tar.bz2
Added support for OPTIONS method, including a few unit tests
Diffstat (limited to 'djangorestframework/tests/views.py')
-rw-r--r--djangorestframework/tests/views.py96
1 files changed, 94 insertions, 2 deletions
diff --git a/djangorestframework/tests/views.py b/djangorestframework/tests/views.py
index 598712d2..b0f9d6d4 100644
--- a/djangorestframework/tests/views.py
+++ b/djangorestframework/tests/views.py
@@ -1,17 +1,109 @@
from django.conf.urls.defaults import patterns, url
from django.test import TestCase
from django.test import Client
+from django import forms
+from django.db import models
+from djangorestframework.views import View
+from djangorestframework.parsers import JSONParser
+from djangorestframework.resources import ModelResource
+from djangorestframework.views import ListOrCreateModelView, InstanceModelView
+
+from StringIO import StringIO
+
+
+class MockView(View):
+ """This is a basic mock view"""
+ pass
+
+class ResourceMockView(View):
+ """This is a resource-based mock view"""
+
+ class MockForm(forms.Form):
+ foo = forms.BooleanField(required=False)
+ bar = forms.IntegerField(help_text='Must be an integer.')
+ baz = forms.CharField(max_length=32)
+
+ form = MockForm
+
+class MockResource(ModelResource):
+ """This is a mock model-based resource"""
+
+ class MockResourceModel(models.Model):
+ foo = models.BooleanField()
+ bar = models.IntegerField(help_text='Must be an integer.')
+ baz = models.CharField(max_length=32, help_text='Free text. Max length 32 chars.')
+
+ model = MockResourceModel
+ fields = ('foo', 'bar', 'baz')
urlpatterns = patterns('djangorestframework.utils.staticviews',
url(r'^robots.txt$', 'deny_robots'),
url(r'^favicon.ico$', 'favicon'),
url(r'^accounts/login$', 'api_login'),
url(r'^accounts/logout$', 'api_logout'),
+ url(r'^mock/$', MockView.as_view()),
+ url(r'^resourcemock/$', ResourceMockView.as_view()),
+ url(r'^model/$', ListOrCreateModelView.as_view(resource=MockResource)),
+ url(r'^model/(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=MockResource)),
)
+class BaseViewTests(TestCase):
+ """Test the base view class of djangorestframework"""
+ urls = 'djangorestframework.tests.views'
+
+ def test_options_method_simple_view(self):
+ response = self.client.options('/mock/')
+ self._verify_options_response(response,
+ name='Mock',
+ description='This is a basic mock view')
+
+ def test_options_method_resource_view(self):
+ response = self.client.options('/resourcemock/')
+ self._verify_options_response(response,
+ name='Resource Mock',
+ description='This is a resource-based mock view',
+ fields={'foo':'BooleanField',
+ 'bar':'IntegerField',
+ 'baz':'CharField',
+ })
+
+ def test_options_method_model_resource_list_view(self):
+ response = self.client.options('/model/')
+ self._verify_options_response(response,
+ name='Mock List',
+ description='This is a mock model-based resource',
+ fields={'foo':'BooleanField',
+ 'bar':'IntegerField',
+ 'baz':'CharField',
+ })
+
+ def test_options_method_model_resource_detail_view(self):
+ response = self.client.options('/model/0/')
+ self._verify_options_response(response,
+ name='Mock Instance',
+ description='This is a mock model-based resource',
+ fields={'foo':'BooleanField',
+ 'bar':'IntegerField',
+ 'baz':'CharField',
+ })
+
+ def _verify_options_response(self, response, name, description, fields=None, status=200,
+ mime_type='application/json'):
+ self.assertEqual(response.status_code, status)
+ self.assertEqual(response['Content-Type'].split(';')[0], mime_type)
+ parser = JSONParser(None)
+ (data, files) = parser.parse(StringIO(response.content))
+ self.assertTrue('application/json' in data['renders'])
+ self.assertEqual(name, data['name'])
+ self.assertEqual(description, data['description'])
+ if fields is None:
+ self.assertFalse(hasattr(data, 'fields'))
+ else:
+ self.assertEqual(data['fields'], fields)
-class ViewTests(TestCase):
+
+class ExtraViewsTests(TestCase):
"""Test the extra views djangorestframework provides"""
urls = 'djangorestframework.tests.views'
@@ -39,5 +131,5 @@ class ViewTests(TestCase):
self.assertEqual(response.status_code, 200)
self.assertEqual(response['Content-Type'].split(';')[0], 'text/html')
-
# TODO: Add login/logout behaviour tests
+