from django.contrib.auth.models import User from rest_framework import status from rest_framework.test import APITestCase, APIRequestFactory from webapp.models import Feed from webapp.serializers import FeedSerializer from webapp.tests.tag_fixture import tagBuilder URL = "/api/feed/" class FeedTestCase(APITestCase): def setUp(self): tag1 = tagBuilder() tag2 = tagBuilder("testtag2") feed = Feed.objects.create( title="TestFeed", visible=True, description="diidadaapa", content="lorem ipsum", ) feed.tags.add(tag1) feed.tags.add(tag2) self.assertEqual(Feed.objects.count(), 1) self.assertEqual(Feed.objects.all()[0].tags.count(), 2) self.feedId = feed.id username, password = "test_admin", "password123" self.authClient = User.objects.create_superuser( username, "myemail@test.com", password ) def test_get_feed(self): response = self.client.get(URL, format="json") self.assertTrue(status.is_success(response.status_code)) feeds = Feed.objects.all() serializer = FeedSerializer( feeds, many=True, context={ "request": APIRequestFactory().get(r"http://testserver/api/feed/") }, ) self.assertEqual(response.data["results"], serializer.data) def test_post_feed(self): tag1_id = tagBuilder("test1").id tag2_id = tagBuilder("test2").id data = { "tag_id": [tag1_id, tag2_id], "title_fi": "testtitle", "title_en": "testtitle", "visible": "True", "description_fi": "liirumlaarum", "description_en": "liirumlaarum", "content_fi": "lorem ipsum", "content_en": "lorem ipsum", } # Try post without authentication response = self.client.post(URL, data, format="json") self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) self.assertEqual(Feed.objects.count(), 1) # Authenticate self.client.force_authenticate(user=self.authClient) response = self.client.post(URL, data, format="json") # Return success and check object was created self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(Feed.objects.count(), 2) created = Feed.objects.get(title_fi="testtitle") self.assertEqual(created.tags.count(), 2) def test_post_delete(self): response = self.client.delete( f"{URL}{self.feedId}/", ) self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) self.assertEqual(Feed.objects.count(), 1) # Authenticate self.client.force_authenticate(user=self.authClient) response = self.client.delete(f"{URL}{self.feedId}/") # Soft delete self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(Feed.objects.count(), 1) self.assertEqual(Feed.objects.get(id=self.feedId).deleted, True)