mirror of
https://gitlab.crans.org/bde/nk20
synced 2024-12-29 10:52:20 +00:00
a6b479db19
- /apps/activity/api/serializers.py - /apps/activity/api/urls.py - /apps/activity/api/views.py - /apps/activity/tests/test_activities.py - /apps/activity/__init__.py - /apps/activity/admin.py - /apps/activity/apps.py - /apps/activity/forms.py - /apps/activity/tables.py - /apps/activity/urls.py - /apps/activity/views.py - /apps/api/__init__.py - /apps/api/apps.py - /apps/api/serializers.py - /apps/api/tests.py - /apps/api/urls.py - /apps/api/views.py - /apps/api/viewsets.py - /apps/logs/signals.py - /apps/logs/apps.py - /apps/logs/__init__.py - /apps/logs/api/serializers.py - /apps/logs/api/urls.py - /apps/logs/api/views.py - /apps/member/api/serializers.py - /apps/member/api/urls.py - /apps/member/api/views.py - /apps/member/templatetags/memberinfo.py - /apps/member/__init__.py - /apps/member/admin.py - /apps/member/apps.py - /apps/member/auth.py - /apps/member/forms.py - /apps/member/hashers.py - /apps/member/signals.py - /apps/member/tables.py - /apps/member/urls.py - /apps/member/views.py - /apps/note/api/serializers.py - /apps/note/api/urls.py - /apps/note/api/views.py - /apps/note/models/__init__.py - /apps/note/static/note/js/consos.js - /apps/note/templates/note/mails/negative_balance.txt - /apps/note/templatetags/getenv.py - /apps/note/templatetags/pretty_money.py - /apps/note/tests/test_transactions.py - /apps/note/__init__.py - /apps/note/admin.py - /apps/note/apps.py - /apps/note/forms.py - /apps/note/signals.py - /apps/note/tables.py - /apps/note/urls.py - /apps/note/views.py - /apps/permission/api/serializers.py - /apps/permission/api/urls.py - /apps/permission/api/views.py - /apps/permission/templatetags/perms.py - /apps/permission/tests/test_oauth2.py - /apps/permission/tests/test_permission_denied.py - /apps/permission/tests/test_permission_queries.py - /apps/permission/tests/test_rights_page.py - /apps/permission/__init__.py - /apps/permission/admin.py - /apps/permission/backends.py - /apps/permission/apps.py - /apps/permission/decorators.py - /apps/permission/permissions.py - /apps/permission/scopes.py - /apps/permission/signals.py - /apps/permission/tables.py - /apps/permission/urls.py - /apps/permission/views.py - /apps/registration/tests/test_registration.py - /apps/registration/__init__.py - /apps/registration/apps.py - /apps/registration/forms.py - /apps/registration/tables.py - /apps/registration/tokens.py - /apps/registration/urls.py - /apps/registration/views.py - /apps/treasury/api/serializers.py - /apps/treasury/api/urls.py - /apps/treasury/api/views.py - /apps/treasury/templatetags/escape_tex.py - /apps/treasury/tests/test_treasury.py - /apps/treasury/__init__.py - /apps/treasury/admin.py - /apps/treasury/apps.py - /apps/treasury/forms.py - /apps/treasury/signals.py - /apps/treasury/tables.py - /apps/treasury/urls.py - /apps/treasury/views.py - /apps/wei/api/serializers.py - /apps/wei/api/urls.py - /apps/wei/api/views.py - /apps/wei/forms/surveys/__init__.py - /apps/wei/forms/surveys/base.py - /apps/wei/forms/surveys/wei2021.py - /apps/wei/forms/surveys/wei2022.py - /apps/wei/forms/surveys/wei2023.py - /apps/wei/forms/__init__.py - /apps/wei/forms/registration.py - /apps/wei/management/commands/export_wei_registrations.py - /apps/wei/management/commands/import_scores.py - /apps/wei/management/commands/wei_algorithm.py - /apps/wei/templates/wei/weilist_sample.tex - /apps/wei/tests/test_wei_algorithm_2021.py - /apps/wei/tests/test_wei_algorithm_2022.py - /apps/wei/tests/test_wei_algorithm_2023.py - /apps/wei/tests/test_wei_registration.py - /apps/wei/__init__.py - /apps/wei/admin.py - /apps/wei/apps.py - /apps/wei/tables.py - /apps/wei/urls.py - /apps/wei/views.py - /note_kfet/settings/__init__.py - /note_kfet/settings/base.py - /note_kfet/settings/development.py - /note_kfet/settings/secrets_example.py - /note_kfet/static/js/base.js - /note_kfet/admin.py - /note_kfet/inputs.py - /note_kfet/middlewares.py - /note_kfet/urls.py - /note_kfet/views.py - /note_kfet/wsgi.py - /entrypoint.sh
234 lines
8.6 KiB
Python
234 lines
8.6 KiB
Python
# Copyright (C) 2018-2024 by BDE ENS Paris-Saclay
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
from datetime import timedelta
|
|
|
|
from api.tests import TestAPI
|
|
from django.contrib.auth.models import User
|
|
from django.test import TestCase
|
|
from django.urls import reverse
|
|
from django.utils import timezone
|
|
from member.models import Club
|
|
|
|
from ..api.views import ActivityTypeViewSet, ActivityViewSet, EntryViewSet, GuestViewSet
|
|
from ..models import Activity, ActivityType, Guest, Entry
|
|
|
|
|
|
class TestActivities(TestCase):
|
|
"""
|
|
Test activities
|
|
"""
|
|
fixtures = ('initial',)
|
|
|
|
def setUp(self):
|
|
self.user = User.objects.create_superuser(
|
|
username="admintoto",
|
|
password="tototototo",
|
|
email="toto@example.com"
|
|
)
|
|
self.client.force_login(self.user)
|
|
|
|
sess = self.client.session
|
|
sess["permission_mask"] = 42
|
|
sess.save()
|
|
|
|
self.activity = Activity.objects.create(
|
|
name="Activity",
|
|
description="This is a test activity\non two very very long lines\nbecause this is very important.",
|
|
location="Earth",
|
|
activity_type=ActivityType.objects.get(name="Pot"),
|
|
creater=self.user,
|
|
organizer=Club.objects.get(name="Kfet"),
|
|
attendees_club=Club.objects.get(name="Kfet"),
|
|
date_start=timezone.now(),
|
|
date_end=timezone.now() + timedelta(days=2),
|
|
valid=True,
|
|
)
|
|
|
|
self.guest = Guest.objects.create(
|
|
activity=self.activity,
|
|
inviter=self.user.note,
|
|
last_name="GUEST",
|
|
first_name="Guest",
|
|
)
|
|
|
|
def test_activity_list(self):
|
|
"""
|
|
Display the list of all activities
|
|
"""
|
|
response = self.client.get(reverse("activity:activity_list"))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_activity_create(self):
|
|
"""
|
|
Create a new activity
|
|
"""
|
|
response = self.client.get(reverse("activity:activity_create"))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
response = self.client.post(reverse("activity:activity_create"), data=dict(
|
|
name="Activity created",
|
|
description="This activity was successfully created.",
|
|
location="Earth",
|
|
activity_type=ActivityType.objects.get(name="Soirée de club").id,
|
|
creater=self.user.id,
|
|
organizer=Club.objects.get(name="Kfet").id,
|
|
attendees_club=Club.objects.get(name="Kfet").id,
|
|
date_start="{:%Y-%m-%d %H:%M}".format(timezone.now()),
|
|
date_end="{:%Y-%m-%d %H:%M}".format(timezone.now() + timedelta(days=2)),
|
|
valid=True,
|
|
))
|
|
self.assertTrue(Activity.objects.filter(name="Activity created").exists())
|
|
activity = Activity.objects.get(name="Activity created")
|
|
self.assertRedirects(response, reverse("activity:activity_detail", args=(activity.pk,)), 302, 200)
|
|
|
|
def test_activity_detail(self):
|
|
"""
|
|
Display the detail of an activity
|
|
"""
|
|
response = self.client.get(reverse("activity:activity_detail", args=(self.activity.pk,)))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_activity_update(self):
|
|
"""
|
|
Update an activity
|
|
"""
|
|
response = self.client.get(reverse("activity:activity_update", args=(self.activity.pk,)))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
response = self.client.post(reverse("activity:activity_update", args=(self.activity.pk,)), data=dict(
|
|
name=str(self.activity) + " updated",
|
|
description="This activity was successfully updated.",
|
|
location="Earth",
|
|
activity_type=ActivityType.objects.get(name="Autre").id,
|
|
creater=self.user.id,
|
|
organizer=Club.objects.get(name="Kfet").id,
|
|
attendees_club=Club.objects.get(name="Kfet").id,
|
|
date_start="{:%Y-%m-%d %H:%M}".format(timezone.now()),
|
|
date_end="{:%Y-%m-%d %H:%M}".format(timezone.now() + timedelta(days=2)),
|
|
valid=True,
|
|
))
|
|
self.assertTrue(Activity.objects.filter(name="Activity updated").exists())
|
|
self.assertRedirects(response, reverse("activity:activity_detail", args=(self.activity.pk,)), 302, 200)
|
|
|
|
def test_activity_entry(self):
|
|
"""
|
|
Create some entries
|
|
"""
|
|
self.activity.open = True
|
|
self.activity.save()
|
|
|
|
response = self.client.get(reverse("activity:activity_entry", args=(self.activity.pk,)))
|
|
self.assertEqual(response.status_code, 200)
|
|
response = self.client.get(reverse("activity:activity_entry", args=(self.activity.pk,)) + "?search=guest")
|
|
self.assertEqual(response.status_code, 200)
|
|
response = self.client.get(reverse("activity:activity_entry", args=(self.activity.pk,)) + "?search=admin")
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# User entry
|
|
response = self.client.post("/api/activity/entry/", data=dict(
|
|
activity=self.activity.id,
|
|
note=self.user.note.id,
|
|
guest="",
|
|
))
|
|
self.assertEqual(response.status_code, 201) # 201 = Created
|
|
self.assertTrue(Entry.objects.filter(note=self.user.note, guest=None, activity=self.activity).exists())
|
|
|
|
# Guest entry
|
|
response = self.client.post("/api/activity/entry/", data=dict(
|
|
activity=self.activity.id,
|
|
note=self.user.note.id,
|
|
guest=self.guest.id,
|
|
))
|
|
self.assertEqual(response.status_code, 201) # 201 = Created
|
|
self.assertTrue(Entry.objects.filter(note=self.user.note, guest=self.guest.id, activity=self.activity).exists())
|
|
|
|
def test_activity_invite(self):
|
|
"""
|
|
Try to invite people to an activity
|
|
"""
|
|
response = self.client.get(reverse("activity:activity_invite", args=(self.activity.pk,)))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# The activity is started, can't invite
|
|
response = self.client.post(reverse("activity:activity_invite", args=(self.activity.pk,)), data=dict(
|
|
activity=self.activity.id,
|
|
inviter=self.user.note.id,
|
|
last_name="GUEST2",
|
|
first_name="Guest",
|
|
))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
self.activity.date_start += timedelta(days=1)
|
|
self.activity.save()
|
|
|
|
response = self.client.post(reverse("activity:activity_invite", args=(self.activity.pk,)), data=dict(
|
|
activity=self.activity.id,
|
|
inviter=self.user.note.id,
|
|
last_name="GUEST2",
|
|
first_name="Guest",
|
|
))
|
|
self.assertRedirects(response, reverse("activity:activity_detail", args=(self.activity.pk,)), 302, 200)
|
|
|
|
def test_activity_ics(self):
|
|
"""
|
|
Render the ICS calendar
|
|
"""
|
|
response = self.client.get(reverse("activity:calendar_ics"))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
class TestActivityAPI(TestAPI):
|
|
def setUp(self) -> None:
|
|
super().setUp()
|
|
|
|
self.activity = Activity.objects.create(
|
|
name="Activity",
|
|
description="This is a test activity\non two very very long lines\nbecause this is very important.",
|
|
location="Earth",
|
|
activity_type=ActivityType.objects.get(name="Pot"),
|
|
creater=self.user,
|
|
organizer=Club.objects.get(name="Kfet"),
|
|
attendees_club=Club.objects.get(name="Kfet"),
|
|
date_start=timezone.now(),
|
|
date_end=timezone.now() + timedelta(days=2),
|
|
valid=True,
|
|
)
|
|
|
|
self.guest = Guest.objects.create(
|
|
activity=self.activity,
|
|
inviter=self.user.note,
|
|
last_name="GUEST",
|
|
first_name="Guest",
|
|
)
|
|
|
|
self.entry = Entry.objects.create(
|
|
activity=self.activity,
|
|
note=self.user.note,
|
|
guest=self.guest,
|
|
)
|
|
|
|
def test_activity_api(self):
|
|
"""
|
|
Load Activity API page and test all filters and permissions
|
|
"""
|
|
self.check_viewset(ActivityViewSet, "/api/activity/activity/")
|
|
|
|
def test_activity_type_api(self):
|
|
"""
|
|
Load ActivityType API page and test all filters and permissions
|
|
"""
|
|
self.check_viewset(ActivityTypeViewSet, "/api/activity/type/")
|
|
|
|
def test_entry_api(self):
|
|
"""
|
|
Load Entry API page and test all filters and permissions
|
|
"""
|
|
self.check_viewset(EntryViewSet, "/api/activity/entry/")
|
|
|
|
def test_guest_api(self):
|
|
"""
|
|
Load Guest API page and test all filters and permissions
|
|
"""
|
|
self.check_viewset(GuestViewSet, "/api/activity/guest/")
|