class ImageTest(TestCase): def setUp(self): self.gallery = GalleryFactory() self.image = ImageFactory(gallery=self.gallery) def tearDown(self): self.image.delete() self.gallery.delete() def test_get_absolute_url(self): absolute_url = '{0}/{1}'.format(settings.MEDIA_URL, self.image.physical).replace( '//', '/') self.assertEqual(absolute_url, self.image.get_absolute_url()) def test_get_extension(self): self.assertEqual('jpg', self.image.get_extension()) def test_save_and_delete_image(self): test_image = ImageFactory(gallery=self.gallery) image_path = test_image.physical.path self.assertTrue(os.path.isfile(image_path)) test_image.delete() self.assertFalse(os.path.isfile(image_path))
class ImageTest(TestCase): def setUp(self): self.gallery = GalleryFactory() self.image = ImageFactory(gallery=self.gallery) def tearDown(self): self.image.delete() self.gallery.delete() def test_unicode(self): self.assertEqual(self.image.slug, self.image.__unicode__()) def test_get_absolute_url(self): absolute_url = u'{0}/{1}'.format(settings.MEDIA_URL, self.image.physical) self.assertEqual(absolute_url, self.image.get_absolute_url()) def test_get_extension(self): self.assertEqual('jpg', self.image.get_extension()) def test_save_image(self): test_image = ImageFactory(gallery=self.gallery) self.assertTrue(os.path.isfile(test_image.physical.path)) test_image.delete() self.assertFalse(os.path.isfile(test_image.physical.path))
class ImageTest(TestCase): def setUp(self): self.gallery = GalleryFactory() self.image = ImageFactory(gallery=self.gallery) def tearDown(self): self.image.delete() self.gallery.delete() def test_get_absolute_url(self): absolute_url = '{0}/{1}'.format(settings.MEDIA_URL, self.image.physical).replace('//', '/') self.assertEqual(absolute_url, self.image.get_absolute_url()) def test_get_extension(self): self.assertEqual('jpg', self.image.get_extension()) def test_save_and_delete_image(self): test_image = ImageFactory(gallery=self.gallery) image_path = test_image.physical.path self.assertTrue(os.path.isfile(image_path)) test_image.delete() self.assertFalse(os.path.isfile(image_path))
class ImageTest(TestCase): def setUp(self): self.gallery = GalleryFactory() self.image = ImageFactory(gallery=self.gallery) def tearDown(self): self.image.delete() self.gallery.delete() def test_get_absolute_url(self): absolute_url = f"{settings.MEDIA_URL}/{self.image.physical}".replace("//", "/") self.assertEqual(absolute_url, self.image.get_absolute_url()) def test_get_extension(self): self.assertEqual("jpg", self.image.get_extension()) def test_save_and_delete_image(self): test_image = ImageFactory(gallery=self.gallery) image_path = test_image.physical.path self.assertTrue(os.path.isfile(image_path)) test_image.delete() self.assertFalse(os.path.isfile(image_path))
class ImageDetailAPITest(APITestCase): def setUp(self): self.profile = ProfileFactory() self.other = ProfileFactory() self.client = APIClient() client_oauth2 = create_oauth2_client(self.profile.user) authenticate_client(self.client, client_oauth2, self.profile.user.username, 'hostel77') self.gallery = GalleryFactory() UserGalleryFactory(user=self.profile.user, gallery=self.gallery) self.image = ImageFactory(gallery=self.gallery) self.gallery_other = GalleryFactory() UserGalleryFactory(user=self.other.user, gallery=self.gallery_other) self.image_other = ImageFactory(gallery=self.gallery_other) self.gallery_shared = GalleryFactory() UserGalleryFactory(user=self.other.user, gallery=self.gallery_shared) UserGalleryFactory(user=self.profile.user, gallery=self.gallery_shared, mode=GALLERY_READ) self.image_shared = ImageFactory(gallery=self.gallery_shared) def test_get_image(self): response = self.client.get( reverse('api:gallery:detail-image', kwargs={'pk_gallery': self.gallery.pk, 'pk': self.image.pk})) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data.get('id'), self.image.pk) self.assertEqual(response.data.get('title'), self.image.title) self.assertEqual(response.data.get('legend'), self.image.legend) self.assertEqual(response.data.get('slug'), self.image.slug) self.assertEqual(response.data.get('thumbnail'), self.image.get_thumbnail_url()) self.assertEqual(response.data.get('url'), self.image.get_absolute_url()) self.assertEqual(response.data.get('permissions'), {'read': True, 'write': True}) def test_get_image_read_permissions(self): response = self.client.get( reverse( 'api:gallery:detail-image', kwargs={'pk_gallery': self.gallery_shared.pk, 'pk': self.image_shared.pk})) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data.get('id'), self.image_shared.pk) self.assertEqual(response.data.get('permissions'), {'read': True, 'write': False}) def test_get_image_fail_permissions(self): response = self.client.get( reverse( 'api:gallery:detail-image', kwargs={'pk_gallery': self.gallery_other.pk, 'pk': self.image_other.pk})) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_put_modify_image(self): title = 'un super titre pour une super image' legend = 'as-tu vu ma légende?' response = self.client.put( reverse('api:gallery:detail-image', kwargs={'pk_gallery': self.gallery.pk, 'pk': self.image.pk}), { 'title': title, 'legend': legend, 'physical': (settings.BASE_DIR / 'fixtures' / 'noir_black.png').open('rb') }, format='multipart' ) self.assertEqual(response.status_code, status.HTTP_200_OK) image = Image.objects.get(pk=self.image.pk) self.assertEqual(image.title, title) self.assertEqual(image.legend, legend) def test_put_fail_modify_image_not_an_image(self): title = 'un super titre pour une super image' legend = 'en vrai je peux pas' response = self.client.put( reverse( 'api:gallery:detail-image', kwargs={'pk_gallery': self.gallery.pk, 'pk': self.image.pk}), { 'title': title, 'legend': legend, 'physical': (settings.BASE_DIR / 'assets' / 'licenses' / '0.svg').open('rb') } ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) image = Image.objects.get(pk=self.image.pk) self.assertNotEqual(image.title, title) self.assertNotEqual(image.legend, legend) def test_put_fail_modify_image_no_permissions(self): title = 'un super titre pour une super image' legend = 'en vrai je peux pas' response = self.client.put( reverse( 'api:gallery:detail-image', kwargs={'pk_gallery': self.gallery_other.pk, 'pk': self.image_other.pk}), { 'title': title, 'legend': legend } ) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_put_fail_modify_image_read_permissions(self): title = 'un super titre pour une super image' legend = 'en vrai je peux toujours pas :p' response = self.client.put( reverse( 'api:gallery:detail-image', kwargs={'pk_gallery': self.gallery_shared.pk, 'pk': self.image_shared.pk}), { 'title': title, 'legend': legend } ) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_delete_image(self): response = self.client.delete( reverse('api:gallery:detail-image', kwargs={'pk_gallery': self.gallery.pk, 'pk': self.image.pk})) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(Image.objects.filter(gallery=self.gallery).count(), 0) def test_delete_image_fail_no_permissions(self): response = self.client.delete( reverse( 'api:gallery:detail-image', kwargs={'pk_gallery': self.gallery_other.pk, 'pk': self.image_other.pk})) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(Image.objects.filter(gallery=self.gallery_other).count(), 1) def test_delete_image_fail_read_permissions(self): response = self.client.delete( reverse( 'api:gallery:detail-image', kwargs={'pk_gallery': self.gallery_shared.pk, 'pk': self.image_shared.pk})) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(Image.objects.filter(gallery=self.gallery_shared).count(), 1)
class ImageDetailAPITest(APITestCase): def setUp(self): self.profile = ProfileFactory() self.other = ProfileFactory() self.client = APIClient() client_oauth2 = create_oauth2_client(self.profile.user) authenticate_client(self.client, client_oauth2, self.profile.user.username, "hostel77") self.gallery = GalleryFactory() UserGalleryFactory(user=self.profile.user, gallery=self.gallery) self.image = ImageFactory(gallery=self.gallery) self.gallery_other = GalleryFactory() UserGalleryFactory(user=self.other.user, gallery=self.gallery_other) self.image_other = ImageFactory(gallery=self.gallery_other) self.gallery_shared = GalleryFactory() UserGalleryFactory(user=self.other.user, gallery=self.gallery_shared) UserGalleryFactory(user=self.profile.user, gallery=self.gallery_shared, mode=GALLERY_READ) self.image_shared = ImageFactory(gallery=self.gallery_shared) def test_get_image(self): response = self.client.get( reverse("api:gallery:detail-image", kwargs={"pk_gallery": self.gallery.pk, "pk": self.image.pk}) ) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data.get("id"), self.image.pk) self.assertEqual(response.data.get("title"), self.image.title) self.assertEqual(response.data.get("legend"), self.image.legend) self.assertEqual(response.data.get("slug"), self.image.slug) self.assertEqual(response.data.get("thumbnail"), self.image.get_thumbnail_url()) self.assertEqual(response.data.get("url"), self.image.get_absolute_url()) self.assertEqual(response.data.get("permissions"), {"read": True, "write": True}) def test_get_image_read_permissions(self): response = self.client.get( reverse( "api:gallery:detail-image", kwargs={"pk_gallery": self.gallery_shared.pk, "pk": self.image_shared.pk} ) ) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data.get("id"), self.image_shared.pk) self.assertEqual(response.data.get("permissions"), {"read": True, "write": False}) def test_get_image_fail_permissions(self): response = self.client.get( reverse("api:gallery:detail-image", kwargs={"pk_gallery": self.gallery_other.pk, "pk": self.image_other.pk}) ) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_put_modify_image(self): title = "un super titre pour une super image" legend = "as-tu vu ma légende?" response = self.client.put( reverse("api:gallery:detail-image", kwargs={"pk_gallery": self.gallery.pk, "pk": self.image.pk}), { "title": title, "legend": legend, "physical": (settings.BASE_DIR / "fixtures" / "noir_black.png").open("rb"), }, format="multipart", ) self.assertEqual(response.status_code, status.HTTP_200_OK) image = Image.objects.get(pk=self.image.pk) self.assertEqual(image.title, title) self.assertEqual(image.legend, legend) def test_put_fail_modify_image_not_an_image(self): title = "un super titre pour une super image" legend = "en vrai je peux pas" response = self.client.put( reverse("api:gallery:detail-image", kwargs={"pk_gallery": self.gallery.pk, "pk": self.image.pk}), { "title": title, "legend": legend, "physical": (settings.BASE_DIR / "assets" / "licenses" / "0.svg").open("rb"), }, ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) image = Image.objects.get(pk=self.image.pk) self.assertNotEqual(image.title, title) self.assertNotEqual(image.legend, legend) def test_put_fail_modify_image_no_permissions(self): title = "un super titre pour une super image" legend = "en vrai je peux pas" response = self.client.put( reverse( "api:gallery:detail-image", kwargs={"pk_gallery": self.gallery_other.pk, "pk": self.image_other.pk} ), {"title": title, "legend": legend}, ) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_put_fail_modify_image_read_permissions(self): title = "un super titre pour une super image" legend = "en vrai je peux toujours pas :p" response = self.client.put( reverse( "api:gallery:detail-image", kwargs={"pk_gallery": self.gallery_shared.pk, "pk": self.image_shared.pk} ), {"title": title, "legend": legend}, ) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_delete_image(self): response = self.client.delete( reverse("api:gallery:detail-image", kwargs={"pk_gallery": self.gallery.pk, "pk": self.image.pk}) ) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(Image.objects.filter(gallery=self.gallery).count(), 0) def test_delete_image_fail_no_permissions(self): response = self.client.delete( reverse("api:gallery:detail-image", kwargs={"pk_gallery": self.gallery_other.pk, "pk": self.image_other.pk}) ) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(Image.objects.filter(gallery=self.gallery_other).count(), 1) def test_delete_image_fail_read_permissions(self): response = self.client.delete( reverse( "api:gallery:detail-image", kwargs={"pk_gallery": self.gallery_shared.pk, "pk": self.image_shared.pk} ) ) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(Image.objects.filter(gallery=self.gallery_shared).count(), 1)