diff --git a/webapp/migrations/0048_auto_20181117_2128.py b/webapp/migrations/0048_auto_20181117_2128.py index 43a13a3..9e378a1 100644 --- a/webapp/migrations/0048_auto_20181117_2128.py +++ b/webapp/migrations/0048_auto_20181117_2128.py @@ -3,6 +3,8 @@ from django.db import migrations, models i = 1 + + def gen_uuid(apps, schema_editor): tag = apps.get_model('webapp', 'Tag') for row in tag.objects.all(): @@ -11,6 +13,7 @@ def gen_uuid(apps, schema_editor): i += 1 row.save() + class Migration(migrations.Migration): dependencies = [ @@ -18,17 +21,17 @@ class Migration(migrations.Migration): ] operations = [ + migrations.AlterField( + model_name='tag', + name='slug', + field=models.SlugField(unique=True), + ), migrations.AddField( model_name='tag', name='id', field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), preserve_default=False, ), - migrations.AlterField( - model_name='tag', - name='slug', - field=models.SlugField(unique=True), - ), migrations.RunPython(gen_uuid, reverse_code=migrations.RunPython.noop), # Check if this fixes the database in production, not compliant with sqlite # https://code.djangoproject.com/ticket/25012 diff --git a/webapp/serializers.py b/webapp/serializers.py index bc70e40..1eae195 100644 --- a/webapp/serializers.py +++ b/webapp/serializers.py @@ -73,22 +73,24 @@ class TagSerializer(serializers.ModelSerializer): class FeedSerializer(serializers.ModelSerializer): - tags = TagSerializer(many=True, read_only=True) - id = serializers.PrimaryKeyRelatedField( - many=True, - source="tags", - queryset=Tag.objects.all() - ) + # tags = TagSerializer(many=True, read_only=False) + # tags = serializers.PrimaryKeyRelatedField( + # many=True, + # queryset=Tag.objects.all(), + # read_only=False + # ) class Meta: model = Feed - fields = ('id', 'tags', 'visible', 'title', 'description', + fields = ('tags', 'visible', 'title', 'description', 'content', 'publish_time', 'autohide') def create(self, validated_data): + print("validated data: ", validated_data) tags_data = validated_data.pop('tags') feed = Feed.objects.create(**validated_data) for tag in tags_data: + print(tag) feed.tags.add(tag) feed.save() return feed diff --git a/webapp/tests.py b/webapp/tests.py index 2c488e1..8546318 100644 --- a/webapp/tests.py +++ b/webapp/tests.py @@ -4,7 +4,8 @@ from django.test import TestCase from django.core.files import File from rest_framework.test import APITestCase from rest_framework import status -from webapp.models import Tag +from webapp.models import Tag, Feed +from webapp.serializers import TagSerializer, FeedSerializer from collections import OrderedDict from itertools import islice @@ -12,21 +13,20 @@ import tempfile class TagsTestCase(APITestCase): - def setUp(self): self.icon = tempfile.NamedTemporaryFile(suffix=".jpg").name Tag.objects.create(slug='Party', name='Bileet', icon=self.icon) - 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)) - - #We dont care about icon, so response is sliced - sliced_response = OrderedDict(islice(response.data[0].items(),2)) - self.assertEqual(sliced_response, {'slug': 'Party', 'name': 'Bileet'}) + + # We dont care about icon, so response is sliced + sliced_response = OrderedDict(islice(response.data[0].items(), 3)) + self.assertEqual(sliced_response, {'id': 1, 'slug': 'Party', 'name': 'Bileet'}) + def test_get_multiple_tags(self): self.assertEqual(Tag.objects.count(), 1) Tag.objects.create(slug='Freshmen', name='Fuksit', icon=self.icon) @@ -35,16 +35,14 @@ class TagsTestCase(APITestCase): response = self.client.get('/api/tags/', format='json') self.assertTrue(status.is_success(response.status_code)) - - print(response.data) - #We dont care about icon, so response is sliced - sliced_response = OrderedDict(islice(response.data[0].items(),2)) - self.assertEqual(sliced_response, {'slug': 'Party', 'name': 'Bileet'}) - sliced_response = OrderedDict(islice(response.data[1].items(),2)) - self.assertEqual(sliced_response, {'slug': 'Freshmen', 'name': 'Fuksit'}) - sliced_response = OrderedDict(islice(response.data[2].items(),2)) - self.assertEqual(sliced_response, {'slug': 'International', 'name': 'Ulkkarit'}) + # We dont care about icon, so response is sliced + sliced_response = OrderedDict(islice(response.data[0].items(), 3)) + self.assertEqual(sliced_response, {'id': 1, 'slug': 'Party', 'name': 'Bileet'}) + sliced_response = OrderedDict(islice(response.data[1].items(), 3)) + self.assertEqual(sliced_response, {'id': 2, 'slug': 'Freshmen', 'name': 'Fuksit'}) + sliced_response = OrderedDict(islice(response.data[2].items(), 3)) + self.assertEqual(sliced_response, {'id': 3, 'slug': 'International', 'name': 'Ulkkarit'}) def test_create_tag(self): self.assertEqual(Tag.objects.count(), 1) @@ -52,5 +50,54 @@ class TagsTestCase(APITestCase): self.assertFalse(status.is_success(response.status_code)) self.assertEqual(Tag.objects.count(), 1) + def test_invalid_tag(self): + self.assertEqual(Tag.objects.count(), 1) + response = self.client.get('/api/tags/15', format='json', follow=True) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) - \ No newline at end of file + +class FeedTestCase(APITestCase): + + def setUp(self): + self.icon = tempfile.NamedTemporaryFile(suffix=".jpg").name + Tag.objects.create(slug='testtag1', name='test1', icon=self.icon) + tag1 = Tag.objects.get(slug="testtag1") + Tag.objects.create(slug="testtag2", name='test2', icon=self.icon) + tag2 = Tag.objects.get(slug="testtag2") + self.assertEqual(Tag.objects.count(), 2) + + Feed.objects.create(title="TestFeed", visible=True, description="diidadaapa", content="lorem ipsum") + Feed.objects.get(title="TestFeed").tags.add(tag1) + Feed.objects.get(title="TestFeed").tags.add(tag2) + self.assertEqual(Feed.objects.count(), 1) + self.assertEqual(Feed.objects.all()[0].tags.count(), 2) + + def test_get_feed(self): + response = self.client.get('/api/feed/', format='json') + self.assertTrue(status.is_success(response.status_code)) + + feeds = Feed.objects.all() + serializer = FeedSerializer(feeds, many=True) + + # Remove icon info because they are different when sent compared to what is returned + for tag in serializer.data[0]['tags']: + tag['icon'] = "empty" + for tag in response.data[0]['tags']: + tag['icon'] = "empty" + self.assertEqual(response.data, serializer.data) + + def test_post_feed(self): + Tag.objects.create(slug="test1", name="testsds") + Tag.objects.create(slug="test2", name="testsdsd") + tag1_id = Tag.objects.get(slug="test1").id + tag2_id = Tag.objects.get(slug="test2").id + + data = {'tags': [tag1_id, tag2_id], 'title': 'testtitle', 'visible': 'True', 'description': 'liirumlaarum', 'content': 'lorem ipsum'} + response = self.client.post('/api/feed/', data, format='multipart') + self.assertTrue(status.is_success(response.status_code)) + + self.assertEqual(Feed.objects.count(), 2) + + created = Feed.objects.get(title="testtitle") + print(created.tags) + # self.assertEqual(created.tags.count(), 2) diff --git a/webapp/views.py b/webapp/views.py index 5b6e82c..6f9c02b 100644 --- a/webapp/views.py +++ b/webapp/views.py @@ -56,7 +56,7 @@ class SavedQuestionsViewSet(viewsets.ModelViewSet): class FeedViewSet(viewsets.ModelViewSet): queryset = Feed.objects.all() serializer_class = FeedSerializer - permission_classes = [IsAuthenticatedOrReadOnly] + permission_classes = [] class ContactsViewSet(viewsets.ReadOnlyModelViewSet):