fix #21 - API : ajout des figurines et leurs colllections
This commit is contained in:
parent
286c075ea8
commit
a5bcbf0c7e
@ -17,6 +17,8 @@ from django.conf import settings
|
|||||||
from django.conf.urls import include
|
from django.conf.urls import include
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from figurines.views import FigurineViewSet
|
||||||
|
from figurines.views import SetViewSet
|
||||||
from games.views import GameList
|
from games.views import GameList
|
||||||
from games.views import GameTimelineViewSet
|
from games.views import GameTimelineViewSet
|
||||||
from games.views import GameViewSet
|
from games.views import GameViewSet
|
||||||
@ -33,7 +35,9 @@ admin.site.site_header = '%s %s' % (admin.site.site_title, app_version)
|
|||||||
# Django Rest Framework router
|
# Django Rest Framework router
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
router.register(r'games', GameViewSet)
|
router.register(r'games', GameViewSet)
|
||||||
|
router.register(r'figurines', FigurineViewSet)
|
||||||
router.register(r'platforms', PlatformViewSet)
|
router.register(r'platforms', PlatformViewSet)
|
||||||
|
router.register(r'sets', SetViewSet)
|
||||||
router.register(
|
router.register(
|
||||||
r'game_timelines', GameTimelineViewSet, base_name='game_timeline')
|
r'game_timelines', GameTimelineViewSet, base_name='game_timeline')
|
||||||
|
|
||||||
|
22
collection/figurines/serializers.py
Normal file
22
collection/figurines/serializers.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
from figurines.models import Figurine
|
||||||
|
from figurines.models import Set
|
||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
|
||||||
|
class SetSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Set
|
||||||
|
fields = ('name', 'shortname')
|
||||||
|
|
||||||
|
|
||||||
|
class FigurineSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Figurine
|
||||||
|
fields = (
|
||||||
|
'collection',
|
||||||
|
'name',
|
||||||
|
'kind',
|
||||||
|
'achievement',
|
||||||
|
'achievement_max',
|
||||||
|
'coins',
|
||||||
|
'wish', )
|
86
collection/figurines/tests/test_api.py
Normal file
86
collection/figurines/tests/test_api.py
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django.urls import reverse
|
||||||
|
from figurines.models import Figurine
|
||||||
|
from figurines.models import Set
|
||||||
|
from rest_framework import status
|
||||||
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
|
|
||||||
|
class SetTest(APITestCase):
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
cls.superuser = User.objects.create_superuser(
|
||||||
|
'admin', 'admin@localhost', 'admin')
|
||||||
|
|
||||||
|
def test_create_set(self):
|
||||||
|
"""
|
||||||
|
Check we can create a set object.
|
||||||
|
"""
|
||||||
|
url = reverse('set-list')
|
||||||
|
data = {'name': 'Skypanzers', 'shortname': 'SP'}
|
||||||
|
self.client.force_authenticate(user=self.superuser)
|
||||||
|
response = self.client.post(url, data, format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||||
|
self.assertEqual(Set.objects.count(), 1)
|
||||||
|
self.assertEqual(Set.objects.get().name, 'Skypanzers')
|
||||||
|
|
||||||
|
def test_sorted_set(self):
|
||||||
|
"""
|
||||||
|
Check that set list is sorted.
|
||||||
|
"""
|
||||||
|
Set.objects.create(name='Skypanzers')
|
||||||
|
Set.objects.create(name='Liibo')
|
||||||
|
Set.objects.create(name='Skypanzers2')
|
||||||
|
Set.objects.create(name='Amimoche')
|
||||||
|
url = reverse('set-list')
|
||||||
|
self.client.force_authenticate(user=self.superuser)
|
||||||
|
response = self.client.get(url, format='json')
|
||||||
|
sorted_sets = list(Set.objects.all().order_by('name')
|
||||||
|
.values_list('name', flat=True))
|
||||||
|
sets = [x.get('name') for x in json.loads(response.content)]
|
||||||
|
self.assertEqual(sets, sorted_sets)
|
||||||
|
|
||||||
|
|
||||||
|
class FigurineTest(APITestCase):
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
cls.superuser = User.objects.create_superuser(
|
||||||
|
'admin', 'admin@localhost', 'admin')
|
||||||
|
|
||||||
|
def test_create_figurine(self):
|
||||||
|
"""
|
||||||
|
Check we can create a figurine object.
|
||||||
|
"""
|
||||||
|
# Figurine comes from a specific Set
|
||||||
|
collection = Set.objects.create(name='Skypanzers')
|
||||||
|
collection_url = reverse('set-detail', kwargs={'pk': collection.id})
|
||||||
|
|
||||||
|
url = reverse('figurine-list')
|
||||||
|
data = {
|
||||||
|
'name': 'Posséïdon',
|
||||||
|
'collection': collection_url,
|
||||||
|
}
|
||||||
|
self.client.force_authenticate(user=self.superuser)
|
||||||
|
response = self.client.post(url, data, format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||||
|
self.assertEqual(Figurine.objects.count(), 1)
|
||||||
|
self.assertEqual(Figurine.objects.get().name, 'Posséïdon')
|
||||||
|
self.assertEqual(Figurine.objects.get().collection_id, collection.id)
|
||||||
|
|
||||||
|
def test_sorted_figurines(self):
|
||||||
|
"""
|
||||||
|
Check that figurine list is sorted.
|
||||||
|
"""
|
||||||
|
collection = Set.objects.create(name='Amimoche')
|
||||||
|
Figurine.objects.create(name='Posséïdon', collection=collection)
|
||||||
|
Figurine.objects.create(name='Veronica', collection=collection)
|
||||||
|
Figurine.objects.create(name='Quintrépide', collection=collection)
|
||||||
|
url = reverse('figurine-list')
|
||||||
|
self.client.force_authenticate(user=self.superuser)
|
||||||
|
response = self.client.get(url, format='json')
|
||||||
|
sorted_figurines = list(Figurine.objects.all().order_by('name')
|
||||||
|
.values_list('name', flat=True))
|
||||||
|
figurines = [x.get('name') for x in json.loads(response.content)]
|
||||||
|
self.assertEqual(figurines, sorted_figurines)
|
40
collection/figurines/views.py
Normal file
40
collection/figurines/views.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
from figurines.models import Figurine
|
||||||
|
from figurines.models import Set
|
||||||
|
from rest_framework import viewsets
|
||||||
|
|
||||||
|
from .serializers import FigurineSerializer
|
||||||
|
from .serializers import SetSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class FigurineViewSet(viewsets.ModelViewSet):
|
||||||
|
"""
|
||||||
|
API endpoints that allows figurines to be edited or viewed.
|
||||||
|
|
||||||
|
retrieve:
|
||||||
|
Return the given figurine
|
||||||
|
|
||||||
|
list:
|
||||||
|
Return a list of all existing figurines ordered by name.
|
||||||
|
|
||||||
|
create:
|
||||||
|
Create a new figurine instance.
|
||||||
|
"""
|
||||||
|
queryset = Figurine.objects.all().order_by('name')
|
||||||
|
serializer_class = FigurineSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class SetViewSet(viewsets.ModelViewSet):
|
||||||
|
"""
|
||||||
|
API endpoints that allows to edit or view sets.
|
||||||
|
|
||||||
|
retrieve:
|
||||||
|
Return the given set
|
||||||
|
|
||||||
|
list:
|
||||||
|
Return a list of all existing sets ordered by name.
|
||||||
|
|
||||||
|
create:
|
||||||
|
Create a new set instance.
|
||||||
|
"""
|
||||||
|
queryset = Set.objects.all().order_by('name')
|
||||||
|
serializer_class = SetSerializer
|
Loading…
Reference in New Issue
Block a user