class GalleryTest(TestCase): def setUp(self): self.profile = ProfileFactory() self.gallery = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery) self.image2 = ImageFactory(gallery=self.gallery) self.user_gallery = UserGalleryFactory(user=self.profile.user, gallery=self.gallery) def tearDown(self): self.image1.delete() self.image2.delete() self.user_gallery.delete() self.gallery.delete() def test_unicode(self): self.assertEqual(self.gallery.title, self.gallery.__unicode__()) def test_get_absolute_url(self): absolute_url = reverse('zds.gallery.views.gallery_details', args=[self.gallery.pk, self.gallery.slug]) self.assertEqual(absolute_url, self.gallery.get_absolute_url()) def test_get_users(self): self.assertEqual(1, len(self.gallery.get_users())) self.assertEqual(self.user_gallery, self.gallery.get_users()[0]) def test_get_images(self): self.assertEqual(2, len(self.gallery.get_images())) self.assertEqual(self.image1, self.gallery.get_images()[0]) self.assertEqual(self.image2, self.gallery.get_images()[1]) def test_get_last_image(self): self.assertEqual(self.image2, self.gallery.get_last_image())
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))
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))
def setUp(self): self.profile = ProfileFactory() self.other = ProfileFactory() self.new_participant = 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) tuto = PublishableContentFactory( type='TUTORIAL', author_list=[self.profile.user, self.new_participant.user]) self.gallery_tuto = tuto.gallery
def test_delete_image_from_other_user(self): """ if user try to remove images from another user without permission""" profile4 = ProfileFactory() gallery4 = GalleryFactory() image4 = ImageFactory(gallery=gallery4) UserGalleryFactory(user=profile4.user, gallery=gallery4) self.assertEqual(1, Image.objects.filter(pk=image4.pk).count()) login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) self.client.post( reverse('gallery-image-delete', kwargs={'pk_gallery': self.gallery1.pk}), { 'gallery': self.gallery1.pk, 'delete': '', 'image': image4.pk }, follow=True, ) self.assertEqual(1, Image.objects.filter(pk=image4.pk).count()) image4.delete()
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))
def setUp(self): self.profile = ProfileFactory() self.gallery = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery) self.image2 = ImageFactory(gallery=self.gallery) self.user_gallery = UserGalleryFactory(user=self.profile.user, gallery=self.gallery)
class UserGalleryTest(TestCase): def setUp(self): self.profile = ProfileFactory() self.gallery = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery) self.image2 = ImageFactory(gallery=self.gallery) self.user_gallery = UserGalleryFactory(user=self.profile.user, gallery=self.gallery) def tearDown(self): self.image1.delete() self.image2.delete() self.user_gallery.delete() self.gallery.delete() def test_can_write(self): self.user_gallery.mode = 'W' self.assertTrue(self.user_gallery.can_write()) self.assertFalse(self.user_gallery.can_read()) def test_can_read(self): self.user_gallery.mode = 'R' self.assertFalse(self.user_gallery.can_write()) self.assertTrue(self.user_gallery.can_read()) def test_get_images(self): self.assertEqual(2, len(self.user_gallery.get_images())) self.assertEqual(self.image1, self.user_gallery.get_images()[0]) self.assertEqual(self.image2, self.user_gallery.get_images()[1])
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))
def setUp(self): self.gallery = GalleryFactory() self.image = ImageFactory(gallery=self.gallery) self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery, mode='W') self.user_gallery2 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery, mode='R')
class GalleryTest(TestCase): def setUp(self): self.profile = ProfileFactory() self.gallery = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery) self.image2 = ImageFactory(gallery=self.gallery) self.user_gallery = UserGalleryFactory(user=self.profile.user, gallery=self.gallery) def tearDown(self): self.image1.delete() self.image2.delete() self.user_gallery.delete() self.gallery.delete() def test_unicode(self): self.assertEqual(self.gallery.title, self.gallery.__unicode__()) def test_get_absolute_url(self): absolute_url = reverse('gallery-details', args=[self.gallery.pk, self.gallery.slug]) self.assertEqual(absolute_url, self.gallery.get_absolute_url()) def test_get_linked_users(self): self.assertEqual(1, len(self.gallery.get_linked_users())) self.assertEqual(self.user_gallery, self.gallery.get_linked_users()[0]) def test_get_images(self): self.assertEqual(2, len(self.gallery.get_images())) self.assertEqual(self.image1, self.gallery.get_images()[0]) self.assertEqual(self.image2, self.gallery.get_images()[1]) def test_get_last_image(self): self.assertEqual(self.image2, self.gallery.get_last_image()) def test_delete_empty_gallery(self): test_gallery = GalleryFactory() path = test_gallery.get_gallery_path() test_gallery.delete() self.assertFalse(os.path.isdir(path)) def test_delete_gallery_with_image(self): test_gallery = GalleryFactory() test_image = ImageFactory(gallery=test_gallery) path_gallery = test_gallery.get_gallery_path() self.assertTrue(os.path.isdir(path_gallery)) path_image = test_image.physical.path self.assertTrue(os.path.isfile(path_image)) # Destroy the gallery and the image test_gallery.delete() self.assertFalse(os.path.isdir(path_gallery)) self.assertFalse(os.path.isfile(path_image))
def setUp(self): self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.gallery1 = GalleryFactory() self.gallery2 = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery1) self.image2 = ImageFactory(gallery=self.gallery1) self.image3 = ImageFactory(gallery=self.gallery2) self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery1) self.user_gallery2 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery2) self.user_gallery3 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery1, mode='R')
class GalleryTest(TestCase): def setUp(self): self.profile = ProfileFactory() self.gallery = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery) self.image2 = ImageFactory(gallery=self.gallery) self.user_gallery = UserGalleryFactory(user=self.profile.user, gallery=self.gallery) def tearDown(self): self.image1.delete() self.image2.delete() self.user_gallery.delete() self.gallery.delete() def test_get_absolute_url(self): absolute_url = reverse('gallery-details', args=[self.gallery.pk, self.gallery.slug]) self.assertEqual(absolute_url, self.gallery.get_absolute_url()) def test_get_linked_users(self): self.assertEqual(1, len(self.gallery.get_linked_users())) self.assertEqual(self.user_gallery, self.gallery.get_linked_users()[0]) def test_get_images(self): self.assertEqual(2, len(self.gallery.get_images())) self.assertEqual(self.image1, self.gallery.get_images()[0]) self.assertEqual(self.image2, self.gallery.get_images()[1]) def test_get_last_image(self): self.assertEqual(self.image2, self.gallery.get_last_image()) def test_delete_empty_gallery(self): test_gallery = GalleryFactory() path = test_gallery.get_gallery_path() test_gallery.delete() self.assertFalse(os.path.isdir(path)) def test_delete_gallery_with_image(self): test_gallery = GalleryFactory() test_image = ImageFactory(gallery=test_gallery) path_gallery = test_gallery.get_gallery_path() self.assertTrue(os.path.isdir(path_gallery)) path_image = test_image.physical.path self.assertTrue(os.path.isfile(path_image)) # Destroy the gallery and the image test_gallery.delete() self.assertFalse(os.path.isdir(path_gallery)) self.assertFalse(os.path.isfile(path_image))
def test_success_initial_content(self): author = ProfileFactory().user author2 = ProfileFactory().user tutorial = PublishedContentFactory(author_list=[author, author2]) gallery = GalleryFactory() image = ImageFactory(gallery=gallery) tutorial.image = image tutorial.save() staff = StaffProfileFactory() login_check = self.client.login(username=staff.user.username, password="******") self.assertTrue(login_check) response = self.client.get("{}{}".format( reverse("featured-resource-create"), "?content_type=published_content&content_id={}".format( tutorial.pk))) initial_dict = response.context["form"].initial self.assertEqual(initial_dict["title"], tutorial.title) self.assertEqual(initial_dict["authors"], "{}, {}".format(author, author2)) self.assertEqual(initial_dict["type"], _("Un tutoriel")) self.assertEqual( initial_dict["url"], "http://testserver{}".format(tutorial.get_absolute_url_online())) self.assertEqual( initial_dict["image_url"], "http://testserver{}".format(image.physical["featured"].url))
def load_gallery(cli, size, fake): """ Load galleries """ nb_galleries = size * 3 nb_images = size * 5 cli.stdout.write(u"Nombres de galéries à créer par utilisateur: {}".format(nb_galleries)) cli.stdout.write(u"Nombres d'images à créer par gallerie: {}".format(nb_images)) tps1 = time.time() nb_users = User.objects.count() if nb_users == 0: cli.stdout.write(u"Il n'y a aucun membre actuellement. " u"Vous devez rajouter les membres dans vos fixtures (member)") else: profiles = list(Profile.objects.all()) for i in range(0, nb_users): for j in range(0, nb_galleries): gal = GalleryFactory(title=fake.text(max_nb_chars=80), subtitle=fake.text(max_nb_chars=200)) UserGalleryFactory(user=profiles[i].user, gallery=gal) for k in range(0, nb_images): ImageFactory(gallery=gal) sys.stdout.write(" User {}/{} \tGallery {}/{} \tImage {}/{} \r". format(i + 1, nb_users, j + 1, nb_galleries, k + 1, nb_images)) sys.stdout.flush() tps2 = time.time() cli.stdout.write(u"\nFait en {} sec".format(tps2 - tps1))
def test_success_initial_content(self): author = ProfileFactory().user author2 = ProfileFactory().user tutorial = PublishedContentFactory(author_list=[author, author2]) gallery = GalleryFactory() image = ImageFactory(gallery=gallery) tutorial.image = image tutorial.save() staff = StaffProfileFactory() login_check = self.client.login(username=staff.user.username, password='******') self.assertTrue(login_check) response = self.client.get('{}{}'.format( reverse('featured-resource-create'), '?content_type=published_content&content_id={}'.format( tutorial.pk))) initial_dict = response.context['form'].initial self.assertEqual(initial_dict['title'], tutorial.title) self.assertEqual(initial_dict['authors'], '{}, {}'.format(author, author2)) self.assertEqual(initial_dict['type'], _('Un tutoriel')) self.assertEqual( initial_dict['url'], 'http://testserver{}'.format(tutorial.get_absolute_url_online())) self.assertEqual( initial_dict['image_url'], 'http://testserver{}'.format(image.physical['featured'].url))
def __push_images_into_gallery(gal, i, j, nb_galleries, nb_images, nb_users): for k in range(0, nb_images): ImageFactory(gallery=gal) sys.stdout.write( " User {}/{} \tGallery {}/{} \tImage {}/{} \r".format( i + 1, nb_users, j + 1, nb_galleries, k + 1, nb_images)) sys.stdout.flush()
def setUp(self): self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.gallery1 = GalleryFactory() self.gallery2 = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery1) self.image2 = ImageFactory(gallery=self.gallery1) self.image3 = ImageFactory(gallery=self.gallery2) self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery1) self.user_gallery2 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery2) self.user_gallery3 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery1, mode='R') default_gallery_u1 = GalleryFactory(title='default', slug='default', subtitle='bla') UserGalleryFactory(user=self.profile1.user, gallery=default_gallery_u1, is_default=True) default_gallery_u2 = GalleryFactory(title='default', slug='default', subtitle='bla') UserGalleryFactory(user=self.profile2.user, gallery=default_gallery_u2, is_default=True)
class UserGalleryTest(TestCase): def setUp(self): self.profile = ProfileFactory() self.gallery = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery) self.image2 = ImageFactory(gallery=self.gallery) self.user_gallery = UserGalleryFactory(user=self.profile.user, gallery=self.gallery) def tearDown(self): self.image1.delete() self.image2.delete() self.user_gallery.delete() self.gallery.delete() def test_unicode(self): result = u'Galerie "{0}" envoye par {1}'.format( self.gallery, self.profile.user) self.assertEqual(result, self.user_gallery.__unicode__()) def test_is_write(self): self.user_gallery.mode = 'W' self.assertTrue(self.user_gallery.is_write()) self.assertFalse(self.user_gallery.is_read()) def test_is_read(self): self.user_gallery.mode = 'R' self.assertFalse(self.user_gallery.is_write()) self.assertTrue(self.user_gallery.is_read()) def test_get_images(self): self.assertEqual(2, len(self.user_gallery.get_images())) self.assertEqual(self.image1, self.user_gallery.get_images()[0]) self.assertEqual(self.image2, self.user_gallery.get_images()[1]) def test_get_gallery(self): gallery_results = self.user_gallery.get_gallery(self.profile.user) self.assertEqual(1, len(gallery_results)) self.assertEqual(self.gallery, gallery_results[0])
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)
class UserGalleryTest(TestCase): def setUp(self): self.profile = ProfileFactory() self.gallery = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery) self.image2 = ImageFactory(gallery=self.gallery) self.user_gallery = UserGalleryFactory(user=self.profile.user, gallery=self.gallery) def tearDown(self): self.image1.delete() self.image2.delete() self.user_gallery.delete() self.gallery.delete() def test_unicode(self): result = u'Galerie "{0}" envoye par {1}'.format(self.gallery, self.profile.user) self.assertEqual(result, self.user_gallery.__unicode__()) def test_is_write(self): self.user_gallery.mode = 'W' self.assertTrue(self.user_gallery.is_write()) self.assertFalse(self.user_gallery.is_read()) def test_is_read(self): self.user_gallery.mode = 'R' self.assertFalse(self.user_gallery.is_write()) self.assertTrue(self.user_gallery.is_read()) def test_get_images(self): self.assertEqual(2, len(self.user_gallery.get_images())) self.assertEqual(self.image1, self.user_gallery.get_images()[0]) self.assertEqual(self.image2, self.user_gallery.get_images()[1]) def test_get_gallery(self): gallery_results = self.user_gallery.get_gallery(self.profile.user) self.assertEqual(1, len(gallery_results)) self.assertEqual(self.gallery, gallery_results[0])
def test_delete_gallery_with_image(self): test_gallery = GalleryFactory() test_image = ImageFactory(gallery=test_gallery) path_gallery = test_gallery.get_gallery_path() self.assertTrue(os.path.isdir(path_gallery)) path_image = test_image.physical.path self.assertTrue(os.path.isfile(path_image)) # Destroy the gallery and the image test_gallery.delete() self.assertFalse(os.path.isdir(path_gallery)) self.assertFalse(os.path.isfile(path_image))
def test_delete_image_from_other_user(self): """ if user try to remove images from another user without permission""" profile4 = ProfileFactory() gallery4 = GalleryFactory() image4 = ImageFactory(gallery=gallery4) UserGalleryFactory(user=profile4.user, gallery=gallery4) self.assertEqual(1, Image.objects.filter(pk=image4.pk).count()) login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) self.client.post( reverse('zds.gallery.views.modify_image'), { 'gallery': self.gallery1.pk, 'delete': '', 'image': image4.pk }, follow=True, ) self.assertEqual(1, Image.objects.filter(pk=image4.pk).count()) image4.delete()
def test_delete_image_from_other_user(self): """if user try to remove images from another user without permission""" profile4 = ProfileFactory() gallery4 = GalleryFactory() image4 = ImageFactory(gallery=gallery4) UserGalleryFactory(user=profile4.user, gallery=gallery4) self.assertEqual(1, Image.objects.filter(pk=image4.pk).count()) self.client.force_login(self.profile1.user) self.client.post( reverse("gallery-image-delete", kwargs={"pk_gallery": self.gallery1.pk}), { "gallery": self.gallery1.pk, "delete": "", "image": image4.pk }, follow=True, ) self.assertEqual(1, Image.objects.filter(pk=image4.pk).count()) image4.delete()
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))
def test_new_article(self): # Create a Gallery gallery = GalleryFactory() # Attach an image of a gallery image_article = ImageFactory(gallery=gallery) UserGalleryFactory(user=self.user_author, gallery=gallery) # Create a subcategory subcat = SubCategoryFactory() # Try the preview button result = self.client.post(reverse('zds.article.views.new'), { 'text': 'A wonderful poetry by Victor Hugo', 'preview': '', 'title': '', 'description': '', 'text': '', 'image': image_article.pk, 'subcategory': subcat.pk, 'licence': self.licence.pk, 'msg_commit': '' }, follow=True) self.assertEqual(result.status_code, 200) # Create an article result = self.client.post(reverse('zds.article.views.new'), { 'title': 'Create a new article test', 'description': 'Describe the mew article', 'text': 'A wonderful poetry by Victor Hugo', 'image': image_article.pk, 'subcategory': subcat.pk, 'licence': self.licence.pk, 'msg_commit': 'Celui qui ouvre une porte d\'école, ferme une prison.' }, follow=True) self.assertEqual(result.status_code, 200) self.assertEqual( Article.objects.filter(title='Create a new article test').count(), 1)
def test_get_avatar_url(self): # if no url was specified -> gravatar ! self.assertEqual(self.user1.get_avatar_url(), 'https://secure.gravatar.com/avatar/{0}?d=identicon'. format(md5(self.user1.user.email.lower().encode()).hexdigest())) # if an url is specified -> take it ! user2 = ProfileFactory() testurl = 'http://test.com/avatar.jpg' user2.avatar_url = testurl self.assertEqual(user2.get_avatar_url(), testurl) # if url is relative, send absolute url gallerie_avtar = GalleryFactory() image_avatar = ImageFactory(gallery=gallerie_avtar) user2.avatar_url = image_avatar.physical.url self.assertNotEqual(user2.get_avatar_url(), image_avatar.physical.url) self.assertIn('http', user2.get_avatar_url())
def test_filters(self): # create topic and content and toggle request author = ProfileFactory().user category = CategoryFactory(position=1) forum = ForumFactory(category=category, position_in_category=1) topic = TopicFactory(forum=forum, author=author) FeaturedRequested.objects.toogle_request(topic, author) tutorial = PublishedContentFactory(author_list=[author]) gallery = GalleryFactory() image = ImageFactory(gallery=gallery) tutorial.image = image tutorial.save() FeaturedRequested.objects.toogle_request(tutorial, author) # without filter staff = StaffProfileFactory() login_check = self.client.login(username=staff.user.username, password='******') self.assertTrue(login_check) response = self.client.get(reverse('featured-resource-requests')) self.assertEqual(200, response.status_code) self.assertEqual(len(response.context['featured_request_list']), 2) self.assertTrue( any(r.content_object == topic for r in response.context['featured_request_list'])) self.assertTrue( any(r.content_object == tutorial for r in response.context['featured_request_list'])) # filter topic response = self.client.get( reverse('featured-resource-requests') + '?type=topic') self.assertEqual(200, response.status_code) self.assertEqual(len(response.context['featured_request_list']), 1) self.assertTrue( any(r.content_object == topic for r in response.context['featured_request_list'])) self.assertFalse( any(r.content_object == tutorial for r in response.context['featured_request_list'])) # filter tuto response = self.client.get( reverse('featured-resource-requests') + '?type=content') self.assertEqual(200, response.status_code) self.assertEqual(len(response.context['featured_request_list']), 1) self.assertFalse( any(r.content_object == topic for r in response.context['featured_request_list'])) self.assertTrue( any(r.content_object == tutorial for r in response.context['featured_request_list'])) # reject topic content_type = ContentType.objects.get_for_model(topic) q = FeaturedRequested.objects.get(object_id=topic.pk, content_type__pk=content_type.pk) q.rejected = True q.save() response = self.client.get( reverse('featured-resource-requests') + '?type=topic') self.assertEqual(200, response.status_code) self.assertEqual(len(response.context['featured_request_list']), 0) # filter ignored response = self.client.get( reverse('featured-resource-requests') + '?type=ignored') self.assertEqual(200, response.status_code) self.assertEqual(len(response.context['featured_request_list']), 1) self.assertTrue( any(r.content_object == topic for r in response.context['featured_request_list'])) # put back vote count to 0 for tutorial FeaturedRequested.objects.toogle_request(tutorial, author) response = self.client.get( reverse('featured-resource-requests') + '?type=content') self.assertEqual(200, response.status_code) self.assertEqual(len(response.context['featured_request_list']), 0) # does not appear with no votes # upvote topic other = ProfileFactory().user FeaturedRequested.objects.toogle_request(topic, other) response = self.client.get( reverse('featured-resource-requests') + '?type=topic') self.assertEqual(200, response.status_code) self.assertEqual(len(response.context['featured_request_list']), 1) # it is back!
def setUp(self): self.gallery = GalleryFactory() self.image = ImageFactory(gallery=self.gallery)
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 ModifyImageTest(TestCase): def setUp(self): self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.gallery1 = GalleryFactory() self.gallery2 = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery1) self.image2 = ImageFactory(gallery=self.gallery1) self.image3 = ImageFactory(gallery=self.gallery2) self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery1) self.user_gallery2 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery2) self.user_gallery3 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery1, mode='R') def tearDown(self): self.image1.delete() self.image2.delete() self.image3.delete() def test_denies_anonymous(self): response = self.client.get(reverse('zds.gallery.views.modify_image'), follow=True) self.assertRedirects(response, reverse('zds.member.views.login_view') + '?next=' + urllib.quote(reverse('zds.gallery.views.modify_image'), '')) def test_fail_modify_image_with_no_permission(self): login_check = self.client.login(username=self.profile3.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('zds.gallery.views.modify_image'), { 'gallery': self.gallery1.pk, }, follow=True, ) self.assertTrue(403, response.status_code) def test_delete_image_from_other_user(self): """ if user try to remove images from another user without permission""" profile4 = ProfileFactory() gallery4 = GalleryFactory() image4 = ImageFactory(gallery=gallery4) UserGalleryFactory(user=profile4.user, gallery=gallery4) self.assertEqual(1, Image.objects.filter(pk=image4.pk).count()) login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) self.client.post( reverse('zds.gallery.views.modify_image'), { 'gallery': self.gallery1.pk, 'delete': '', 'image': image4.pk }, follow=True, ) self.assertEqual(1, Image.objects.filter(pk=image4.pk).count()) image4.delete() def test_success_delete_image_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('zds.gallery.views.modify_image'), { 'gallery': self.gallery1.pk, 'delete': '', 'image': self.image1.pk }, follow=True, ) self.assertEqual(200, response.status_code) self.assertEqual(0, Image.objects.filter(pk=self.image1.pk).count()) def test_success_delete_list_images_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('zds.gallery.views.modify_image'), { 'gallery': self.gallery1.pk, 'delete_multi': '', 'items': [self.image1.pk, self.image2.pk] }, follow=True, ) self.assertEqual(200, response.status_code) self.assertEqual(0, Image.objects.filter(pk=self.image1.pk).count()) self.assertEqual(0, Image.objects.filter(pk=self.image2.pk).count()) def test_fail_delete_image_read_permission(self): login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('zds.gallery.views.modify_image'), { 'gallery': self.gallery1.pk, 'delete': '', 'image': self.image1.pk }, follow=True, ) self.assertEqual(403, response.status_code) self.assertEqual(1, Image.objects.filter(pk=self.image1.pk).count())
class EditImageViewTest(TestCase): def setUp(self): self.gallery = GalleryFactory() self.image = ImageFactory(gallery=self.gallery) self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery, mode='W') self.user_gallery2 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery, mode='R') def tearDown(self): self.image.delete() def test_denies_anonymous(self): response = self.client.get( reverse( 'zds.gallery.views.edit_image', args=[15, 156] ), follow=True ) self.assertRedirects(response, reverse('zds.member.views.login_view') + '?next=' + urllib.quote(reverse('zds.gallery.views.edit_image', args=[15, 156]), '')) def test_fail_member_no_permission_can_edit_image(self): login_check = self.client.login(username=self.profile3.user.username, password='******') self.assertTrue(login_check) with open(os.path.join(settings.SITE_ROOT, 'fixtures', 'logo.png'), 'r') as fp: self.client.post( reverse( 'zds.gallery.views.edit_image', args=[self.gallery.pk, self.image.pk] ), { 'title': 'modify with no perms', 'legend': 'test legend', 'slug': 'test-slug', 'physical': fp }, follow=True ) image_test = Image.objects.get(pk=self.image.pk) self.assertNotEqual('modify with no perms', image_test.title) image_test.delete() def test_success_member_edit_image(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) with open(os.path.join(settings.SITE_ROOT, 'fixtures', 'logo.png'), 'r') as fp: response = self.client.post( reverse( 'zds.gallery.views.edit_image', args=[self.gallery.pk, self.image.pk] ), { 'title': 'edit title', 'legend': 'dit legend', 'slug': 'edit-slug', 'physical': fp }, follow=True ) self.assertEqual(200, response.status_code) image_test = Image.objects.get(pk=self.image.pk) self.assertEqual('edit title', image_test.title) image_test.delete() def test_access_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.get(reverse( 'zds.gallery.views.edit_image', args=[self.gallery.pk, self.image.pk] )) self.assertEqual(200, response.status_code)
class ModifyGalleryViewTest(TestCase): def setUp(self): self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.gallery1 = GalleryFactory() self.gallery2 = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery1) self.image2 = ImageFactory(gallery=self.gallery1) self.image3 = ImageFactory(gallery=self.gallery2) self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery1) self.user_gallery2 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery2) self.user_gallery3 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery1, mode='R') default_gallery_u1 = GalleryFactory(title='default', slug='default', subtitle='bla') UserGalleryFactory(user=self.profile1.user, gallery=default_gallery_u1, is_default=True) default_gallery_u2 = GalleryFactory(title='default', slug='default', subtitle='bla') UserGalleryFactory(user=self.profile2.user, gallery=default_gallery_u2, is_default=True) def tearDown(self): self.image1.delete() self.image2.delete() self.image3.delete() def test_fail_delete_multi_read_permission(self): """ when user wants to delete a list of galleries just with a read permission """ login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) self.assertEqual(4, Gallery.objects.all().count()) self.assertEqual(5, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) response = self.client.post( reverse('galleries-delete'), { 'delete_multi': '', 'g_items': [self.gallery1.pk] }, follow=True ) self.assertEqual(200, response.status_code) self.assertEqual(4, Gallery.objects.all().count()) self.assertEqual(5, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) def test_success_delete_multi_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) self.assertEqual(4, Gallery.objects.all().count()) self.assertEqual(5, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) response = self.client.post( reverse('galleries-delete'), { 'delete_multi': '', 'g_items': [self.gallery1.pk, self.gallery2.pk] }, follow=True ) self.assertEqual(200, response.status_code) self.assertEqual(2, Gallery.objects.all().count()) self.assertEqual(2, UserGallery.objects.all().count()) self.assertEqual(0, Image.objects.all().count()) def test_fail_delete_read_permission(self): """ when user wants to delete a gallery just with a read permission """ login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) self.assertEqual(4, Gallery.objects.all().count()) self.assertEqual(5, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) response = self.client.post( reverse('galleries-delete'), { 'delete': '', 'gallery': self.gallery1.pk }, follow=True ) self.assertEqual(403, response.status_code) self.assertEqual(4, Gallery.objects.all().count()) self.assertEqual(5, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) def test_success_delete_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) self.assertEqual(4, Gallery.objects.all().count()) self.assertEqual(5, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) response = self.client.post( reverse('galleries-delete'), { 'delete': '', 'gallery': self.gallery1.pk }, follow=True ) self.assertEqual(200, response.status_code) self.assertEqual(0, Gallery.objects.filter(pk=self.gallery1.pk).count()) self.assertEqual(0, UserGallery.objects.filter(gallery=self.gallery1).count()) self.assertEqual(0, Image.objects.filter(gallery=self.gallery1).count()) def test_fail_add_user_with_read_permission(self): login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) # gallery nonexistent response = self.client.post( reverse('gallery-members', kwargs={'pk': 99999}), { 'action': 'add', } ) self.assertEqual(404, response.status_code) # try to add a user with write permission response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'add', 'user': self.profile2.user.username, 'mode': 'W', } ) self.assertEqual(403, response.status_code) def test_fail_add_user_already_has_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) # Same permission : read response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'add', 'user': self.profile2.user.username, 'mode': 'R', }, follow=True ) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile2.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) # try to add write permission to a user # who has already an read permission response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'add', 'user': self.profile2.user.username, 'mode': 'W', }, follow=True ) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile2.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) def test_success_add_user_read_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'add', 'user': self.profile3.user.username, 'mode': 'R', }, follow=True ) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile3.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) def test_success_add_user_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'add', 'user': self.profile3.user.username, 'mode': 'W', }, follow=True ) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile3.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('W', permissions[0].mode) def test_success_modify_user_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'add', 'user': self.profile3.user.username, 'mode': 'W', }, follow=True ) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile3.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('W', permissions[0].mode) response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'edit', 'user': self.profile3.user.username, 'mode': 'R', }, follow=True ) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile3.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) def test_fail_user_modify_self(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'edit', 'user': self.profile1.user.username, 'mode': 'R', }, follow=True ) self.assertEqual(403, response.status_code) permissions = UserGallery.objects.filter(user=self.profile1.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('W', permissions[0].mode) def test_success_user_leave_gallery(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) user_galleries = UserGallery.objects.filter(gallery=self.gallery1) self.assertEqual(user_galleries.count(), 2) # kick the other response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'leave', 'user': self.profile2.user.username, }, follow=True ) self.assertEqual(200, response.status_code) self.assertEqual(user_galleries.count(), 1) self.assertEqual(user_galleries.last().user, self.profile1.user) def test_error_last_user_with_write_leave_gallery(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) user_gallery = UserGallery.objects.filter(gallery=self.gallery1, user=self.profile1.user) self.assertEqual(user_gallery.count(), 1) # try to quit response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'leave', 'user': self.profile1.user.username, }, follow=True ) self.assertEqual(200, response.status_code) self.assertEqual(user_gallery.count(), 1) # not gone def test_success_user_with_read_permission_leave_gallery(self): login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) user_galleries = UserGallery.objects.filter(gallery=self.gallery1) self.assertEqual(user_galleries.count(), 2) # leave response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'leave', 'user': self.profile2.user.username, }, follow=True ) self.assertEqual(200, response.status_code) self.assertEqual(user_galleries.count(), 1) self.assertEqual(user_galleries.last().user, self.profile1.user) def test_fail_user_modify_user_has_permission(self): login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) user_galleries = UserGallery.objects.filter(gallery=self.gallery1) self.assertEqual(user_galleries.count(), 2) # set W response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'edit', 'user': self.profile2.user.username, 'mode': 'W', }, follow=True ) self.assertEqual(403, response.status_code) permissions = UserGallery.objects.filter(user=self.profile2.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) # kick other response = self.client.post( reverse('gallery-members', kwargs={'pk': self.gallery1.pk}), { 'action': 'leave', 'user': self.profile1.user.username, }, follow=True ) self.assertEqual(403, response.status_code) self.assertEqual(user_galleries.count(), 2)
class EditImageViewTest(TestCase): def setUp(self): self.gallery = GalleryFactory() self.image = ImageFactory(gallery=self.gallery) self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery, mode='W') self.user_gallery2 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery, mode='R') def tearDown(self): self.image.delete() def test_fail_member_no_permission_can_edit_image(self): login_check = self.client.login(username=self.profile3.user.username, password='******') self.assertTrue(login_check) with open(os.path.join(settings.BASE_DIR, 'fixtures', 'logo.png'), 'rb') as fp: self.client.post( reverse( 'gallery-image-edit', args=[self.gallery.pk, self.image.pk] ), { 'title': 'modify with no perms', 'legend': 'test legend', 'slug': 'test-slug', 'physical': fp }, follow=True ) image_test = Image.objects.get(pk=self.image.pk) self.assertNotEqual('modify with no perms', image_test.title) image_test.delete() def test_success_member_edit_image(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) nb_files = len(os.listdir(self.gallery.get_gallery_path())) with open(os.path.join(settings.BASE_DIR, 'fixtures', 'logo.png'), 'rb') as fp: response = self.client.post( reverse( 'gallery-image-edit', args=[self.gallery.pk, self.image.pk] ), { 'title': 'edit title', 'legend': 'dit legend', 'slug': 'edit-slug', 'physical': fp }, follow=True ) self.assertEqual(200, response.status_code) self.assertEqual(nb_files + 3, len(os.listdir(self.gallery.get_gallery_path()))) image_test = Image.objects.get(pk=self.image.pk) self.assertEqual('edit title', image_test.title) image_test.delete() # picture AND thumbnail should be gone self.assertEqual(nb_files, len(os.listdir(self.gallery.get_gallery_path()))) def test_access_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.get(reverse( 'gallery-image-edit', args=[self.gallery.pk, self.image.pk] )) self.assertEqual(200, response.status_code)
class ModifyGalleryViewTest(TestCase): def setUp(self): self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.gallery1 = GalleryFactory() self.gallery2 = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery1) self.image2 = ImageFactory(gallery=self.gallery1) self.image3 = ImageFactory(gallery=self.gallery2) self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery1) self.user_gallery2 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery2) self.user_gallery3 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery1, mode='R') def tearDown(self): self.image1.delete() self.image2.delete() self.image3.delete() def test_fail_delete_multi_read_permission(self): """ when user wants to delete a list of galleries just with a read permission """ login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) self.assertEqual(2, Gallery.objects.all().count()) self.assertEqual(3, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) response = self.client.post( reverse('zds.gallery.views.modify_gallery'), { 'delete_multi': '', 'items': [self.gallery1.pk] }, follow=True ) self.assertEqual(403, response.status_code) self.assertEqual(2, Gallery.objects.all().count()) self.assertEqual(3, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) def test_success_delete_multi_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) self.assertEqual(2, Gallery.objects.all().count()) self.assertEqual(3, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) response = self.client.post( reverse('zds.gallery.views.modify_gallery'), { 'delete_multi': '', 'items': [self.gallery1.pk, self.gallery2.pk] }, follow=True ) self.assertEqual(200, response.status_code) self.assertEqual(0, Gallery.objects.all().count()) self.assertEqual(0, UserGallery.objects.all().count()) self.assertEqual(0, Image.objects.all().count()) def test_fail_add_user_with_read_permission(self): login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) # gallery nonexistent response = self.client.post( reverse('zds.gallery.views.modify_gallery'), { 'adduser': '', 'gallery': 89, } ) self.assertEqual(404, response.status_code) # try to add an user with write permission response = self.client.post( reverse('zds.gallery.views.modify_gallery'), { 'adduser': '', 'gallery': self.gallery1.pk, 'user': self.profile2.user.username, 'mode': 'W', } ) self.assertEqual(403, response.status_code) def test_fail_add_user_already_has_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) # Same permission : read response = self.client.post( reverse('zds.gallery.views.modify_gallery'), { 'adduser': '', 'gallery': self.gallery1.pk, 'user': self.profile2.user.username, 'mode': 'R', }, follow=True ) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile2.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) # try to add write permission to an user # who has already an read permission response = self.client.post( reverse('zds.gallery.views.modify_gallery'), { 'adduser': '', 'gallery': self.gallery1.pk, 'user': self.profile2.user.username, 'mode': 'W', }, follow=True ) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile2.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) def test_success_add_user_read_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('zds.gallery.views.modify_gallery'), { 'adduser': '', 'gallery': self.gallery1.pk, 'user': self.profile3.user.username, 'mode': 'R', }, follow=True ) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile3.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) def test_success_add_user_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('zds.gallery.views.modify_gallery'), { 'adduser': '', 'gallery': self.gallery1.pk, 'user': self.profile3.user.username, 'mode': 'W', }, follow=True ) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile3.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('W', permissions[0].mode)
class ModifyImageTest(TestCase): def setUp(self): self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.gallery1 = GalleryFactory() self.gallery2 = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery1) self.image2 = ImageFactory(gallery=self.gallery1) self.image3 = ImageFactory(gallery=self.gallery2) self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery1) self.user_gallery2 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery2) self.user_gallery3 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery1, mode='R') def tearDown(self): self.image1.delete() self.image2.delete() self.image3.delete() def test_denies_anonymous(self): response = self.client.get(reverse('gallery-image-delete'), follow=True) self.assertRedirects( response, reverse('member-login') + '?next=' + urllib.quote(reverse('gallery-image-delete'), '')) def test_fail_modify_image_with_no_permission(self): login_check = self.client.login(username=self.profile3.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('gallery-image-delete'), { 'gallery': self.gallery1.pk, }, follow=True, ) self.assertTrue(403, response.status_code) def test_delete_image_from_other_user(self): """ if user try to remove images from another user without permission""" profile4 = ProfileFactory() gallery4 = GalleryFactory() image4 = ImageFactory(gallery=gallery4) UserGalleryFactory(user=profile4.user, gallery=gallery4) self.assertEqual(1, Image.objects.filter(pk=image4.pk).count()) login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) self.client.post( reverse('gallery-image-delete'), { 'gallery': self.gallery1.pk, 'delete': '', 'image': image4.pk }, follow=True, ) self.assertEqual(1, Image.objects.filter(pk=image4.pk).count()) image4.delete() def test_success_delete_image_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('gallery-image-delete'), { 'gallery': self.gallery1.pk, 'delete': '', 'image': self.image1.pk }, follow=True, ) self.assertEqual(200, response.status_code) self.assertEqual(0, Image.objects.filter(pk=self.image1.pk).count()) def test_success_delete_list_images_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('gallery-image-delete'), { 'gallery': self.gallery1.pk, 'delete_multi': '', 'items': [self.image1.pk, self.image2.pk] }, follow=True, ) self.assertEqual(200, response.status_code) self.assertEqual(0, Image.objects.filter(pk=self.image1.pk).count()) self.assertEqual(0, Image.objects.filter(pk=self.image2.pk).count()) def test_fail_delete_image_read_permission(self): login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) response = self.client.post( reverse('gallery-image-delete'), { 'gallery': self.gallery1.pk, 'delete': '', 'image': self.image1.pk }, follow=True, ) self.assertEqual(403, response.status_code) self.assertEqual(1, Image.objects.filter(pk=self.image1.pk).count())
class EditImageViewTest(TestCase): def setUp(self): self.gallery = GalleryFactory() self.image = ImageFactory(gallery=self.gallery) self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery, mode='W') self.user_gallery2 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery, mode='R') def tearDown(self): self.image.delete() def test_denies_anonymous(self): response = self.client.get(reverse('gallery-image-edit', args=[15, 156]), follow=True) self.assertRedirects( response, reverse('member-login') + '?next=' + urllib.quote(reverse('gallery-image-edit', args=[15, 156]), '')) def test_fail_member_no_permission_can_edit_image(self): login_check = self.client.login(username=self.profile3.user.username, password='******') self.assertTrue(login_check) with open(os.path.join(settings.BASE_DIR, 'fixtures', 'logo.png'), 'r') as fp: self.client.post(reverse('gallery-image-edit', args=[self.gallery.pk, self.image.pk]), { 'title': 'modify with no perms', 'legend': 'test legend', 'slug': 'test-slug', 'physical': fp }, follow=True) image_test = Image.objects.get(pk=self.image.pk) self.assertNotEqual('modify with no perms', image_test.title) image_test.delete() def test_success_member_edit_image(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) nb_files = len(os.listdir(self.gallery.get_gallery_path())) with open(os.path.join(settings.BASE_DIR, 'fixtures', 'logo.png'), 'r') as fp: response = self.client.post(reverse( 'gallery-image-edit', args=[self.gallery.pk, self.image.pk]), { 'title': 'edit title', 'legend': 'dit legend', 'slug': 'edit-slug', 'physical': fp }, follow=True) self.assertEqual(200, response.status_code) self.assertEqual(nb_files + 3, len(os.listdir(self.gallery.get_gallery_path()))) image_test = Image.objects.get(pk=self.image.pk) self.assertEqual('edit title', image_test.title) image_test.delete() # picture AND thumbnail should be gone self.assertEqual(nb_files, len(os.listdir(self.gallery.get_gallery_path()))) def test_access_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.get( reverse('gallery-image-edit', args=[self.gallery.pk, self.image.pk])) self.assertEqual(200, response.status_code)
class ModifyGalleryViewTest(TestCase): def setUp(self): self.profile1 = ProfileFactory() self.profile2 = ProfileFactory() self.profile3 = ProfileFactory() self.gallery1 = GalleryFactory() self.gallery2 = GalleryFactory() self.image1 = ImageFactory(gallery=self.gallery1) self.image2 = ImageFactory(gallery=self.gallery1) self.image3 = ImageFactory(gallery=self.gallery2) self.user_gallery1 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery1) self.user_gallery2 = UserGalleryFactory(user=self.profile1.user, gallery=self.gallery2) self.user_gallery3 = UserGalleryFactory(user=self.profile2.user, gallery=self.gallery1, mode='R') def tearDown(self): self.image1.delete() self.image2.delete() self.image3.delete() def test_fail_delete_multi_read_permission(self): """ when user wants to delete a list of galleries just with a read permission """ login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) self.assertEqual(2, Gallery.objects.all().count()) self.assertEqual(3, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) response = self.client.post(reverse('gallery-modify'), { 'delete_multi': '', 'items': [self.gallery1.pk] }, follow=True) self.assertEqual(403, response.status_code) self.assertEqual(2, Gallery.objects.all().count()) self.assertEqual(3, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) def test_success_delete_multi_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) self.assertEqual(2, Gallery.objects.all().count()) self.assertEqual(3, UserGallery.objects.all().count()) self.assertEqual(3, Image.objects.all().count()) response = self.client.post( reverse('gallery-modify'), { 'delete_multi': '', 'items': [self.gallery1.pk, self.gallery2.pk] }, follow=True) self.assertEqual(200, response.status_code) self.assertEqual(0, Gallery.objects.all().count()) self.assertEqual(0, UserGallery.objects.all().count()) self.assertEqual(0, Image.objects.all().count()) def test_fail_add_user_with_read_permission(self): login_check = self.client.login(username=self.profile2.user.username, password='******') self.assertTrue(login_check) # gallery nonexistent response = self.client.post(reverse('gallery-modify'), { 'adduser': '', 'gallery': 89, }) self.assertEqual(404, response.status_code) # try to add an user with write permission response = self.client.post( reverse('gallery-modify'), { 'adduser': '', 'gallery': self.gallery1.pk, 'user': self.profile2.user.username, 'mode': 'W', }) self.assertEqual(403, response.status_code) def test_fail_add_user_already_has_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) # Same permission : read response = self.client.post(reverse('gallery-modify'), { 'adduser': '', 'gallery': self.gallery1.pk, 'user': self.profile2.user.username, 'mode': 'R', }, follow=True) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile2.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) # try to add write permission to an user # who has already an read permission response = self.client.post(reverse('gallery-modify'), { 'adduser': '', 'gallery': self.gallery1.pk, 'user': self.profile2.user.username, 'mode': 'W', }, follow=True) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile2.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) def test_success_add_user_read_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post(reverse('gallery-modify'), { 'adduser': '', 'gallery': self.gallery1.pk, 'user': self.profile3.user.username, 'mode': 'R', }, follow=True) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile3.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('R', permissions[0].mode) def test_success_add_user_write_permission(self): login_check = self.client.login(username=self.profile1.user.username, password='******') self.assertTrue(login_check) response = self.client.post(reverse('gallery-modify'), { 'adduser': '', 'gallery': self.gallery1.pk, 'user': self.profile3.user.username, 'mode': 'W', }, follow=True) self.assertEqual(200, response.status_code) permissions = UserGallery.objects.filter(user=self.profile3.user, gallery=self.gallery1) self.assertEqual(1, len(permissions)) self.assertEqual('W', permissions[0].mode)
def test_toggle(self): author = ProfileFactory() login_check = self.client.login(username=author.user.username, password='******') self.assertTrue(login_check) # create topic and toggle request category = CategoryFactory(position=1) forum = ForumFactory(category=category, position_in_category=1) topic = TopicFactory(forum=forum, author=author.user) response = self.client.post(reverse('topic-edit') + '?topic={}'.format(topic.pk), {'request_featured': 1}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(200, response.status_code) self.assertEqual(FeaturedRequested.objects.count(), 1) r = FeaturedRequested.objects.last() self.assertEqual(r.content_object, topic) self.assertIn(author.user, r.users_voted.all()) # lock topic: cannot vote anymore topic.is_locked = True topic.save() response = self.client.post(reverse('topic-edit') + '?topic={}'.format(topic.pk), {'request_featured': 1}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(403, response.status_code) self.assertEqual(FeaturedRequested.objects.count(), 1) # create tutorial and toggle request tutorial = PublishedContentFactory(author_list=[author.user]) gallery = GalleryFactory() image = ImageFactory(gallery=gallery) tutorial.image = image tutorial.save() response = self.client.post(reverse('content:request-featured', kwargs={'pk': tutorial.pk}), {'request_featured': 1}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(200, response.status_code) self.assertEqual(FeaturedRequested.objects.count(), 2) r = FeaturedRequested.objects.last() self.assertEqual(r.content_object, tutorial) self.assertIn(author.user, r.users_voted.all()) # create opinion: cannot toggle request! opinion = PublishedContentFactory(type='OPINION', author_list=[author.user]) gallery = GalleryFactory() image = ImageFactory(gallery=gallery) opinion.image = image opinion.save() response = self.client.post(reverse('content:request-featured', kwargs={'pk': opinion.pk}), {'request_featured': 1}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(403, response.status_code) self.assertEqual(FeaturedRequested.objects.count(), 2) # set tutorial as obsolete: cannot toggle tutorial.is_obsolete = True tutorial.save() response = self.client.post(reverse('content:request-featured', kwargs={'pk': tutorial.pk}), {'request_featured': 1}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(403, response.status_code) r = FeaturedRequested.objects.get(pk=r.pk) self.assertEqual(r.content_object, tutorial) self.assertIn(author.user, r.users_voted.all()) # reject tutorial proposition tutorial.is_obsolete = False # can vote again tutorial.save() r = FeaturedRequested.objects.get(pk=r.pk) r.rejected = True r.save() # upvote with other user other = ProfileFactory() login_check = self.client.login(username=other.user.username, password='******') self.assertTrue(login_check) response = self.client.post(reverse('content:request-featured', kwargs={'pk': tutorial.pk}), {'request_featured': 1}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(200, response.status_code) r = FeaturedRequested.objects.get(pk=r.pk) self.assertIn(other.user, r.users_voted.all()) self.assertFalse(r.rejected) # not rejected anymore # reject for good, cannot vote anymore! r.rejected_for_good = True r.save() response = self.client.post(reverse('content:request-featured', kwargs={'pk': tutorial.pk}), {'request_featured': 1}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(403, response.status_code) r = FeaturedRequested.objects.get(pk=r.pk) self.assertIn(other.user, r.users_voted.all())