Browse Source

Fixed avatar size correction

Rafał Pitoń 10 years ago
parent
commit
cad08b8275

+ 29 - 0
misago/users/tests/test_avatarserver_views.py

@@ -1,7 +1,10 @@
+from django.conf import settings
 from django.contrib.auth import get_user_model
 from django.contrib.auth import get_user_model
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.test import TestCase
 from django.test import TestCase
 
 
+from misago.users.views.avatarserver import clean_size
+
 
 
 class AvatarServerTests(TestCase):
 class AvatarServerTests(TestCase):
     def test_user_avatar_serving(self):
     def test_user_avatar_serving(self):
@@ -33,3 +36,29 @@ class AvatarServerTests(TestCase):
 
 
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response['Content-Type'], 'image/png')
         self.assertEqual(response['Content-Type'], 'image/png')
+
+
+class CleanSizeTests(TestCase):
+    def test_size_too_big(self):
+        """clean_size returns max for too big size"""
+        max_size = max(settings.MISAGO_AVATARS_SIZES)
+        too_big = max_size * 2
+
+        self.assertEqual(clean_size(too_big), max_size)
+
+    def test_size_too_small(self):
+        """clean_size returns min for too small size"""
+        min_size = min(settings.MISAGO_AVATARS_SIZES)
+        too_small = min_size / 2
+
+        self.assertEqual(clean_size(too_small), min_size)
+
+    def test_mid_sizes(self):
+        """clean_size returns approximates for little invalid sizes"""
+        for size in settings.MISAGO_AVATARS_SIZES:
+            self.assertEqual(clean_size(size - 1), size)
+
+    def test_valid_sizes(self):
+        """clean_size returns valid sizes untouched"""
+        for size in settings.MISAGO_AVATARS_SIZES:
+            self.assertEqual(clean_size(size), size)

+ 5 - 3
misago/users/views/avatarserver.py

@@ -62,11 +62,13 @@ def serve_user_avatar_source(request, user_id, token, type):
 
 
 
 
 def clean_size(size):
 def clean_size(size):
-    if not size in settings.MISAGO_AVATARS_SIZES:
-        size = max(settings.MISAGO_AVATARS_SIZES)
+    size = int(size)
+    if size not in settings.MISAGO_AVATARS_SIZES:
+        found_size = max(settings.MISAGO_AVATARS_SIZES)
         for valid_size in sorted(settings.MISAGO_AVATARS_SIZES, reverse=True):
         for valid_size in sorted(settings.MISAGO_AVATARS_SIZES, reverse=True):
             if valid_size > size:
             if valid_size > size:
-                size = valid_size
+                found_size = valid_size
+        return found_size
     return size
     return size