WIP Activity serializer

This commit is contained in:
Qwann 2017-07-25 18:42:20 +02:00
parent 771fdf878e
commit 26a62ea30b
4 changed files with 78 additions and 5 deletions

View file

@ -1,6 +1,12 @@
from django.contrib.auth import get_user_model
from django.shortcuts import get_object_or_404
from rest_framework import serializers
from event.models import Event, ActivityTag, Place, ActivityTemplate
from event.models import Event, ActivityTag, Place, ActivityTemplate, Activity
from api.users.serializers import UserSerializer
User = get_user_model()
# Classes utilitaires
@ -91,5 +97,36 @@ class ActivityTemplateSerializer(serializers.ModelSerializer):
return activity_template
# TODO rajouter des permissions
class ActivitySerializer(serializers.ModelSerializer):
pass
event = EventSerializer(read_only=True)
parent = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
en_perm = UserSerializer(read_only=True)
tags = ActivityTagSerializer(many=True)
class Meta:
model = ActivityTemplate
fields = ('id', 'title', 'event', 'parent', 'is_public', 'has_perm',
'min_perm', 'max_perm', 'description', 'remarks', 'tags',)
def update(self, instance, validated_data):
tags_data = validated_data.pop('tags')
validated_data.pop('event_pk')
event = instance.event
[setattr(instance, key, value)
for key, value in validated_data.items()]
instance.save()
tags = [ActivityTag.objects.get_or_create(event=event, **tag_data)[0]
for tag_data in tags_data]
instance.tags = tags
return instance
def create(self, validated_data):
tags_data = validated_data.pop('tags')
event_pk = validated_data.pop('event_pk')
event = event_pk and get_object_or_404(Event, id=event_pk) or None
activity = Activity.objects.create(event=event, **validated_data)
tags = [ActivityTag.objects.get_or_create(event=event, **tag_data)[0]
for tag_data in tags_data]
activity.tags = tags
return activity

View file

@ -44,6 +44,28 @@ class ActivityTemplateTest(EventBasedModelMixin, APITestCase):
self.assertEqual(instance.tags.count(), 2)
class ActivityTest(EventBasedModelMixin, APITestCase):
model = ActivityTemplate
base_name = 'event-activity'
initial_count = 1
# Creation
data_creation = 'act1_data'
# Update/Delete
instance_name = 'act1'
field_tested = 'title'
serializer = ActivityTemplateSerializer
def test_create_extra(self):
self.assertEqual(self.model.objects.get(id=1).tags.count(), 1)
def pre_update_extra(self, data):
data['tags'].append(self.tag2_data)
return data
def post_update_extra(self, instance):
self.assertEqual(instance.tags.count(), 2)
class EventSpecficTagTest(EventSpecificMixin, APITestCase):
model = ActivityTag
root_base_name = 'activitytag'

View file

@ -7,7 +7,7 @@ from django.urls import reverse
from rest_framework.test import APIRequestFactory
from rest_framework import status
from event.models import Event, Place, ActivityTag, ActivityTemplate
from event.models import Event, Place, ActivityTag, ActivityTemplate, Activity
User = get_user_model()
@ -41,6 +41,8 @@ class DataBaseMixin(object):
self.tag1 = ActivityTag.objects.create(**self.tag1_data)
self.act_temp1_data = {'title': "act temp1", 'is_public': True,
'beginning': timezone.now(),
'ending': timezone.now()+timedelta(hours=2),
'remarks': "test remark", 'event': self.event1}
self.act_temp2_data = {'title': "act temp2", 'is_public': False,
'remarks': "test remark",
@ -48,6 +50,16 @@ class DataBaseMixin(object):
self.act_temp1 = ActivityTemplate.objects.create(**self.act_temp1_data)
self.act_temp1.tags.add(self.tag1)
# Actitvity
self.act1_data = {'title': "act1", 'is_public': True,
'remarks': "test remark", 'event': self.event1}
self.act2_data = {'title': "act2", 'is_public': False,
"beginning": "2017-07-18T18:05:00Z",
"ending": "2017-07-19T18:05:00Z",
'remarks': "test remark", 'tags': [self.tag2_data, ]}
self.act1 = Activity.objects.create(**self.act1_data)
self.act1.tags.add(self.tag1)
class EventBasedModelMixin(DataBaseMixin):
"""

View file

@ -1,7 +1,7 @@
from django.conf.urls import url, include
from rest_framework_nested.routers import SimpleRouter, NestedSimpleRouter
from api.event.views import EventViewSet, PlaceViewSet, ActivityTagViewSet,\
ActivityTemplateViewSet
ActivityTemplateViewSet, ActivityViewSet
# Create a router and register our viewsets with it.
router = SimpleRouter()
@ -12,9 +12,11 @@ router.register(r'activitytag', ActivityTagViewSet, 'activitytag')
# Register nested router and register someviewsets vith it
event_router = NestedSimpleRouter(router, r'event', lookup='event')
event_router.register(r'place', PlaceViewSet, base_name='event-place')
event_router.register(r'tag', ActivityTagViewSet, base_name='event-activitytag')
event_router.register(r'tag', ActivityTagViewSet,
base_name='event-activitytag')
event_router.register(r'activitytemplate', ActivityTemplateViewSet,
base_name='event-activitytemplate')
event_router.register(r'activity', ActivityViewSet, base_name='event-activity')
# The API URLs are now determined automatically by the router.