from django.test import TestCase from django.contrib.auth.models import User from django.utils import timezone from rest_framework import status from rest_framework.test import APITestCase, APIRequestFactory, force_authenticate from webapp.models import Event from webapp.serializers import EventSerializer from webapp.tests.tag_fixture import tagBuilder, createTagIcon class EventTestCase(APITestCase): def setUp(self): tag1 = tagBuilder() tag2 = tagBuilder("testtag2") self.testTagId = tag1.id # Visible and relevant Event.objects.create( title_fi="Testitapahtuma1", title_en="TestEvent1", visible=True, description_fi="diidadaapa", description_en="diidadaapa EN", content_fi="lorem ipsum", content_en="lorem ipsum EN", start_time=timezone.datetime(2019, 11, 9, 12, 0, 0), end_time=timezone.datetime(2020, 11, 9, 13, 0, 0), location="Testimaa" ) # Invisible but relevant Event.objects.create( title_fi="Testitapahtuma1", title_en="TestEvent2", visible=False, description_fi="diidadaapa", description_en="diidadaapa EN", content_fi="lorem ipsum", content_en="lorem ipsum EN", start_time=timezone.datetime(2018, 12, 9, 12, 0, 0), end_time=timezone.datetime(2020, 12, 9, 13, 0, 0), location="Testimaan kerhohuone" ) # Visible but unrelevant Event.objects.create( title_fi="Testitapahtuma3", title_en="TestEvent3", visible=True, description_fi="diidadaapa", description_en="diidadaapa EN", content_fi="lorem ipsum", content_en="lorem ipsum EN", start_time=timezone.datetime(2018, 12, 9, 12, 0, 0), end_time=timezone.datetime(2018, 12, 9, 13, 0, 0), location="Testimaan kerhohuone" ) # Visible and relevant Event.objects.create( title_fi="Testitapahtuma4", title_en="TestEvent4", visible=True, description_fi="diidadaapa", description_en="diidadaapa EN", content_fi="lorem ipsum", content_en="lorem ipsum EN", start_time=timezone.datetime(2018, 12, 9, 12, 0, 0), end_time=timezone.datetime(2020, 12, 9, 13, 0, 0), location="Testimaan kerhohuone" ) Event.objects.get(title_en="TestEvent1").tags.add(tag1) Event.objects.get(title_en="TestEvent2").tags.add(tag2) self.testEventId = Event.objects.get(title_en="TestEvent1").id self.assertEqual(Event.objects.count(), 4) username, password = 'test_admin', 'password123' self.authClient = User.objects.create_superuser(username, 'myemail@test.com', password) def test_get_events(self): # Get from API response = self.client.get("/api/events/", format="json") # Response 200 self.assertTrue(response.status_code, status.HTTP_200_OK) # Response should not have old events and invisible self.assertEqual(len(response.data["results"]), 2) # Check that serialized data is equal to received response expected_events = EventSerializer( Event.objects.filter(title_en__in=("TestEvent1", "TestEvent4")).order_by("start_time"), many=True, context={ "request": APIRequestFactory().get(r"http://testserver/api/events/") } ) self.assertEqual(response.data["results"], expected_events.data) def test_get_single_event(self): response = self.client.get(f"/api/events/{self.testEventId}/", format="json") self.assertEqual(response.status_code, status.HTTP_200_OK) serializer = EventSerializer( Event.objects.get(title_en="TestEvent1"), context={ "request": APIRequestFactory().get(r"http://testserver/api/events/") } ) self.assertEqual(response.data, serializer.data) def test_get_invalid_event(self): response = self.client.get("/api/events/15/", format="json") self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_post_event(self): # Authenticate self.client.force_authenticate(user=self.authClient) response = self.client.post( "/api/events/", { "tags": [self.testTagId], "tag_id": [self.testTagId], "visible": True, "title": "POST Testi", # "title_fi": "POST Testi", # "title_en": "POST Test", "description": "ABC", # "description_fi": "ABC", # "description_en": "CBA", "content": "Benis", # "content_fi": "Benis", # "content_en": "Bensels :DDD", "start_time": timezone.now(), "end_time": timezone.now(), "signup_id": [] }, format='json' ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(Event.objects.count(), 5) def test_post_event_unauth(self): response = self.client.post( "/api/events/", { "tags": [self.testTagId], "tag_id": [self.testTagId], "visible": True, "title": "POST Testi", # "title_fi": "POST Testi", # "title_en": "POST Test", "description": "ABC", # "description_fi": "ABC", # "description_en": "CBA", "content": "Benis", # "content_fi": "Benis", # "content_en": "Bensels :DDD", "start_time": timezone.now(), "end_time": timezone.now(), "signup_id": [] }, format='json' ) self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) self.assertEqual(Event.objects.count(), 4) def test_update_event(self): pass def test_update_event_unauth(self): pass def test_delete_event(self): pass def test_delete_event_unauth(self): pass