Skip to content
Snippets Groups Projects
Commit a2352834 authored by florimondmanca's avatar florimondmanca
Browse files

update visit list serializer

parent 1f876e8f
No related branches found
No related tags found
No related merge requests found
......@@ -73,12 +73,12 @@ PROJECT_APPS = [
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + PROJECT_APPS
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.middleware.common.CommonMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
......
......@@ -36,12 +36,16 @@ class VisitEndpointsTest(SimpleAPITestCase):
self.assertRequiresAuth(
self.perform_retrieve, expected_status_code=status.HTTP_200_OK)
def test_retrieve_with_participants(self):
def perform_retrieve_with_participant(self):
obj = self.factory.create()
user = UserFactory.create()
Participation.objects.create(visit=obj, user=user)
self.client.force_login(user=user)
response = self.perform_retrieve(obj=obj)
return response
def test_retrieve_with_participant(self):
response = self.perform_retrieve_with_participant()
self.assertEqual(response.status_code, status.HTTP_200_OK,
response.data)
......@@ -51,6 +55,7 @@ class VisitSerializerTestCase(SerializerTestCaseMixin, TestCase):
serializer_class = VisitSerializer
factory_class = VisitFactory
request_url = '/api/visits/'
expected_fields = (
'id', 'url',
......
......@@ -58,18 +58,16 @@ class VisitListSerializer(serializers.HyperlinkedModelSerializer):
participants = serializers.SerializerMethodField()
def get_participants(self, obj):
"""Return number of participants."""
return obj.participants.count()
return obj.participants.values_list('id', flat=True)
organizers = serializers.SerializerMethodField()
def get_organizers(self, obj):
"""Return number of organizers."""
return obj.organizers.count()
return obj.organizers.values_list('user__id', flat=True)
passed = serializers.SerializerMethodField()
def get_passed(self, obj):
def get_passed(self, obj: Visit) -> bool:
"""Return true if the visit already happened, false otherwise."""
return obj.date < now()
......@@ -94,7 +92,8 @@ class VisitSerializer(VisitListSerializer):
fields = ('id', 'title', 'summary', 'description', 'place',
'date', 'deadline', 'passed', 'registrations_open',
'participants', 'organizers',
'attached_files', 'image', 'fact_sheet', 'url',)
'attached_files', 'image', 'fact_sheet',
'url',)
class ParticipationWriteSerializer(serializers.ModelSerializer):
......
......@@ -17,6 +17,9 @@ from .serializers import (ParticipationIdentifySerializer,
class VisitViewSet(viewsets.ReadOnlyModelViewSet):
"""API endpoints that allows visits to be viewed.
When the current user participates in a visit, a `"participates": true`
field is present.
list:
List visits and retrieve partial information about them.
......@@ -33,8 +36,8 @@ class VisitViewSet(viewsets.ReadOnlyModelViewSet):
"deadline": "2018-05-28T23:59:00+02:00",
"passed": false,
"registrations_open": true,
"participants": 0,
"organizers": 1,
"participants": [4],
"organizers": [3],
"image": "http://localhost:8000/media/visits/images/visit-1.jpg",
"url": "http://localhost:8000/api/visits/1/"
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment