Activity serialized

This commit is contained in:
Qwann 2017-07-26 19:27:28 +02:00
parent 2412c8344f
commit 6bb176be01
3 changed files with 37 additions and 28 deletions

View file

@ -120,14 +120,15 @@ class ActivityTemplateSerializer(serializers.ModelSerializer):
# TODO rajouter des permissions
class ActivitySerializer(serializers.ModelSerializer):
event = EventSerializer(read_only=True)
parent = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
parent = serializers.PrimaryKeyRelatedField(queryset=ActivityTemplate.objects.all(), allow_null=True)
en_perm = UserSerializer(read_only=True)
tags = ActivityTagSerializer(many=True)
class Meta:
model = ActivityTemplate
model = Activity
fields = ('id', 'title', 'event', 'parent', 'is_public', 'has_perm',
'min_perm', 'max_perm', 'description', 'remarks', 'tags',)
'min_perm', 'max_perm', 'en_perm', 'description', 'remarks',
'tags', 'beginning', 'end', )
def update(self, instance, validated_data):
tags_data = validated_data.pop('tags')

View file

@ -4,14 +4,15 @@ from rest_framework.test import APITestCase
from event.models import Event, Place, ActivityTag, ActivityTemplate
from api.event.serializers import ActivityTemplateSerializer, EventSerializer
from api.event.serializers import ActivityTemplateSerializer,\
EventSerializer, Activity
from api.test_mixins import EventBasedModelTestMixin, EventSpecificTestMixin,\
ModelTestMixin
User = get_user_model()
class EventTest(ModelTestMixin, APITestCase):
class EventTests(ModelTestMixin, APITestCase):
model = Event
base_name = 'event'
tested_fields = {'title': "I'm a test", }
@ -22,10 +23,9 @@ class EventTest(ModelTestMixin, APITestCase):
serializer = EventSerializer
class ActivityTemplateTest(EventBasedModelTestMixin, APITestCase):
class ActivityTemplateTests(EventBasedModelTestMixin, APITestCase):
model = ActivityTemplate
base_name = 'event-activitytemplate'
initial_count = 1
# Creation
data_creation = 'act_temp2_data'
# Update/Delete
@ -44,12 +44,11 @@ class ActivityTemplateTest(EventBasedModelTestMixin, APITestCase):
self.assertEqual(instance.tags.count(), 2)
class ActivityTest(EventBasedModelTestMixin, APITestCase):
model = ActivityTemplate
class ActivityTests(EventBasedModelTestMixin, APITestCase):
model = Activity
base_name = 'event-activity'
initial_count = 1
# Creation
data_creation = 'act1_data'
data_creation = 'act2_data'
# Update/Delete
instance_name = 'act1'
field_tested = 'title'
@ -66,13 +65,13 @@ class ActivityTest(EventBasedModelTestMixin, APITestCase):
self.assertEqual(instance.tags.count(), 2)
class EventSpecficTagTest(EventSpecificTestMixin, APITestCase):
class EventSpecficTagTests(EventSpecificTestMixin, APITestCase):
model = ActivityTag
root_base_name = 'activitytag'
event_base_name = 'event-activitytag'
class EventSpecficPlaceTest(EventSpecificTestMixin, APITestCase):
class EventSpecficPlaceTests(EventSpecificTestMixin, APITestCase):
model = Place
root_base_name = 'place'
event_base_name = 'event-place'

View file

@ -13,7 +13,7 @@ from event.models import Event, Place, ActivityTag, ActivityTemplate, Activity
User = get_user_model()
class DataBaseMixin(object):
class DataBaseMixin():
"""
provides a datatabse for API tests
"""
@ -44,8 +44,6 @@ 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",
@ -55,11 +53,14 @@ class DataBaseMixin(object):
# Actitvity
self.act1_data = {'title': "act1", 'is_public': True,
'beginning': timezone.now(),
'end': timezone.now()+timedelta(hours=2),
'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, ]}
"end": "2017-07-19T18:05:00Z",
'parent': None,
'remarks': "test remark", 'tags': []}
self.act1 = Activity.objects.create(**self.act1_data)
self.act1.tags.add(self.tag1)
@ -95,6 +96,7 @@ class EventBasedModelTestMixin(DataBaseMixin):
ensure a permited user can create a new %model object using API
"""
data = getattr(self, self.data_creation)
initial_count = self.model.objects.count()
event_id = self.event1.id
url = reverse('{base_name}-list'.format(base_name=self.base_name),
@ -102,9 +104,10 @@ class EventBasedModelTestMixin(DataBaseMixin):
self.client.force_authenticate(user=self.user1)
response = self.client.post(url, data,
format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(self.model.objects.count(), self.initial_count + 1)
self.assertEqual(self.model.objects.get(id=self.initial_count+1).event,
self.assertEqual(response.status_code, status.HTTP_201_CREATED,
msg=response.content)
self.assertEqual(self.model.objects.count(), initial_count + 1)
self.assertEqual(self.model.objects.get(id=initial_count+1).event,
self.event1)
self.user_create_extra()
@ -132,7 +135,8 @@ class EventBasedModelTestMixin(DataBaseMixin):
self.client.force_authenticate(user=self.user1)
response = self.client.patch(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.status_code, status.HTTP_200_OK,
msg=response.content)
instance.refresh_from_db()
self.assertEqual(getattr(instance, self.field_tested), newvalue)
@ -144,6 +148,7 @@ class EventBasedModelTestMixin(DataBaseMixin):
ensure a permited user can delete a new %model object using API
"""
instance = getattr(self, self.instance_name)
initial_count = self.model.objects.count()
instance_id = instance.id
event_id = self.event1.id
@ -153,14 +158,15 @@ class EventBasedModelTestMixin(DataBaseMixin):
self.client.force_authenticate(user=self.user1)
response = self.client.delete(url)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(self.model.objects.count(), self.initial_count - 1)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT,
msg=response.content)
self.assertEqual(self.model.objects.count(), initial_count - 1)
# TODO rajouter la gestion des permissions dans le Mixin
# TODO rajouter un test pour s'assurer que les personnes non
# connectées ne peuvent pas create/update/delete
class EventSpecificTestMixin(object):
class EventSpecificTestMixin():
"""
Tests is the EventSpecifics querysets are rendered correctly
using the API
@ -246,7 +252,8 @@ class ModelTestMixin(DataBaseMixin):
self.client.force_authenticate(user=self.user1)
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(response.status_code, status.HTTP_201_CREATED,
msg=response.content)
self.assertEqual(self.model.objects.count(), initial_count + 1)
instance = self.model.objects.get(id=initial_count+1)
@ -271,7 +278,8 @@ class ModelTestMixin(DataBaseMixin):
self.client.force_authenticate(user=self.user1)
response = self.client.put(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.status_code, status.HTTP_200_OK,
msg=response.content)
instance.refresh_from_db()
for field, value in self.tested_fields.items():
@ -290,5 +298,6 @@ class ModelTestMixin(DataBaseMixin):
self.client.force_authenticate(user=self.user1)
response = self.client.delete(url)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT,
msg=response.content)
self.assertEqual(self.model.objects.count(), initial_count - 1)