Use context and other test fixes
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
from django.test import TestCase
|
||||
from django.utils import timezone
|
||||
from django.contrib.auth.models import User
|
||||
from rest_framework.test import APITestCase, APIRequestFactory, force_authenticate
|
||||
from django.utils import timezone
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase, APIRequestFactory, force_authenticate
|
||||
|
||||
from webapp.models import Tag, Event
|
||||
from webapp.serializers import EventSerializer
|
||||
|
||||
@@ -87,10 +88,12 @@ class EventTestCase(APITestCase):
|
||||
def test_get_single_event(self):
|
||||
response = self.client.get(f"/api/events/{self.testEventId}/", format="json")
|
||||
result = response.data
|
||||
# Remove tags because of API call having also domain name added to icon URL
|
||||
result.pop("tags")
|
||||
serialized = EventSerializer(Event.objects.get(title="TestEvent1")).data
|
||||
serialized.pop("tags")
|
||||
serialized = EventSerializer(
|
||||
Event.objects.get(title="TestEvent1"),
|
||||
context={
|
||||
"request": APIRequestFactory().get(r"http://testserver/api/events/")
|
||||
}
|
||||
).data
|
||||
self.assertEqual(
|
||||
result,
|
||||
serialized
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth.models import User
|
||||
from rest_framework.test import APITestCase
|
||||
from rest_framework import status
|
||||
from rest_framework.test import force_authenticate
|
||||
from rest_framework.test import APITestCase, APIRequestFactory, force_authenticate
|
||||
|
||||
from webapp.models import Tag, Feed
|
||||
from webapp.serializers import FeedSerializer
|
||||
|
||||
@@ -33,13 +33,11 @@ class FeedTestCase(APITestCase):
|
||||
self.assertTrue(status.is_success(response.status_code))
|
||||
|
||||
feeds = Feed.objects.all()
|
||||
serializer = FeedSerializer(feeds, many=True)
|
||||
|
||||
# DRF extends path given by serializer with the protocol and domain for icon
|
||||
# Ignore tag on serializer and response. This is tested on TagTestCase.
|
||||
# Note that we assume the length here to be 1
|
||||
response.data['results'][0].pop('tags')
|
||||
serializer.data[0].pop('tags')
|
||||
serializer = FeedSerializer(
|
||||
feeds, many=True,
|
||||
context={
|
||||
"request": APIRequestFactory().get(r"http://testserver/api/events/")
|
||||
})
|
||||
self.assertEqual(response.data['results'], serializer.data)
|
||||
|
||||
def test_post_feed(self):
|
||||
|
||||
+48
-43
@@ -1,6 +1,8 @@
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth.models import User
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
from rest_framework.test import APITestCase, APIRequestFactory, force_authenticate
|
||||
|
||||
from webapp.models import Tag
|
||||
from webapp.serializers import TagSerializer
|
||||
|
||||
@@ -13,58 +15,61 @@ class TagsTestCase(APITestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.icon = tempfile.NamedTemporaryFile(suffix=".jpg").name
|
||||
Tag.objects.create(slug='Party', name_fi='Bileet', name_en="Partytime", icon=self.icon)
|
||||
self.tag_id = Tag.objects.create(slug='Party', name_fi='Bileet', name_en="Partytime", icon=self.icon).id
|
||||
Tag.objects.create(slug='OFF', name_fi='Virallinen', name_en="Official", icon=self.icon)
|
||||
self.assertEqual(Tag.objects.count(), 2)
|
||||
|
||||
username, password = 'test_admin', 'password123'
|
||||
self.authClient = User.objects.create_superuser(username, 'myemail@test.com', password)
|
||||
|
||||
def test_get_single_tag(self):
|
||||
self.assertEqual(Tag.objects.count(), 1)
|
||||
response = self.client.get('/api/tags/', format='json')
|
||||
self.assertTrue(status.is_success(response.status_code))
|
||||
response = self.client.get(f"/api/tags/{self.tag_id}/", format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
|
||||
# We dont care about icon, so response is sliced
|
||||
sliced_response = OrderedDict(islice(response.data['results'][0].items(), 3))
|
||||
tag1 = Tag.objects.get(slug="Party")
|
||||
self.assertEqual(sliced_response, {'id': tag1.id, 'slug': 'Party', 'name_fi': 'Bileet'})
|
||||
|
||||
def test_get_single_tag_serializer(self):
|
||||
response = self.client.get('/api/tags/', format='json')
|
||||
self.assertTrue(status.is_success(response.status_code))
|
||||
|
||||
tags = Tag.objects.all()
|
||||
serializer = TagSerializer(tags, many=True)
|
||||
# Icon on serializer is returned without protocol and domain
|
||||
# Assert these individually
|
||||
resp_icon = response.data['results'][0].pop('icon')
|
||||
serial_icon = serializer.data[0].pop('icon')
|
||||
self.assertEqual(response.data['results'], serializer.data)
|
||||
self.assertEqual(resp_icon, "http://testserver" + serial_icon)
|
||||
tags = Tag.objects.get(id=self.tag_id)
|
||||
serializer = TagSerializer(
|
||||
tags, context={
|
||||
"request": APIRequestFactory().get(r"http://testserver/api/events/")
|
||||
})
|
||||
self.assertEqual(response.data, serializer.data)
|
||||
|
||||
def test_get_multiple_tags(self):
|
||||
self.assertEqual(Tag.objects.count(), 1)
|
||||
Tag.objects.create(slug='Freshmen', name_fi='Fuksit', icon=self.icon)
|
||||
Tag.objects.create(slug='International', name_fi='Ulkkarit', icon=self.icon)
|
||||
self.assertEqual(Tag.objects.count(), 3)
|
||||
self.assertEqual(Tag.objects.count(), 4)
|
||||
|
||||
response = self.client.get('/api/tags/', format='json')
|
||||
self.assertTrue(status.is_success(response.status_code))
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
|
||||
# We dont care about icon, so response is sliced
|
||||
tag1 = Tag.objects.get(slug="Party")
|
||||
sliced_response = OrderedDict(islice(response.data['results'][0].items(), 3))
|
||||
self.assertEqual(sliced_response, {'id': tag1.id, 'slug': 'Party', 'name_fi': 'Bileet'})
|
||||
sliced_response = OrderedDict(islice(response.data['results'][1].items(), 3))
|
||||
tag2 = Tag.objects.get(slug="Freshmen")
|
||||
self.assertEqual(sliced_response, {'id': tag2.id, 'slug': 'Freshmen', 'name_fi': 'Fuksit'})
|
||||
sliced_response = OrderedDict(islice(response.data['results'][2].items(), 3))
|
||||
tag3 = Tag.objects.get(slug="International")
|
||||
self.assertEqual(sliced_response, {'id': tag3.id, 'slug': 'International', 'name_fi': 'Ulkkarit'})
|
||||
expected = TagSerializer(
|
||||
Tag.objects.all(), many=True,
|
||||
context={
|
||||
"request": APIRequestFactory().get(r"http://testserver/api/events/")
|
||||
}).data
|
||||
|
||||
def test_create_tag(self):
|
||||
self.assertEqual(Tag.objects.count(), 1)
|
||||
response = self.client.post('/api/tags/', {'slug': 'Test', 'name_fi': 'Testinimi', 'icon': self.icon}, format='multipart')
|
||||
self.assertFalse(status.is_success(response.status_code))
|
||||
self.assertEqual(Tag.objects.count(), 1)
|
||||
self.assertEqual(
|
||||
response.data['results'],
|
||||
expected
|
||||
)
|
||||
|
||||
def test_invalid_tag(self):
|
||||
self.assertEqual(Tag.objects.count(), 1)
|
||||
response = self.client.get('/api/tags/15', format='json', follow=True)
|
||||
def test_get_invalid_tag(self):
|
||||
response = self.client.get('/api/tags/15/', format='json', follow=True)
|
||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# READ ONLY API!
|
||||
def test_create_tag(self):
|
||||
# Authenticate
|
||||
self.client.force_authenticate(user=self.authClient)
|
||||
response = self.client.post(
|
||||
"/api/tags/",
|
||||
{
|
||||
"slug": "Test",
|
||||
"name": "Testinimi",
|
||||
"name_fi": "Testinimi",
|
||||
"name_en": "Test name",
|
||||
"icon": self.icon
|
||||
},
|
||||
format='json'
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
|
||||
self.assertEqual(Tag.objects.count(), 2)
|
||||
|
||||
Reference in New Issue
Block a user