Files
web2.0-backend/webapp/tests/test_event.py
T
2019-11-10 01:20:14 +02:00

141 lines
5.3 KiB
Python

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
from webapp.tests.event_fixture import createEventObject, createEventJSON
class EventTestCase(APITestCase):
def setUp(self):
# Visible and relevant
test1 = createEventObject(
"Testitapahtuma1",
start_time=timezone.datetime(2019, 11, 9, 12, 0, 0))
# Invisible but relevant
createEventObject(
"Testitapahtuma2",
visible=False,
start_time=timezone.datetime(2018, 11, 9, 12, 0, 0))
# Visible but unrelevant
test2 = createEventObject(
"Testitapahtuma3",
visible=True,
start_time=timezone.datetime(2018, 12, 9, 12, 0, 0),
end_time=timezone.datetime(2018, 12, 9, 13, 0, 0))
# Visible and relevant
createEventObject(
"Testitapahtuma4",
visible=True,
start_time=timezone.datetime(2018, 12, 9, 12, 0, 0))
# Add some tags
tag1 = tagBuilder()
tag2 = tagBuilder("testtag2")
self.testTagId = tag1.id
test1.tags.add(tag1)
test2.tags.add(tag2)
self.testEventId = test1.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_fi__in=("Testitapahtuma1", "Testitapahtuma4")).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_fi="Testitapahtuma1"),
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/200/", 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/",
createEventJSON(tag_id=[self.testTagId]),
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/",
createEventJSON(tag_id=[self.testTagId]),
format="json"
)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
self.assertEqual(Event.objects.count(), 4)
def test_update_event(self):
# Authenticate
self.client.force_authenticate(user=self.authClient)
event = Event.objects.get(id=self.testEventId)
new = createEventJSON(name="Update1")
response = self.client.put(
f"/api/events/{self.testEventId}/",
new,
format="json"
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
event = Event.objects.get(id=self.testEventId)
self.assertEqual(event.title_fi, "title_fi Update1")
self.assertEqual(Event.objects.count(), 4)
def test_update_event_unauth(self):
response = self.client.put(
f"/api/events/{self.testEventId}/",
createEventJSON(name="Update1"),
format="json"
)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
event = Event.objects.get(id=self.testEventId)
self.assertEqual(event.title_fi, "Testitapahtuma1")
self.assertEqual(Event.objects.count(), 4)
def test_delete_event(self):
response = self.client.delete(f"/api/events/{self.testEventId}/",)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
self.assertEqual(Event.objects.count(), 4)
# Authenticate
self.client.force_authenticate(user=self.authClient)
response = self.client.delete(f"/api/events/{self.testEventId}/")
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(Event.objects.count(), 3)