import json from django.urls import reverse import mock from rest_framework import status from rest_framework.test import APITestCase from django_images.models import Thumbnail from taggit.models import Tag from .helpers import create_image, create_user, create_pin from core.models import Pin, Image def mock_requests_get(url, **kwargs): response = mock.Mock(content=open('logo.png', 'rb').read()) return response class ImageTests(APITestCase): def test_post_create_unsupported(self): url = reverse("image-list") data = {} response = self.client.post( url, data=data, format='json', ) self.assertEqual(response.status_code, 403, response.data) class PinTests(APITestCase): _JSON_TYPE = "application/json" def setUp(self): super(PinTests, self).setUp() self.user = create_user("default") self.client.login(username=self.user.username, password='password') def tearDown(self): Pin.objects.all().delete() Image.objects.all().delete() Tag.objects.all().delete() @mock.patch('requests.get', mock_requests_get) def test_should_create_pin(self): url = 'http://testserver.com/mocked/logo-01.png' create_url = reverse("pin-list") referer = 'http://testserver.com/' post_data = { 'url': url, 'referer': referer, 'description': 'That\'s an Apple!' } response = self.client.post(create_url, data=post_data, format="json") self.assertEqual(response.status_code, status.HTTP_201_CREATED) pin = Pin.objects.get(url=url) self.assertIsNotNone(pin.image.image) @mock.patch('requests.get', mock_requests_get) def test_post_create_url_with_empty_tags(self): url = 'http://testserver.com/mocked/logo-02.png' create_url = reverse("pin-list") referer = 'http://testserver.com/' post_data = { 'url': url, 'referer': referer, 'description': 'That\'s an Apple!', 'tags': [] } response = self.client.post(create_url, data=post_data, format="json") self.assertEqual( response.status_code, status.HTTP_201_CREATED, response.json() ) self.assertEqual(Image.objects.count(), 1) pin = Pin.objects.get(url=url) self.assertIsNotNone(pin.image.image) self.assertEqual(pin.tags.count(), 0) def test_should_post_create_pin_with_existed_image(self): image = create_image() create_pin(self.user, image=image, tags=[]) create_url = reverse("pin-list") referer = 'http://testserver.com/' post_data = { 'referer': referer, 'image_by_id': image.pk, 'description': 'That\'s something else (probably a CC logo)!', 'tags': ['random', 'tags'], } response = self.client.post(create_url, data=post_data, format="json") resp_data = response.json() self.assertEqual(response.status_code, status.HTTP_201_CREATED, resp_data) self.assertEqual( resp_data['description'], 'That\'s something else (probably a CC logo)!', resp_data ) self.assertEquals(Pin.objects.count(), 2) def test_patch_detail_unauthenticated(self): image = create_image() pin = create_pin(self.user, image, []) self.client.logout() uri = reverse("pin-detail", kwargs={"pk": pin.pk}) response = self.client.patch(uri, format='json', data={}) self.assertEqual(response.status_code, 403) def test_patch_detail(self): image = create_image() pin = create_pin(self.user, image, []) uri = reverse("pin-detail", kwargs={"pk": pin.pk}) new = {'description': 'Updated description'} response = self.client.patch( uri, new, format="json", ) self.assertEqual(response.status_code, status.HTTP_200_OK, response.json()) self.assertEqual(Pin.objects.count(), 1) self.assertEqual(Pin.objects.get(pk=pin.pk).description, new['description']) def test_delete_detail_unauthenticated(self): image = create_image() pin = create_pin(self.user, image, []) uri = reverse("pin-detail", kwargs={"pk": pin.pk}) self.client.logout() self.assertEqual(self.client.delete(uri).status_code, 403) def test_delete_detail(self): image = create_image() pin = create_pin(self.user, image, []) uri = reverse("pin-detail", kwargs={"pk": pin.pk}) self.client.delete(uri) self.assertEqual(Pin.objects.count(), 0)