Skip to content

Commit

Permalink
Merge 61f8f15 into f43696c
Browse files Browse the repository at this point in the history
  • Loading branch information
rafalp committed Aug 26, 2018
2 parents f43696c + 61f8f15 commit 3ea5dfc
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 14 deletions.
20 changes: 10 additions & 10 deletions misago/users/avatars/store.py
Expand Up @@ -16,15 +16,15 @@ def normalize_image(image):
return image.copy().convert('RGBA')


def delete_avatar(user):
if user.avatar_tmp:
user.avatar_tmp.delete(False)
def delete_avatar(user, delete_tmp=True, delete_src=True):
if delete_tmp and user.avatar_tmp:
user.avatar_tmp.delete(save=False)

if user.avatar_src:
user.avatar_src.delete(False)
if delete_src and user.avatar_src:
user.avatar_src.delete(save=False)

for avatar in user.avatar_set.all():
avatar.image.delete(False)
avatar.image.delete(save=False)
user.avatar_set.all().delete()


Expand All @@ -51,8 +51,8 @@ def store_avatar(user, image):
user.save(update_fields=['avatars'])


def store_new_avatar(user, image):
delete_avatar(user)
def store_new_avatar(user, image, delete_tmp=True, delete_src=True):
delete_avatar(user, delete_tmp=delete_tmp, delete_src=delete_src)
store_avatar(user, image)


Expand All @@ -63,15 +63,15 @@ def store_temporary_avatar(user, image):
image.save(image_stream, "PNG")

if user.avatar_tmp:
user.avatar_tmp.delete(False)
user.avatar_tmp.delete(save=False)

user.avatar_tmp = ContentFile(image_stream.getvalue(), 'avatar')
user.save(update_fields=['avatar_tmp'])


def store_original_avatar(user):
if user.avatar_src:
user.avatar_src.delete(False)
user.avatar_src.delete(save=False)
user.avatar_src = user.avatar_tmp
user.avatar_tmp = None
user.save(update_fields=['avatar_tmp', 'avatar_src'])
Expand Down
4 changes: 3 additions & 1 deletion misago/users/avatars/uploaded.py
Expand Up @@ -134,9 +134,11 @@ def crop_source_image(user, source, crop):
int(round((crop['y'] - min_size) * upscale * -1, 0)),
))

store.store_avatar(user, cropped_image)
if source == 'tmp':
store.store_new_avatar(user, cropped_image, delete_tmp=False)
store.store_original_avatar(user)
else:
store.store_new_avatar(user, cropped_image, delete_src=False)

return crop

Expand Down
17 changes: 14 additions & 3 deletions misago/users/tests/test_user_avatar_api.py
Expand Up @@ -6,6 +6,7 @@
from django.contrib.auth import get_user_model

from misago.acl.testutils import override_acl
from misago.conf import settings
from misago.users.avatars import gallery, store
from misago.users.models import AvatarGallery
from misago.users.testutils import AuthenticatedUserTestCase
Expand All @@ -23,10 +24,16 @@ class UserAvatarTests(AuthenticatedUserTestCase):
def setUp(self):
super(UserAvatarTests, self).setUp()
self.link = '/api/users/%s/avatar/' % self.user.pk
self.client.post(self.link, data={'avatar': 'generated'})

def get_current_user(self):
return UserModel.objects.get(pk=self.user.pk)

def assertOldAvatarsAreDeleted(self, user):
self.assertEqual(
user.avatar_set.count(), len(settings.MISAGO_AVATARS_SIZES)
)

def test_avatars_off(self):
"""custom avatars are not allowed"""
with self.settings(allow_custom_avatars=False):
Expand Down Expand Up @@ -109,16 +116,17 @@ def test_successful_gravatar_request(self):
response = self.client.post(self.link, data={'avatar': 'gravatar'})
self.assertContains(response, "Gravatar was downloaded and set")

self.assertOldAvatarsAreDeleted(self.user)

def test_generation_request(self):
"""generated avatar is set"""
response = self.client.post(self.link, data={'avatar': 'generated'})
self.assertContains(response, "New avatar based on your account")

self.assertOldAvatarsAreDeleted(self.user)

def test_avatar_upload_and_crop(self):
"""avatar can be uploaded and cropped"""
response = self.client.post(self.link, data={'avatar': 'generated'})
self.assertEqual(response.status_code, 200)

response = self.client.post(self.link, data={'avatar': 'upload'})
self.assertContains(response, "No file was sent.", status_code=400)

Expand Down Expand Up @@ -156,6 +164,7 @@ def test_avatar_upload_and_crop(self):
self.assertContains(response, "Uploaded avatar was set.")

self.assertFalse(self.get_current_user().avatar_tmp)
self.assertOldAvatarsAreDeleted(self.user)

avatar = Path(self.get_current_user().avatar_src.path)
self.assertTrue(avatar.exists())
Expand Down Expand Up @@ -192,6 +201,7 @@ def test_avatar_upload_and_crop(self):
content_type="application/json",
)
self.assertContains(response, "Avatar was re-cropped.")
self.assertOldAvatarsAreDeleted(self.user)

# delete user avatars, test if it deletes src and tmp
store.delete_avatar(self.get_current_user())
Expand Down Expand Up @@ -280,6 +290,7 @@ def test_gallery_set_valid_avatar(self):
)

self.assertContains(response, "Avatar from gallery was set.")
self.assertOldAvatarsAreDeleted(self.user)


class UserAvatarModerationTests(AuthenticatedUserTestCase):
Expand Down

0 comments on commit 3ea5dfc

Please sign in to comment.