Skip to content

Commit a0ab359

Browse files
committed
Refactored tests so we have an organized base to scale from
1 parent 0e8d1a6 commit a0ab359

File tree

13 files changed

+102
-133
lines changed

13 files changed

+102
-133
lines changed

example/api/api.py

Lines changed: 0 additions & 102 deletions
This file was deleted.

example/api/resources/__init__.py

Whitespace-only changes.

example/api/resources/identity.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from django.contrib.auth import models as auth_models
2+
from rest_framework import viewsets, generics, renderers, parsers
3+
from rest_framework.decorators import list_route, detail_route
4+
from rest_framework.response import Response
5+
from rest_framework_ember import mixins, utils
6+
from ..serializers.identity import IdentitySerializer
7+
from ..serializers.post import PostSerializer
8+
9+
10+
class Identity(mixins.MultipleIDMixin, viewsets.ModelViewSet):
11+
queryset = auth_models.User.objects.all()
12+
serializer_class = IdentitySerializer
13+
14+
# demonstrate sideloading data for use at app boot time
15+
@list_route()
16+
def posts(self, request):
17+
self.resource_name = False
18+
19+
identities = self.queryset
20+
posts = [{'id': 1, 'title': 'Test Blog Post'}]
21+
22+
data = {
23+
u'identities': IdentitySerializer(identities, many=True).data,
24+
u'posts': PostSerializer(posts, many=True).data,
25+
}
26+
return Response(utils.format_keys(data, format_type='camelize'))
27+
28+
@detail_route()
29+
def manual_resource_name(self, request, *args, **kwargs):
30+
self.resource_name = 'data'
31+
return super(Identity, self).retrieve(request, args, kwargs)
32+
33+
34+
class GenericIdentity(generics.GenericAPIView):
35+
"""
36+
Current user's identity endpoint.
37+
38+
GET /identities/generic
39+
"""
40+
serializer_class = IdentitySerializer
41+
allowed_methods = ['GET']
42+
renderer_classes = (renderers.JSONRenderer, )
43+
parser_classes = (parsers.JSONParser, )
44+
45+
46+
def get_queryset(self):
47+
return auth_models.User.objects.all()
48+
49+
def get(self, request, pk=None):
50+
"""
51+
GET request
52+
"""
53+
obj = self.get_object()
54+
return Response(IdentitySerializer(obj).data)
55+

example/api/serializers/__init__.py

Whitespace-only changes.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from django.contrib.auth import models as auth_models
2+
from rest_framework import serializers
3+
4+
5+
class IdentitySerializer(serializers.ModelSerializer):
6+
"""
7+
Identity Serializer
8+
"""
9+
class Meta:
10+
model = auth_models.User
11+
fields = (
12+
'id', 'first_name', 'last_name', 'email', )
13+

example/api/serializers/post.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from rest_framework import serializers
2+
3+
4+
class PostSerializer(serializers.Serializer):
5+
"""
6+
Blog post serializer
7+
"""
8+
title = serializers.CharField(max_length=50)
9+

example/api/urls.py

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,16 @@
22
Example app URLs
33
"""
44
from django.conf.urls import patterns, include, url
5-
from .api import (
6-
User, UserEmber, EmberUserModelViewSet, MultipleIDMixinUserModelViewSet,
7-
UserCarResource)
8-
95
from rest_framework import routers
6+
from .resources.identity import Identity, GenericIdentity
7+
8+
router = routers.DefaultRouter(trailing_slash=False)
9+
10+
router.register(r'identities', Identity)
11+
12+
urlpatterns = router.urls
1013

11-
urlpatterns = patterns('',
12-
url(r'^user-default/(?P<pk>\d+)/$', User.as_view(), name='user-default'),
13-
url(r'^user-ember/(?P<pk>\d+)/$', UserEmber.as_view(), name='user-ember'),
14-
url(r'^user-mixin-viewset/$',
15-
MultipleIDMixinUserModelViewSet.as_view({'get': 'list'}),
16-
name='mixin-user-list'),
17-
url(r'^user-viewset/$', EmberUserModelViewSet.as_view({'get': 'list'}),
18-
name='user-list'),
19-
url(r'^user-viewset/(?P<pk>\d+)/$',
20-
EmberUserModelViewSet.as_view(
21-
{'get': 'retrieve', 'post': 'create', 'put': 'update'}),
22-
name='user-detail'),
23-
url(r'users-cars/$', UserCarResource.as_view(),
24-
name='users-cars'),
14+
urlpatterns += patterns('',
15+
url(r'identities/default/(?P<pk>\d+)', GenericIdentity.as_view(), name='user-default'),
2516
)
2617

example/settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@
4040
'DEFAULT_PAGINATION_SERIALIZER_CLASS':
4141
'rest_framework_ember.pagination.PaginationSerializer',
4242
'DEFAULT_PARSER_CLASSES': (
43-
# 'rest_framework_ember.parsers.JSONParser',
43+
'rest_framework_ember.parsers.JSONParser',
4444
'rest_framework.parsers.FormParser',
4545
'rest_framework.parsers.MultiPartParser'
4646
),
4747
'DEFAULT_RENDERER_CLASSES': (
48-
# 'rest_framework_ember.renderers.JSONRenderer',
48+
'rest_framework_ember.renderers.JSONRenderer',
4949
'rest_framework.renderers.JSONRenderer',
5050
'rest_framework.renderers.BrowsableAPIRenderer',
5151
),

example/tests/test_format_keys.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def test_camelization(self):
4848
meta = json_content.get('meta')
4949

5050
self.assertEquals(expected.get('users'), json_content.get('users'))
51-
self.assertEqual('http://testserver/user-viewset/?page=2',
51+
self.assertEqual(u'http://testserver/identities?page=2',
5252
meta.get('nextLink'))
5353

5454
def test_pluralization(self):
@@ -76,6 +76,7 @@ def test_pluralization(self):
7676
json_content = json.loads(response.content)
7777
self.assertEquals(expected.get('users'), json_content.get('users'))
7878

79+
def test_empty_pluralization(self):
7980
#test that the key is still pluralized when there are no records for the
8081
#model, as long as the endpoint serves a list
8182
get_user_model().objects.all().delete()
@@ -84,3 +85,4 @@ def test_pluralization(self):
8485

8586
json_content = json.loads(response.content)
8687
self.assertEqual(json_content.get('users'), [])
88+

example/tests/test_generic_viewset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def test_ember_expected_renderer(self):
3232
The :class:`UserEmber` ViewSet has the ``resource_name`` of 'data'
3333
so that should be the key in the JSON response.
3434
"""
35-
url = reverse('user-ember', kwargs={'pk': self.miles.pk})
35+
url = reverse('user-manual-resource-name', kwargs={'pk': self.miles.pk})
3636

3737
response = self.client.get(url)
3838
self.assertEqual(200, response.status_code)

0 commit comments

Comments
 (0)