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)