Browse Source

small improvements in avatar handling, tests for set_default_avatar

Rafał Pitoń 8 years ago
parent
commit
b624d54cb8

+ 2 - 2
misago/users/api/userendpoints/avatar.py

@@ -138,11 +138,11 @@ def avatar_gravatar(user, data):
     try:
     try:
         avatars.gravatar.set_avatar(user)
         avatars.gravatar.set_avatar(user)
         return _("Gravatar was downloaded and set as new avatar.")
         return _("Gravatar was downloaded and set as new avatar.")
-    except avatars.gravatar.GravatarError:
-        raise AvatarError(_("Failed to connect to Gravatar servers."))
     except avatars.gravatar.NoGravatarAvailable:
     except avatars.gravatar.NoGravatarAvailable:
         raise AvatarError(
         raise AvatarError(
             _("No Gravatar is associated with your e-mail address."))
             _("No Gravatar is associated with your e-mail address."))
+    except avatars.gravatar.GravatarError:
+        raise AvatarError(_("Failed to connect to Gravatar servers."))
 
 
 
 
 def avatar_gallery(user, data):
 def avatar_gallery(user, data):

+ 1 - 1
misago/users/avatars/__init__.py

@@ -13,7 +13,7 @@ SET_DEFAULT_AVATAR = {
 }
 }
 
 
 
 
-def set_default_avatar(user):
+def set_default_avatar(user, default_avatar, default_gravatar_fallback):
     try:
     try:
         SET_DEFAULT_AVATAR[settings.default_avatar](user)
         SET_DEFAULT_AVATAR[settings.default_avatar](user)
     except RuntimeError:
     except RuntimeError:

+ 2 - 1
misago/users/models/user.py

@@ -128,7 +128,8 @@ class UserManager(BaseUserManager):
         user.save(using=self._db)
         user.save(using=self._db)
 
 
         if set_default_avatar:
         if set_default_avatar:
-            avatars.set_default_avatar(user)
+            avatars.set_default_avatar(
+                user, settings.default_avatar, settings.default_gravatar_fallback)
         else:
         else:
             # just for test purposes
             # just for test purposes
             user.avatars = [{'size': 400, 'url': '//placekitten.com/400/400'}]
             user.avatars = [{'size': 400, 'url': '//placekitten.com/400/400'}]

+ 33 - 2
misago/users/tests/test_avatars.py

@@ -3,11 +3,13 @@ from PIL import Image
 
 
 from django.contrib.auth import get_user_model
 from django.contrib.auth import get_user_model
 from django.core.exceptions import ValidationError
 from django.core.exceptions import ValidationError
-from django.test import TestCase
+from django.test import TestCase, override_settings
+from django.utils.crypto import get_random_string
 
 
 from misago.conf import settings
 from misago.conf import settings
 
 
-from ..avatars import dynamic, gallery, gravatar, store, uploaded
+from ..avatars import (
+    set_default_avatar, dynamic, gallery, gravatar, store, uploaded)
 from ..models import Avatar, AvatarGallery
 from ..models import Avatar, AvatarGallery
 
 
 
 
@@ -148,6 +150,35 @@ class AvatarSetterTests(TestCase):
         gravatar.set_avatar(self.user)
         gravatar.set_avatar(self.user)
         self.assertAvatarWasSet()
         self.assertAvatarWasSet()
 
 
+    def test_default_avatar_gravatar(self):
+        """default gravatar gets set"""
+        self.assertNoAvatarIsSet()
+        set_default_avatar(self.user, 'gravatar', 'dynamic')
+        self.assertAvatarWasSet()
+
+    def test_default_avatar_gravatar_fallback_dynamic(self):
+        """default gravatar fails but fallback dynamic works"""
+        gibberish_email = '%s@%s.%s' % (
+            get_random_string(6), get_random_string(6), get_random_string(3))
+        self.user.set_email(gibberish_email)
+        self.user.save()
+
+        self.assertNoAvatarIsSet()
+        set_default_avatar(self.user, 'gravatar', 'dynamic')
+        self.assertAvatarWasSet()
+
+    def test_default_avatar_gravatar_fallback_empty_gallery(self):
+        """default both gravatar and fallback fail set"""
+        gibberish_email = '%s@%s.%s' % (
+            get_random_string(6), get_random_string(6), get_random_string(3))
+        self.user.set_email(gibberish_email)
+        self.user.save()
+
+        self.assertNoAvatarIsSet()
+        self.user.save()
+        set_default_avatar(self.user, 'gravatar', 'gallery')
+        self.assertAvatarWasSet()
+
 
 
 class MockAvatarFile(object):
 class MockAvatarFile(object):
     def __init__(self, size=None, name=None, mime=None):
     def __init__(self, size=None, name=None, mime=None):