2013-05-26 15:09:22 +00:00
|
|
|
from django.contrib.auth.models import AnonymousUser, User
|
|
|
|
|
from django.core.exceptions import PermissionDenied
|
2013-05-22 23:21:01 +00:00
|
|
|
from django.core.urlresolvers import reverse
|
2013-05-19 11:10:35 +00:00
|
|
|
from django.test import TestCase
|
2013-05-18 16:24:21 +00:00
|
|
|
from django.test.client import RequestFactory
|
2013-05-19 11:11:38 +00:00
|
|
|
from django.utils import simplejson as json
|
2013-05-18 16:24:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
from djadmin2 import apiviews
|
2013-05-19 10:27:51 +00:00
|
|
|
from djadmin2 import default
|
2013-05-31 06:57:25 +00:00
|
|
|
from djadmin2 import ModelAdmin2
|
2013-05-18 16:24:21 +00:00
|
|
|
from ..models import Post
|
|
|
|
|
|
|
|
|
|
|
2013-05-22 23:21:01 +00:00
|
|
|
class APITestCase(TestCase):
|
2013-05-18 16:24:21 +00:00
|
|
|
def setUp(self):
|
|
|
|
|
self.factory = RequestFactory()
|
2013-05-22 23:21:01 +00:00
|
|
|
self.user = User(
|
|
|
|
|
username='admin',
|
|
|
|
|
is_staff=True)
|
|
|
|
|
self.user.set_password('admin')
|
|
|
|
|
self.user.save()
|
2013-05-18 16:24:21 +00:00
|
|
|
|
2013-05-19 10:27:51 +00:00
|
|
|
def get_model_admin(self, model):
|
|
|
|
|
return ModelAdmin2(model, default)
|
|
|
|
|
|
2013-05-18 16:24:21 +00:00
|
|
|
|
2013-05-22 23:21:01 +00:00
|
|
|
class IndexAPIViewTest(APITestCase):
|
2013-05-19 10:53:37 +00:00
|
|
|
def test_response_ok(self):
|
2013-05-31 06:36:09 +00:00
|
|
|
request = self.factory.get(reverse('admin2:api_index'))
|
2013-05-22 23:21:01 +00:00
|
|
|
request.user = self.user
|
2013-05-19 10:53:37 +00:00
|
|
|
view = apiviews.IndexAPIView.as_view(**default.get_api_index_kwargs())
|
|
|
|
|
response = view(request)
|
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
2013-05-22 23:21:01 +00:00
|
|
|
def test_view_permission(self):
|
2013-05-31 06:36:09 +00:00
|
|
|
request = self.factory.get(reverse('admin2:api_index'))
|
2013-05-26 15:09:22 +00:00
|
|
|
request.user = AnonymousUser()
|
2013-05-22 23:21:01 +00:00
|
|
|
view = apiviews.IndexAPIView.as_view(**default.get_api_index_kwargs())
|
2013-05-26 15:09:22 +00:00
|
|
|
self.assertRaises(PermissionDenied, view, request)
|
2013-05-19 10:53:37 +00:00
|
|
|
|
2013-05-31 06:36:09 +00:00
|
|
|
|
2013-05-22 23:21:01 +00:00
|
|
|
class ListCreateAPIViewTest(APITestCase):
|
2013-05-18 16:24:21 +00:00
|
|
|
def test_response_ok(self):
|
2013-06-01 11:48:53 +00:00
|
|
|
request = self.factory.get(reverse('admin2:blog_post_api_list'))
|
2013-05-22 23:21:01 +00:00
|
|
|
request.user = self.user
|
2013-05-19 13:45:24 +00:00
|
|
|
model_admin = self.get_model_admin(Post)
|
2013-05-19 10:27:51 +00:00
|
|
|
view = apiviews.ListCreateAPIView.as_view(
|
2013-05-19 13:45:24 +00:00
|
|
|
**model_admin.get_api_list_kwargs())
|
2013-05-19 10:27:51 +00:00
|
|
|
response = view(request)
|
2013-05-18 16:24:21 +00:00
|
|
|
self.assertEqual(response.status_code, 200)
|
2013-05-19 08:13:30 +00:00
|
|
|
|
2013-05-22 23:21:01 +00:00
|
|
|
def test_view_permission(self):
|
2013-06-01 11:48:53 +00:00
|
|
|
request = self.factory.get(reverse('admin2:blog_post_api_list'))
|
2013-05-26 15:09:22 +00:00
|
|
|
request.user = AnonymousUser()
|
2013-05-22 23:21:01 +00:00
|
|
|
model_admin = self.get_model_admin(Post)
|
|
|
|
|
view = apiviews.ListCreateAPIView.as_view(
|
|
|
|
|
**model_admin.get_api_list_kwargs())
|
2013-05-26 15:09:22 +00:00
|
|
|
self.assertRaises(PermissionDenied, view, request)
|
2013-05-22 23:21:01 +00:00
|
|
|
|
2013-05-19 08:13:30 +00:00
|
|
|
def test_list_includes_unicode_field(self):
|
|
|
|
|
Post.objects.create(title='Foo', body='Bar')
|
2013-06-01 11:48:53 +00:00
|
|
|
request = self.factory.get(reverse('admin2:blog_post_api_list'))
|
2013-05-22 23:21:01 +00:00
|
|
|
request.user = self.user
|
2013-05-19 13:45:24 +00:00
|
|
|
model_admin = self.get_model_admin(Post)
|
2013-05-19 10:27:51 +00:00
|
|
|
view = apiviews.ListCreateAPIView.as_view(
|
2013-05-19 13:45:24 +00:00
|
|
|
**model_admin.get_api_list_kwargs())
|
2013-05-19 10:27:51 +00:00
|
|
|
response = view(request)
|
2013-05-19 08:13:30 +00:00
|
|
|
response.render()
|
|
|
|
|
|
2013-05-22 23:21:01 +00:00
|
|
|
self.assertEqual(response.status_code, 200)
|
2013-05-19 09:08:36 +00:00
|
|
|
self.assertIn('"__str__": "Foo"', response.content)
|
2013-05-19 08:56:11 +00:00
|
|
|
|
2013-05-19 11:11:38 +00:00
|
|
|
def test_pagination(self):
|
2013-06-01 11:48:53 +00:00
|
|
|
request = self.factory.get(reverse('admin2:blog_post_api_list'))
|
2013-05-22 23:21:01 +00:00
|
|
|
request.user = self.user
|
2013-05-19 13:45:24 +00:00
|
|
|
model_admin = self.get_model_admin(Post)
|
2013-05-19 11:11:38 +00:00
|
|
|
view = apiviews.ListCreateAPIView.as_view(
|
2013-05-19 13:45:24 +00:00
|
|
|
**model_admin.get_api_list_kwargs())
|
2013-05-19 11:11:38 +00:00
|
|
|
response = view(request)
|
|
|
|
|
response.render()
|
2013-05-22 23:21:01 +00:00
|
|
|
|
|
|
|
|
self.assertEqual(response.status_code, 200)
|
2013-05-19 11:11:38 +00:00
|
|
|
data = json.loads(response.content)
|
|
|
|
|
self.assertEqual(data['count'], 0)
|
|
|
|
|
# next and previous fields exist, but are null because we have no
|
|
|
|
|
# content
|
|
|
|
|
self.assertTrue('next' in data)
|
|
|
|
|
self.assertEqual(data['next'], None)
|
|
|
|
|
self.assertTrue('previous' in data)
|
|
|
|
|
self.assertEqual(data['previous'], None)
|
|
|
|
|
|
2013-05-19 08:56:11 +00:00
|
|
|
|
2013-05-22 23:21:01 +00:00
|
|
|
class RetrieveUpdateDestroyAPIViewTest(APITestCase):
|
2013-05-19 08:56:11 +00:00
|
|
|
def test_response_ok(self):
|
|
|
|
|
post = Post.objects.create(title='Foo', body='Bar')
|
2013-05-19 10:27:51 +00:00
|
|
|
request = self.factory.get(
|
2013-06-01 11:48:53 +00:00
|
|
|
reverse('admin2:blog_post_api_detail',
|
2013-05-19 10:27:51 +00:00
|
|
|
kwargs={'pk': post.pk}))
|
2013-05-22 23:21:01 +00:00
|
|
|
request.user = self.user
|
2013-05-19 13:45:24 +00:00
|
|
|
model_admin = self.get_model_admin(Post)
|
2013-05-19 10:27:51 +00:00
|
|
|
view = apiviews.RetrieveUpdateDestroyAPIView.as_view(
|
2013-05-19 13:45:24 +00:00
|
|
|
**model_admin.get_api_detail_kwargs())
|
2013-05-19 10:27:51 +00:00
|
|
|
response = view(request, pk=post.pk)
|
2013-05-19 08:56:11 +00:00
|
|
|
self.assertEqual(response.status_code, 200)
|
2013-05-22 23:21:01 +00:00
|
|
|
|
|
|
|
|
def test_view_permission(self):
|
|
|
|
|
post = Post.objects.create(title='Foo', body='Bar')
|
|
|
|
|
request = self.factory.get(
|
2013-06-01 11:48:53 +00:00
|
|
|
reverse('admin2:blog_post_api_detail',
|
2013-05-22 23:21:01 +00:00
|
|
|
kwargs={'pk': post.pk}))
|
2013-05-26 15:09:22 +00:00
|
|
|
request.user = AnonymousUser()
|
2013-05-22 23:21:01 +00:00
|
|
|
model_admin = self.get_model_admin(Post)
|
|
|
|
|
view = apiviews.RetrieveUpdateDestroyAPIView.as_view(
|
|
|
|
|
**model_admin.get_api_detail_kwargs())
|
2013-05-26 15:09:22 +00:00
|
|
|
self.assertRaises(PermissionDenied, view, request, pk=post.pk)
|