diff --git a/wagtail/users/tests.py b/wagtail/users/tests.py
index 6ba60ccd25..9b51278656 100644
--- a/wagtail/users/tests.py
+++ b/wagtail/users/tests.py
@@ -19,6 +19,10 @@ delete_user_perm_codename = "delete_{0}".format(AUTH_USER_MODEL_NAME.lower())
change_user_perm_codename = "change_{0}".format(AUTH_USER_MODEL_NAME.lower())
+def test_avatar_provider(user, default, size=50):
+ return '/nonexistent/path/to/avatar.png'
+
+
class CustomUserCreationForm(UserCreationForm):
country = forms.CharField(required=True, label="Country")
attachment = forms.FileField(required=True, label="Attachment")
@@ -929,7 +933,7 @@ class TestUserProfileCreation(TestCase, WagtailTestUtils):
self.test_user = get_user_model().objects.create_user(
username='testuser',
email='testuser@email.com',
- password='password'
+ password='password',
)
def test_user_created_without_profile(self):
@@ -942,6 +946,16 @@ class TestUserProfileCreation(TestCase, WagtailTestUtils):
# and get it from the db too
self.assertEqual(UserProfile.objects.filter(user=self.test_user).count(), 1)
+ def test_get_avatar_url_default(self):
+ user_profile = UserProfile.get_for_user(self.test_user)
+ self.assertEqual(user_profile.avatar_choice, 'default')
+ self.assertIn('default-user-avatar', user_profile.get_avatar_url())
+
+ def test_get_avatar_url_fallback_default(self):
+ user_profile = UserProfile.get_for_user(self.test_user)
+ user_profile.avatar_choice = 'Non-existent'
+ self.assertIn('default-user-avatar', user_profile.get_avatar_url())
+
class TestUserEditViewForNonSuperuser(TestCase, WagtailTestUtils):
def setUp(self):
diff --git a/wagtail/users/utils.py b/wagtail/users/utils.py
index 7a21d7382c..5487efc144 100644
--- a/wagtail/users/utils.py
+++ b/wagtail/users/utils.py
@@ -1,3 +1,6 @@
+import hashlib
+from django.utils.http import urlencode
+
from wagtail.core.compat import AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME
delete_user_perm = "{0}.delete_{1}".format(AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME.lower())
@@ -16,3 +19,12 @@ def user_can_delete_user(current_user, user_to_delete):
return False
return True
+
+
+def get_gravatar_url(email, default=None, size=50):
+ params = {'s': str(size)}
+ if default is not None:
+ params['default'] = default
+ gravatar_url = "https://www.gravatar.com/avatar/" + hashlib.md5(email.lower().encode('utf-8')).hexdigest() + "?"
+ gravatar_url += urlencode(params)
+ return gravatar_url
|