Skip to content

Commit d28f3a9

Browse files
committed
Failing sideload resources test.
1 parent a662a2a commit d28f3a9

File tree

3 files changed

+71
-3
lines changed

3 files changed

+71
-3
lines changed

example/api/api.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,21 @@ class Meta:
1919
'id', 'first_name', 'last_name', 'email', )
2020

2121

22+
class CarSerializer(serializers.Serializer):
23+
"""
24+
Cars serializer
25+
"""
26+
name = serializers.CharField(max_length=50)
27+
28+
29+
class UserCarSerializer(serializers.Serializer):
30+
"""
31+
Serializer that returns a list of users & cars.
32+
"""
33+
users = IdentitySerializer(many=True)
34+
cars = CarSerializer(many=True)
35+
36+
2237
class User(generics.GenericAPIView):
2338
"""
2439
Current user's identity endpoint.
@@ -63,3 +78,25 @@ class EmberDataMixinUserModelViewSet(mixins.MultipleIDMixin,
6378

6479
queryset = auth_models.User.objects.all()
6580

81+
82+
class UserCarResource(UserEmber):
83+
"""
84+
Resource that returns a list of users and cars.
85+
"""
86+
resource_name = False
87+
88+
cars = [
89+
{'id': 1, 'name': 'BMW'},
90+
{'id': 2, 'name': 'Mercedes'},
91+
{'id': 3, 'name': 'Mini'},
92+
{'id': 4, 'name': 'Ford'}
93+
]
94+
95+
def get(self, request, *args, **kwargs):
96+
data = {
97+
'users': self.get_queryset(),
98+
'cars': self.cars
99+
}
100+
serializer = UserCarSerializer(data)
101+
return Response(serializer.data)
102+

example/api/urls.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,25 @@
22
Example app URLs
33
"""
44
from django.conf.urls import patterns, include, url
5-
from .api import User, UserEmber, EmberUserModelViewSet, EmberDataMixinUserModelViewSet
5+
from .api import (
6+
User, UserEmber, EmberUserModelViewSet, EmberDataMixinUserModelViewSet,
7+
UserCarResource)
68

79
from rest_framework import routers
810

911
urlpatterns = patterns('',
1012
url(r'^user-default/(?P<pk>\d+)/$', User.as_view(), name='user-default'),
1113
url(r'^user-ember/(?P<pk>\d+)/$', UserEmber.as_view(), name='user-ember'),
12-
url(r'^user-mixin-viewset/$', EmberDataMixinUserModelViewSet.as_view({'get': 'list'}),
14+
url(r'^user-mixin-viewset/$',
15+
EmberDataMixinUserModelViewSet.as_view({'get': 'list'}),
1316
name='mixin-user-list'),
1417
url(r'^user-viewset/$', EmberUserModelViewSet.as_view({'get': 'list'}),
1518
name='user-list'),
1619
url(r'^user-viewset/(?P<pk>\d+)/$',
1720
EmberUserModelViewSet.as_view(
18-
{'get': 'retrieve', 'post': 'create', 'put': 'update'}), name='user-detail'),
21+
{'get': 'retrieve', 'post': 'create', 'put': 'update'}),
22+
name='user-detail'),
23+
url(r'users-cars/$', UserCarResource.as_view(),
24+
name='users-cars'),
1925
)
2026

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"""
2+
Test sideloading resources
3+
"""
4+
import json
5+
from example.tests import TestBase
6+
from django.core.urlresolvers import reverse_lazy
7+
from django.conf import settings
8+
9+
10+
class SideloadResourceTest(TestBase):
11+
"""
12+
Test that sideloading resources returns expected output.
13+
"""
14+
url = reverse_lazy('users-cars')
15+
16+
def test_get_sideloaded_data(self):
17+
"""
18+
Ensure resources that are meant for sideloaded data
19+
do not return a single root key.
20+
"""
21+
response = self.client.get(self.url)
22+
content = json.loads(response.content)
23+
24+
self.assertEqual(content.keys(), ['cars', 'users'])
25+

0 commit comments

Comments
 (0)