Просмотр исходного кода

Update misago.users.tests to crash less

rafalp 6 лет назад
Родитель
Сommit
facfb05f80

+ 0 - 1
devproject/settings.py

@@ -289,7 +289,6 @@ TEMPLATES = [
 
 
                 'misago.acl.context_processors.user_acl',
                 'misago.acl.context_processors.user_acl',
                 'misago.conf.context_processors.conf',
                 'misago.conf.context_processors.conf',
-                'misago.conf.context_processors.settings',
                 'misago.core.context_processors.site_address',
                 'misago.core.context_processors.site_address',
                 'misago.core.context_processors.momentjs_locale',
                 'misago.core.context_processors.momentjs_locale',
                 'misago.search.context_processors.search_providers',
                 'misago.search.context_processors.search_providers',

+ 1 - 1
misago/conftest.py

@@ -2,7 +2,7 @@ from misago.acl import ACL_CACHE
 from misago.conf import SETTINGS_CACHE
 from misago.conf import SETTINGS_CACHE
 from misago.users.constants import BANS_CACHE
 from misago.users.constants import BANS_CACHE
 
 
-def cache_versions():
+def get_cache_versions():
     return {
     return {
         ACL_CACHE: "abcdefgh",
         ACL_CACHE: "abcdefgh",
         BANS_CACHE: "abcdefgh",
         BANS_CACHE: "abcdefgh",

+ 2 - 1
misago/threads/tests/test_threads_merge_api.py

@@ -5,6 +5,7 @@ from django.urls import reverse
 from misago.acl import useracl
 from misago.acl import useracl
 from misago.acl.objectacl import add_acl_to_obj
 from misago.acl.objectacl import add_acl_to_obj
 from misago.categories.models import Category
 from misago.categories.models import Category
+from misago.conftest import get_cache_versions
 from misago.readtracker import poststracker
 from misago.readtracker import poststracker
 from misago.threads import testutils
 from misago.threads import testutils
 from misago.threads.models import Poll, PollVote, Post, Thread
 from misago.threads.models import Poll, PollVote, Post, Thread
@@ -14,7 +15,7 @@ from misago.threads.test import patch_category_acl, patch_other_category_acl
 
 
 from .test_threads_api import ThreadsApiTestCase
 from .test_threads_api import ThreadsApiTestCase
 
 
-cache_versions = {"acl": "abcdefgh"}
+cache_versions = get_cache_versions()
 
 
 
 
 class ThreadsMergeApiTests(ThreadsApiTestCase):
 class ThreadsMergeApiTests(ThreadsApiTestCase):

+ 2 - 3
misago/users/api/userendpoints/create.py

@@ -14,7 +14,7 @@ from misago.users.forms.register import RegisterForm
 from misago.users.registration import (
 from misago.users.registration import (
     get_registration_result_json, save_user_agreements, send_welcome_email
     get_registration_result_json, save_user_agreements, send_welcome_email
 )
 )
-
+from misago.users.setupnewuser import setup_new_user
 
 
 UserModel = get_user_model()
 UserModel = get_user_model()
 
 
@@ -50,9 +50,7 @@ def create_endpoint(request):
             form.cleaned_data['username'],
             form.cleaned_data['username'],
             form.cleaned_data['email'],
             form.cleaned_data['email'],
             form.cleaned_data['password'],
             form.cleaned_data['password'],
-            create_audit_trail=True,
             joined_from_ip=request.user_ip,
             joined_from_ip=request.user_ip,
-            set_default_avatar=True,
             **activation_kwargs
             **activation_kwargs
         )
         )
     except IntegrityError:
     except IntegrityError:
@@ -63,6 +61,7 @@ def create_endpoint(request):
             status=status.HTTP_400_BAD_REQUEST,
             status=status.HTTP_400_BAD_REQUEST,
         )
         )
 
 
+    setup_new_user(request.settings, new_user)
     save_user_agreements(new_user, form)
     save_user_agreements(new_user, form)
     send_welcome_email(request, new_user)
     send_welcome_email(request, new_user)
 
 

+ 1 - 1
misago/users/forms/admin.py

@@ -10,12 +10,12 @@ from misago.admin.forms import IsoDateTimeField, YesNoSwitch
 from misago.conf import settings
 from misago.conf import settings
 from misago.core import threadstore
 from misago.core import threadstore
 from misago.core.validators import validate_sluggable
 from misago.core.validators import validate_sluggable
+
 from misago.users.models import Ban, DataDownload, Rank
 from misago.users.models import Ban, DataDownload, Rank
 from misago.users.profilefields import profilefields
 from misago.users.profilefields import profilefields
 from misago.users.utils import hash_email
 from misago.users.utils import hash_email
 from misago.users.validators import validate_email, validate_username
 from misago.users.validators import validate_email, validate_username
 
 
-
 UserModel = get_user_model()
 UserModel = get_user_model()
 
 
 
 

+ 14 - 8
misago/users/management/commands/createsuperuser.py

@@ -12,10 +12,14 @@ from django.core.management.base import BaseCommand
 from django.db import DEFAULT_DB_ALIAS, IntegrityError
 from django.db import DEFAULT_DB_ALIAS, IntegrityError
 from django.utils.encoding import force_str
 from django.utils.encoding import force_str
 
 
+from misago.cache.versions import get_cache_versions
+from misago.conf.dynamicsettings import DynamicSettings
+
+from misago.users.setupnewuser import setup_new_user
 from misago.users.validators import validate_email, validate_username
 from misago.users.validators import validate_email, validate_username
 
 
 
 
-UserModel = get_user_model()
+User = get_user_model()
 
 
 
 
 class NotRunningInTTYException(Exception):
 class NotRunningInTTYException(Exception):
@@ -78,6 +82,9 @@ class Command(BaseCommand):
         interactive = options.get('interactive')
         interactive = options.get('interactive')
         verbosity = int(options.get('verbosity', 1))
         verbosity = int(options.get('verbosity', 1))
 
 
+        cache_versions = get_cache_versions()
+        settings = DynamicSettings(cache_versions)
+
         # Validate initial inputs
         # Validate initial inputs
         if username is not None:
         if username is not None:
             try:
             try:
@@ -103,7 +110,7 @@ class Command(BaseCommand):
         if not interactive:
         if not interactive:
             if username and email and password:
             if username and email and password:
                 # Call User manager's create_superuser using our wrapper
                 # Call User manager's create_superuser using our wrapper
-                self.create_superuser(username, email, password, verbosity)
+                self.create_superuser(username, email, password, settings, verbosity)
         else:
         else:
             try:
             try:
                 if hasattr(self.stdin, 'isatty') and not self.stdin.isatty():
                 if hasattr(self.stdin, 'isatty') and not self.stdin.isatty():
@@ -142,7 +149,7 @@ class Command(BaseCommand):
                         continue
                         continue
                     try:
                     try:
                         validate_password(
                         validate_password(
-                            raw_value, user=UserModel(username=username, email=email)
+                            raw_value, user=User(username=username, email=email)
                         )
                         )
                     except ValidationError as e:
                     except ValidationError as e:
                         self.stderr.write('\n'.join(e.messages))
                         self.stderr.write('\n'.join(e.messages))
@@ -152,7 +159,7 @@ class Command(BaseCommand):
                     password = raw_value
                     password = raw_value
 
 
                 # Call User manager's create_superuser using our wrapper
                 # Call User manager's create_superuser using our wrapper
-                self.create_superuser(username, email, password, verbosity)
+                self.create_superuser(username, email, password, settings, verbosity)
 
 
             except KeyboardInterrupt:
             except KeyboardInterrupt:
                 self.stderr.write("\nOperation cancelled.")
                 self.stderr.write("\nOperation cancelled.")
@@ -164,11 +171,10 @@ class Command(BaseCommand):
                     "to create one manually."
                     "to create one manually."
                 )
                 )
 
 
-    def create_superuser(self, username, email, password, verbosity):
+    def create_superuser(self, username, email, password, settings, verbosity):
         try:
         try:
-            user = UserModel.objects.create_superuser(
+            user = User.objects.create_superuser(username, email, password)
-                username, email, password, set_default_avatar=True
+            setup_new_user(settings, user)
-            )
 
 
             if verbosity >= 1:
             if verbosity >= 1:
                 message = "Superuser #%s has been created successfully."
                 message = "Superuser #%s has been created successfully."

+ 3 - 3
misago/users/setupnewuser.py

@@ -3,8 +3,8 @@ from .audittrail import create_user_audit_trail
 from .models import User
 from .models import User
 
 
 
 
-def setup_new_user(user, settings):
+def setup_new_user(settings, user):
-    set_default_subscription_options(user, settings)
+    set_default_subscription_options(settings, user)
     
     
     set_default_avatar(
     set_default_avatar(
         user, settings.default_avatar, settings.default_gravatar_fallback
         user, settings.default_avatar, settings.default_gravatar_fallback
@@ -21,7 +21,7 @@ SUBSCRIPTION_CHOICES = {
 }
 }
 
 
 
 
-def set_default_subscription_options(user, settings):
+def set_default_subscription_options(settings, user):
     started_threads = SUBSCRIPTION_CHOICES[settings.subscribe_start]
     started_threads = SUBSCRIPTION_CHOICES[settings.subscribe_start]
     user.subscribe_to_started_threads = started_threads
     user.subscribe_to_started_threads = started_threads
     
     

+ 8 - 8
misago/users/social/pipeline.py

@@ -18,8 +18,10 @@ from misago.users.models import Ban
 from misago.users.registration import (
 from misago.users.registration import (
     get_registration_result_json, save_user_agreements, send_welcome_email
     get_registration_result_json, save_user_agreements, send_welcome_email
 )
 )
+from misago.users.setupnewuser import setup_new_user
 from misago.users.validators import (
 from misago.users.validators import (
-    ValidationError, validate_new_registration, validate_email, validate_username)
+    ValidationError, validate_new_registration, validate_email, validate_username
+)
 
 
 from .utils import get_social_auth_backend_name, perpare_username
 from .utils import get_social_auth_backend_name, perpare_username
 
 
@@ -157,14 +159,13 @@ def create_user(strategy, details, backend, user=None, *args, **kwargs):
         activation_kwargs = {'requires_activation': UserModel.ACTIVATION_ADMIN}
         activation_kwargs = {'requires_activation': UserModel.ACTIVATION_ADMIN}
 
 
     new_user = UserModel.objects.create_user(
     new_user = UserModel.objects.create_user(
-        username, 
+        username,
-        email, 
+        email,
-        create_audit_trail=True,
         joined_from_ip=request.user_ip, 
         joined_from_ip=request.user_ip, 
-        set_default_avatar=True,
         **activation_kwargs
         **activation_kwargs
     )
     )
 
 
+    setup_new_user(request.settings, new_user)
     send_welcome_email(request, new_user)
     send_welcome_email(request, new_user)
 
 
     return {'user': new_user, 'is_new': True}
     return {'user': new_user, 'is_new': True}
@@ -187,7 +188,7 @@ def create_user_with_form(strategy, details, backend, user=None, *args, **kwargs
             
             
         form = SocialAuthRegisterForm(
         form = SocialAuthRegisterForm(
             request_data,
             request_data,
-            request=request,    
+            request=request,
             agreements=Agreement.objects.get_agreements(),
             agreements=Agreement.objects.get_agreements(),
         )
         )
         
         
@@ -206,11 +207,10 @@ def create_user_with_form(strategy, details, backend, user=None, *args, **kwargs
             new_user = UserModel.objects.create_user(
             new_user = UserModel.objects.create_user(
                 form.cleaned_data['username'],
                 form.cleaned_data['username'],
                 form.cleaned_data['email'],
                 form.cleaned_data['email'],
-                create_audit_trail=True,
                 joined_from_ip=request.user_ip,
                 joined_from_ip=request.user_ip,
-                set_default_avatar=True,
                 **activation_kwargs
                 **activation_kwargs
             )
             )
+            setup_new_user(request.settings, new_user)
         except IntegrityError:
         except IntegrityError:
             return JsonResponse({'__all__': _("Please try resubmitting the form.")}, status=400)
             return JsonResponse({'__all__': _("Please try resubmitting the form.")}, status=400)
 
 

+ 15 - 15
misago/users/tests/test_activation_views.py

@@ -4,10 +4,10 @@ from django.urls import reverse
 
 
 from misago.core.utils import encode_json_html
 from misago.core.utils import encode_json_html
 from misago.users.models import Ban
 from misago.users.models import Ban
+from misago.users.testutils import create_test_user
 from misago.users.tokens import make_activation_token
 from misago.users.tokens import make_activation_token
 
 
-
+User = get_user_model()
-UserModel = get_user_model()
 
 
 
 
 class ActivationViewsTests(TestCase):
 class ActivationViewsTests(TestCase):
@@ -18,8 +18,8 @@ class ActivationViewsTests(TestCase):
 
 
     def test_view_activate_banned(self):
     def test_view_activate_banned(self):
         """activate banned user shows error"""
         """activate banned user shows error"""
-        test_user = UserModel.objects.create_user(
+        test_user = create_test_user(
-            'Bob', 'bob@test.com', 'Pass.123', requires_activation=1
+            'Bob', 'bob@test.com', requires_activation=1
         )
         )
         Ban.objects.create(
         Ban.objects.create(
             check_type=Ban.USERNAME,
             check_type=Ban.USERNAME,
@@ -40,13 +40,13 @@ class ActivationViewsTests(TestCase):
         )
         )
         self.assertContains(response, encode_json_html("<p>Nope!</p>"), status_code=403)
         self.assertContains(response, encode_json_html("<p>Nope!</p>"), status_code=403)
 
 
-        test_user = UserModel.objects.get(pk=test_user.pk)
+        test_user = User.objects.get(pk=test_user.pk)
         self.assertEqual(test_user.requires_activation, 1)
         self.assertEqual(test_user.requires_activation, 1)
 
 
     def test_view_activate_invalid_token(self):
     def test_view_activate_invalid_token(self):
         """activate with invalid token shows error"""
         """activate with invalid token shows error"""
-        test_user = UserModel.objects.create_user(
+        test_user = create_test_user(
-            'Bob', 'bob@test.com', 'Pass.123', requires_activation=1
+            'Bob', 'bob@test.com', requires_activation=1
         )
         )
 
 
         activation_token = make_activation_token(test_user)
         activation_token = make_activation_token(test_user)
@@ -62,13 +62,13 @@ class ActivationViewsTests(TestCase):
         )
         )
         self.assertEqual(response.status_code, 400)
         self.assertEqual(response.status_code, 400)
 
 
-        test_user = UserModel.objects.get(pk=test_user.pk)
+        test_user = User.objects.get(pk=test_user.pk)
         self.assertEqual(test_user.requires_activation, 1)
         self.assertEqual(test_user.requires_activation, 1)
 
 
     def test_view_activate_disabled(self):
     def test_view_activate_disabled(self):
         """activate disabled user shows error"""
         """activate disabled user shows error"""
-        test_user = UserModel.objects.create_user(
+        test_user = create_test_user(
-            'Bob', 'bob@test.com', 'Pass.123', is_active=False
+            'Bob', 'bob@test.com', is_active=False
         )
         )
 
 
         activation_token = make_activation_token(test_user)
         activation_token = make_activation_token(test_user)
@@ -86,7 +86,7 @@ class ActivationViewsTests(TestCase):
 
 
     def test_view_activate_active(self):
     def test_view_activate_active(self):
         """activate active user shows error"""
         """activate active user shows error"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
+        test_user = create_test_user('Bob', 'bob@test.com')
 
 
         activation_token = make_activation_token(test_user)
         activation_token = make_activation_token(test_user)
 
 
@@ -101,13 +101,13 @@ class ActivationViewsTests(TestCase):
         )
         )
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
 
 
-        test_user = UserModel.objects.get(pk=test_user.pk)
+        test_user = User.objects.get(pk=test_user.pk)
         self.assertEqual(test_user.requires_activation, 0)
         self.assertEqual(test_user.requires_activation, 0)
 
 
     def test_view_activate_inactive(self):
     def test_view_activate_inactive(self):
         """activate inactive user passess"""
         """activate inactive user passess"""
-        test_user = UserModel.objects.create_user(
+        test_user = create_test_user(
-            'Bob', 'bob@test.com', 'Pass.123', requires_activation=1
+            'Bob', 'bob@test.com', requires_activation=1
         )
         )
 
 
         activation_token = make_activation_token(test_user)
         activation_token = make_activation_token(test_user)
@@ -124,5 +124,5 @@ class ActivationViewsTests(TestCase):
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
         self.assertContains(response, "your account has been activated!")
         self.assertContains(response, "your account has been activated!")
 
 
-        test_user = UserModel.objects.get(pk=test_user.pk)
+        test_user = User.objects.get(pk=test_user.pk)
         self.assertEqual(test_user.requires_activation, 0)
         self.assertEqual(test_user.requires_activation, 0)

+ 1 - 1
misago/users/tests/test_joinip_profilefield.py

@@ -27,7 +27,7 @@ class JoinIpProfileFieldTests(AdminTestCase):
         self.assertNotContains(response, "Join IP")
         self.assertNotContains(response, "Join IP")
 
 
     def test_admin_edits_field(self):
     def test_admin_edits_field(self):
-        """admin form allows admins to edit field"""
+        """join_ip is non-editable by admin"""
         response = self.client.post(
         response = self.client.post(
             self.test_link,
             self.test_link,
             data={
             data={

+ 5 - 10
misago/users/tests/test_lists_views.py

@@ -1,4 +1,3 @@
-from django.contrib.auth import get_user_model
 from django.urls import reverse
 from django.urls import reverse
 
 
 from misago.acl.test import patch_user_acl
 from misago.acl.test import patch_user_acl
@@ -6,10 +5,7 @@ from misago.categories.models import Category
 from misago.threads.testutils import post_thread
 from misago.threads.testutils import post_thread
 from misago.users.activepostersranking import build_active_posters_ranking
 from misago.users.activepostersranking import build_active_posters_ranking
 from misago.users.models import Rank
 from misago.users.models import Rank
-from misago.users.testutils import AuthenticatedUserTestCase
+from misago.users.testutils import AuthenticatedUserTestCase, create_test_user
-
-
-UserModel = get_user_model()
 
 
 
 
 class UsersListTestCase(AuthenticatedUserTestCase):
 class UsersListTestCase(AuthenticatedUserTestCase):
@@ -48,10 +44,9 @@ class ActivePostersTests(UsersListTestCase):
 
 
         # Create 50 test users and see if errors appeared
         # Create 50 test users and see if errors appeared
         for i in range(50):
         for i in range(50):
-            user = UserModel.objects.create_user(
+            user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'm%s@te.com' % i,
                 'm%s@te.com' % i,
-                'Pass.123',
                 posts=12345,
                 posts=12345,
             )
             )
             post_thread(category, poster=user)
             post_thread(category, poster=user)
@@ -65,7 +60,7 @@ class ActivePostersTests(UsersListTestCase):
 class UsersRankTests(UsersListTestCase):
 class UsersRankTests(UsersListTestCase):
     def test_ranks(self):
     def test_ranks(self):
         """ranks lists are handled correctly"""
         """ranks lists are handled correctly"""
-        rank_user = UserModel.objects.create_user('Visible', 'visible@te.com', 'Pass.123')
+        rank_user = create_test_user('Visible', 'visible@te.com')
 
 
         for rank in Rank.objects.iterator():
         for rank in Rank.objects.iterator():
             rank_user.rank = rank
             rank_user.rank = rank
@@ -87,7 +82,7 @@ class UsersRankTests(UsersListTestCase):
 
 
     def test_disabled_users(self):
     def test_disabled_users(self):
         """ranks lists excludes disabled accounts"""
         """ranks lists excludes disabled accounts"""
-        rank_user = UserModel.objects.create_user(
+        rank_user = create_test_user(
             'Visible',
             'Visible',
             'visible@te.com',
             'visible@te.com',
             'Pass.123',
             'Pass.123',
@@ -117,7 +112,7 @@ class UsersRankTests(UsersListTestCase):
         self.user.is_staff = True
         self.user.is_staff = True
         self.user.save()
         self.user.save()
 
 
-        rank_user = UserModel.objects.create_user(
+        rank_user = create_test_user(
             'Visible',
             'Visible',
             'visible@te.com',
             'visible@te.com',
             'Pass.123',
             'Pass.123',

+ 2 - 5
misago/users/tests/test_mention_api.py

@@ -1,11 +1,8 @@
-from django.contrib.auth import get_user_model
 from django.test import TestCase
 from django.test import TestCase
 from django.urls import reverse
 from django.urls import reverse
 
 
 from misago.conf import settings
 from misago.conf import settings
-
+from misago.users.testutils import create_test_user
-
-UserModel = get_user_model()
 
 
 
 
 class AuthenticateApiTests(TestCase):
 class AuthenticateApiTests(TestCase):
@@ -28,7 +25,7 @@ class AuthenticateApiTests(TestCase):
 
 
     def test_user_search(self):
     def test_user_search(self):
         """api searches uses"""
         """api searches uses"""
-        UserModel.objects.create_user('BobBoberson', 'bob@test.com', 'pass123')
+        create_test_user('BobBoberson', 'bob@test.com')
 
 
         # exact case sensitive match
         # exact case sensitive match
         response = self.client.get(self.api_link + '?q=BobBoberson')
         response = self.client.get(self.api_link + '?q=BobBoberson')

+ 9 - 9
misago/users/tests/test_new_user_setup.py

@@ -17,7 +17,7 @@ class NewUserSetupTests(TestCase):
         user = User.objects.create_user("User", "test@example.com")
         user = User.objects.create_user("User", "test@example.com")
         cache_versions = get_cache_versions()
         cache_versions = get_cache_versions()
         settings = DynamicSettings(cache_versions)
         settings = DynamicSettings(cache_versions)
-        setup_new_user(user, settings)
+        setup_new_user(settings, user)
         assert user.avatars
         assert user.avatars
         assert user.avatar_set.exists()
         assert user.avatar_set.exists()
 
 
@@ -27,15 +27,15 @@ class NewUserSetupTests(TestCase):
         settings = DynamicSettings(cache_versions)
         settings = DynamicSettings(cache_versions)
 
 
         with override_dynamic_settings(subscribe_start="no"):
         with override_dynamic_settings(subscribe_start="no"):
-            set_default_subscription_options(user, settings)
+            set_default_subscription_options(settings, user)
             assert user.subscribe_to_started_threads == User.SUBSCRIPTION_NONE
             assert user.subscribe_to_started_threads == User.SUBSCRIPTION_NONE
 
 
         with override_dynamic_settings(subscribe_start="watch"):
         with override_dynamic_settings(subscribe_start="watch"):
-            set_default_subscription_options(user, settings)
+            set_default_subscription_options(settings, user)
             assert user.subscribe_to_started_threads == User.SUBSCRIPTION_NOTIFY
             assert user.subscribe_to_started_threads == User.SUBSCRIPTION_NOTIFY
 
 
         with override_dynamic_settings(subscribe_start="watch_email"):
         with override_dynamic_settings(subscribe_start="watch_email"):
-            set_default_subscription_options(user, settings)
+            set_default_subscription_options(settings, user)
             assert user.subscribe_to_started_threads == User.SUBSCRIPTION_ALL
             assert user.subscribe_to_started_threads == User.SUBSCRIPTION_ALL
 
 
     def test_default_replied_threads_subscription_option_is_set_for_user(self):
     def test_default_replied_threads_subscription_option_is_set_for_user(self):
@@ -44,27 +44,27 @@ class NewUserSetupTests(TestCase):
         settings = DynamicSettings(cache_versions)
         settings = DynamicSettings(cache_versions)
 
 
         with override_dynamic_settings(subscribe_reply="no"):
         with override_dynamic_settings(subscribe_reply="no"):
-            set_default_subscription_options(user, settings)
+            set_default_subscription_options(settings, user)
             assert user.subscribe_to_replied_threads == User.SUBSCRIPTION_NONE
             assert user.subscribe_to_replied_threads == User.SUBSCRIPTION_NONE
 
 
         with override_dynamic_settings(subscribe_reply="watch"):
         with override_dynamic_settings(subscribe_reply="watch"):
-            set_default_subscription_options(user, settings)
+            set_default_subscription_options(settings, user)
             assert user.subscribe_to_replied_threads == User.SUBSCRIPTION_NOTIFY
             assert user.subscribe_to_replied_threads == User.SUBSCRIPTION_NOTIFY
 
 
         with override_dynamic_settings(subscribe_reply="watch_email"):
         with override_dynamic_settings(subscribe_reply="watch_email"):
-            set_default_subscription_options(user, settings)
+            set_default_subscription_options(settings, user)
             assert user.subscribe_to_replied_threads == User.SUBSCRIPTION_ALL
             assert user.subscribe_to_replied_threads == User.SUBSCRIPTION_ALL
 
 
     def test_if_user_ip_is_available_audit_trail_is_created_for_user(self):
     def test_if_user_ip_is_available_audit_trail_is_created_for_user(self):
         user = User.objects.create_user("User", "test@example.com", joined_from_ip="0.0.0.0")
         user = User.objects.create_user("User", "test@example.com", joined_from_ip="0.0.0.0")
         cache_versions = get_cache_versions()
         cache_versions = get_cache_versions()
         settings = DynamicSettings(cache_versions)
         settings = DynamicSettings(cache_versions)
-        setup_new_user(user, settings)
+        setup_new_user(settings, user)
         assert user.audittrail_set.count() == 1
         assert user.audittrail_set.count() == 1
 
 
     def test_if_user_ip_is_not_available_audit_trail_is_not_created(self):
     def test_if_user_ip_is_not_available_audit_trail_is_not_created(self):
         user = User.objects.create_user("User", "test@example.com")
         user = User.objects.create_user("User", "test@example.com")
         cache_versions = get_cache_versions()
         cache_versions = get_cache_versions()
         settings = DynamicSettings(cache_versions)
         settings = DynamicSettings(cache_versions)
-        setup_new_user(user, settings)
+        setup_new_user(settings, user)
         assert user.audittrail_set.exists() is False
         assert user.audittrail_set.exists() is False

+ 2 - 23
misago/users/tests/test_twitter_profilefield.py

@@ -145,18 +145,7 @@ class TwitterProfileFieldTests(AdminTestCase):
         response = self.client.get(test_link)
         response = self.client.get(test_link)
         self.assertEqual(
         self.assertEqual(
             response.json()['groups'],
             response.json()['groups'],
-            [
+            []
-                {
-                    'name': 'IP address',
-                    'fields': [
-                        {
-                            'fieldname': 'join_ip',
-                            'name': 'Join IP',
-                            'text': '127.0.0.1',
-                        },
-                    ],
-                },
-            ]
         )
         )
 
 
         self.user.profile_fields['twitter'] = 'lorem_ipsum'
         self.user.profile_fields['twitter'] = 'lorem_ipsum'
@@ -176,17 +165,7 @@ class TwitterProfileFieldTests(AdminTestCase):
                             'url': 'https://twitter.com/lorem_ipsum',
                             'url': 'https://twitter.com/lorem_ipsum',
                         }
                         }
                     ],
                     ],
-                },
+                }
-                {
-                    'name': 'IP address',
-                    'fields': [
-                        {
-                            'fieldname': 'join_ip',
-                            'name': 'Join IP',
-                            'text': '127.0.0.1',
-                        },
-                    ],
-                },
             ]
             ]
         )
         )
 
 

+ 69 - 90
misago/users/tests/test_useradmin_views.py

@@ -8,11 +8,12 @@ from misago.categories.models import Category
 from misago.legal.models import Agreement
 from misago.legal.models import Agreement
 from misago.legal.utils import save_user_agreement_acceptance
 from misago.legal.utils import save_user_agreement_acceptance
 from misago.threads.testutils import post_thread, reply_thread
 from misago.threads.testutils import post_thread, reply_thread
+
 from misago.users.datadownloads import request_user_data_download
 from misago.users.datadownloads import request_user_data_download
 from misago.users.models import Ban, DataDownload, Rank
 from misago.users.models import Ban, DataDownload, Rank
+from misago.users.testutils import create_test_user
 
 
-
+User = get_user_model()
-UserModel = get_user_model()
 
 
 
 
 class UserAdminViewsTests(AdminTestCase):
 class UserAdminViewsTests(AdminTestCase):
@@ -42,9 +43,9 @@ class UserAdminViewsTests(AdminTestCase):
         response = self.client.get(link_base)
         response = self.client.get(link_base)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
 
 
-        user_a = UserModel.objects.create_user('Tyrael', 't123@test.com', 'pass123')
+        user_a = create_test_user('Tyrael', 't123@test.com')
-        user_b = UserModel.objects.create_user('Tyrion', 't321@test.com', 'pass123')
+        user_b = create_test_user('Tyrion', 't321@test.com')
-        user_c = UserModel.objects.create_user('Karen', 't432@test.com', 'pass123')
+        user_c = create_test_user('Karen', 't432@test.com')
 
 
         # Search both
         # Search both
         response = self.client.get('%s&username=tyr' % link_base)
         response = self.client.get('%s&username=tyr' % link_base)
@@ -94,10 +95,9 @@ class UserAdminViewsTests(AdminTestCase):
         """users list activates multiple users"""
         """users list activates multiple users"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
                 requires_activation=1,
                 requires_activation=1,
             )
             )
             user_pks.append(test_user.pk)
             user_pks.append(test_user.pk)
@@ -111,7 +111,7 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        inactive_qs = UserModel.objects.filter(
+        inactive_qs = User.objects.filter(
             id__in=user_pks,
             id__in=user_pks,
             requires_activation=1,
             requires_activation=1,
         )
         )
@@ -122,10 +122,9 @@ class UserAdminViewsTests(AdminTestCase):
         """users list bans multiple users"""
         """users list bans multiple users"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
                 requires_activation=1,
                 requires_activation=1,
             )
             )
             user_pks.append(test_user.pk)
             user_pks.append(test_user.pk)
@@ -157,10 +156,9 @@ class UserAdminViewsTests(AdminTestCase):
         """users list bans multiple users that also have ips"""
         """users list bans multiple users that also have ips"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
                 joined_from_ip='73.95.67.27',
                 joined_from_ip='73.95.67.27',
                 requires_activation=1,
                 requires_activation=1,
             )
             )
@@ -193,10 +191,9 @@ class UserAdminViewsTests(AdminTestCase):
         """users list requests data download for multiple users"""
         """users list requests data download for multiple users"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
                 requires_activation=1,
                 requires_activation=1,
             )
             )
             user_pks.append(test_user.pk)
             user_pks.append(test_user.pk)
@@ -216,10 +213,9 @@ class UserAdminViewsTests(AdminTestCase):
         """users list avoids excessive data download requests for multiple users"""
         """users list avoids excessive data download requests for multiple users"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
                 requires_activation=1,
                 requires_activation=1,
             )
             )
             request_user_data_download(test_user)
             request_user_data_download(test_user)
@@ -256,10 +252,9 @@ class UserAdminViewsTests(AdminTestCase):
         """its impossible to delete admin account"""
         """its impossible to delete admin account"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
             )
             )
             user_pks.append(test_user.pk)
             user_pks.append(test_user.pk)
 
 
@@ -279,16 +274,15 @@ class UserAdminViewsTests(AdminTestCase):
         self.assertContains(response, "is admin and can")
         self.assertContains(response, "is admin and can")
         self.assertContains(response, "be deleted.")
         self.assertContains(response, "be deleted.")
 
 
-        self.assertEqual(UserModel.objects.count(), 11)
+        self.assertEqual(User.objects.count(), 11)
 
 
     def test_mass_delete_accounts_superadmin(self):
     def test_mass_delete_accounts_superadmin(self):
         """its impossible to delete superadmin account"""
         """its impossible to delete superadmin account"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
             )
             )
             user_pks.append(test_user.pk)
             user_pks.append(test_user.pk)
 
 
@@ -308,27 +302,25 @@ class UserAdminViewsTests(AdminTestCase):
         self.assertContains(response, "is admin and can")
         self.assertContains(response, "is admin and can")
         self.assertContains(response, "be deleted.")
         self.assertContains(response, "be deleted.")
 
 
-        self.assertEqual(UserModel.objects.count(), 11)
+        self.assertEqual(User.objects.count(), 11)
 
 
     def test_mass_delete_accounts(self):
     def test_mass_delete_accounts(self):
         """users list deletes users"""
         """users list deletes users"""
         # create 10 users to delete
         # create 10 users to delete
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
                 requires_activation=0,
                 requires_activation=0,
             )
             )
             user_pks.append(test_user.pk)
             user_pks.append(test_user.pk)
 
 
         # create 10 more users that won't be deleted
         # create 10 more users that won't be deleted
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Weebl%s' % i,
                 'Weebl%s' % i,
                 'weebl%s@test.com' % i,
                 'weebl%s@test.com' % i,
-                'pass123',
                 requires_activation=0,
                 requires_activation=0,
             )
             )
 
 
@@ -340,7 +332,7 @@ class UserAdminViewsTests(AdminTestCase):
             }
             }
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
-        self.assertEqual(UserModel.objects.count(), 11)
+        self.assertEqual(User.objects.count(), 11)
 
 
     def test_mass_delete_all_self(self):
     def test_mass_delete_all_self(self):
         """its impossible to delete oneself with content"""
         """its impossible to delete oneself with content"""
@@ -362,10 +354,9 @@ class UserAdminViewsTests(AdminTestCase):
         """its impossible to delete admin account and content"""
         """its impossible to delete admin account and content"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
             )
             )
             user_pks.append(test_user.pk)
             user_pks.append(test_user.pk)
 
 
@@ -385,16 +376,15 @@ class UserAdminViewsTests(AdminTestCase):
         self.assertContains(response, "is admin and can")
         self.assertContains(response, "is admin and can")
         self.assertContains(response, "be deleted.")
         self.assertContains(response, "be deleted.")
 
 
-        self.assertEqual(UserModel.objects.count(), 11)
+        self.assertEqual(User.objects.count(), 11)
 
 
     def test_mass_delete_all_superadmin(self):
     def test_mass_delete_all_superadmin(self):
         """its impossible to delete superadmin account and content"""
         """its impossible to delete superadmin account and content"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
             )
             )
             user_pks.append(test_user.pk)
             user_pks.append(test_user.pk)
 
 
@@ -414,16 +404,15 @@ class UserAdminViewsTests(AdminTestCase):
         self.assertContains(response, "is admin and can")
         self.assertContains(response, "is admin and can")
         self.assertContains(response, "be deleted.")
         self.assertContains(response, "be deleted.")
 
 
-        self.assertEqual(UserModel.objects.count(), 11)
+        self.assertEqual(User.objects.count(), 11)
 
 
     def test_mass_delete_all(self):
     def test_mass_delete_all(self):
         """users list mass deleting view has no showstoppers"""
         """users list mass deleting view has no showstoppers"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
-            test_user = UserModel.objects.create_user(
+            test_user = create_test_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
-                'pass123',
                 requires_activation=1,
                 requires_activation=1,
             )
             )
             user_pks.append(test_user.pk)
             user_pks.append(test_user.pk)
@@ -438,7 +427,7 @@ class UserAdminViewsTests(AdminTestCase):
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
          # asser that no user has been deleted, because actuall deleting happens in
          # asser that no user has been deleted, because actuall deleting happens in
          # dedicated views called via ajax from JavaScript
          # dedicated views called via ajax from JavaScript
-        self.assertEqual(UserModel.objects.count(), 11)
+        self.assertEqual(User.objects.count(), 11)
 
 
     def test_new_view(self):
     def test_new_view(self):
         """new user view creates account"""
         """new user view creates account"""
@@ -461,8 +450,8 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        UserModel.objects.get_by_username('Bawww')
+        User.objects.get_by_username('Bawww')
-        test_user = UserModel.objects.get_by_email('reg@stered.com')
+        test_user = User.objects.get_by_email('reg@stered.com')
 
 
         self.assertTrue(test_user.check_password('pass123'))
         self.assertTrue(test_user.check_password('pass123'))
 
 
@@ -487,14 +476,14 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        UserModel.objects.get_by_username('Bawww')
+        User.objects.get_by_username('Bawww')
-        test_user = UserModel.objects.get_by_email('reg@stered.com')
+        test_user = User.objects.get_by_email('reg@stered.com')
 
 
         self.assertTrue(test_user.check_password(' pass123 '))
         self.assertTrue(test_user.check_password(' pass123 '))
 
 
     def test_edit_view(self):
     def test_edit_view(self):
         """edit user view changes account"""
         """edit user view changes account"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:edit', kwargs={
             'misago:admin:users:accounts:edit', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,
@@ -525,13 +514,13 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertTrue(updated_user.check_password('newpass123'))
         self.assertTrue(updated_user.check_password('newpass123'))
         self.assertEqual(updated_user.username, 'Bawww')
         self.assertEqual(updated_user.username, 'Bawww')
         self.assertEqual(updated_user.slug, 'bawww')
         self.assertEqual(updated_user.slug, 'bawww')
 
 
-        UserModel.objects.get_by_username('Bawww')
+        User.objects.get_by_username('Bawww')
-        UserModel.objects.get_by_email('reg@stered.com')
+        User.objects.get_by_email('reg@stered.com')
 
 
     def test_edit_dont_change_username(self):
     def test_edit_dont_change_username(self):
         """
         """
@@ -539,7 +528,7 @@ class UserAdminViewsTests(AdminTestCase):
 
 
         This is regression test for issue #640
         This is regression test for issue #640
         """
         """
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:edit', kwargs={
             'misago:admin:users:accounts:edit', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,
@@ -556,7 +545,6 @@ class UserAdminViewsTests(AdminTestCase):
                 'rank': str(test_user.rank_id),
                 'rank': str(test_user.rank_id),
                 'roles': str(test_user.roles.all()[0].pk),
                 'roles': str(test_user.roles.all()[0].pk),
                 'email': 'reg@stered.com',
                 'email': 'reg@stered.com',
-                'new_password': 'pass123',
                 'signature': 'Hello world!',
                 'signature': 'Hello world!',
                 'is_signature_locked': '1',
                 'is_signature_locked': '1',
                 'is_hiding_presence': '0',
                 'is_hiding_presence': '0',
@@ -569,14 +557,14 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertEqual(updated_user.username, 'Bob')
         self.assertEqual(updated_user.username, 'Bob')
         self.assertEqual(updated_user.slug, 'bob')
         self.assertEqual(updated_user.slug, 'bob')
         self.assertEqual(updated_user.namechanges.count(), 0)
         self.assertEqual(updated_user.namechanges.count(), 0)
 
 
     def test_edit_change_password_whitespaces(self):
     def test_edit_change_password_whitespaces(self):
         """edit user view changes account password to include whitespaces"""
         """edit user view changes account password to include whitespaces"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:edit', kwargs={
             'misago:admin:users:accounts:edit', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,
@@ -607,17 +595,17 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertTrue(updated_user.check_password(' newpass123 '))
         self.assertTrue(updated_user.check_password(' newpass123 '))
         self.assertEqual(updated_user.username, 'Bawww')
         self.assertEqual(updated_user.username, 'Bawww')
         self.assertEqual(updated_user.slug, 'bawww')
         self.assertEqual(updated_user.slug, 'bawww')
 
 
-        UserModel.objects.get_by_username('Bawww')
+        User.objects.get_by_username('Bawww')
-        UserModel.objects.get_by_email('reg@stered.com')
+        User.objects.get_by_email('reg@stered.com')
 
 
     def test_edit_make_admin(self):
     def test_edit_make_admin(self):
         """edit user view allows super admin to make other user admin"""
         """edit user view allows super admin to make other user admin"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:edit', kwargs={
             'misago:admin:users:accounts:edit', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,
@@ -635,7 +623,6 @@ class UserAdminViewsTests(AdminTestCase):
                 'rank': str(test_user.rank_id),
                 'rank': str(test_user.rank_id),
                 'roles': str(test_user.roles.all()[0].pk),
                 'roles': str(test_user.roles.all()[0].pk),
                 'email': 'reg@stered.com',
                 'email': 'reg@stered.com',
-                'new_password': 'pass123',
                 'is_staff': '1',
                 'is_staff': '1',
                 'is_superuser': '0',
                 'is_superuser': '0',
                 'signature': 'Hello world!',
                 'signature': 'Hello world!',
@@ -650,13 +637,13 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertTrue(updated_user.is_staff)
         self.assertTrue(updated_user.is_staff)
         self.assertFalse(updated_user.is_superuser)
         self.assertFalse(updated_user.is_superuser)
 
 
     def test_edit_make_superadmin_admin(self):
     def test_edit_make_superadmin_admin(self):
         """edit user view allows super admin to make other user super admin"""
         """edit user view allows super admin to make other user super admin"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:edit', kwargs={
             'misago:admin:users:accounts:edit', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,
@@ -674,7 +661,6 @@ class UserAdminViewsTests(AdminTestCase):
                 'rank': str(test_user.rank_id),
                 'rank': str(test_user.rank_id),
                 'roles': str(test_user.roles.all()[0].pk),
                 'roles': str(test_user.roles.all()[0].pk),
                 'email': 'reg@stered.com',
                 'email': 'reg@stered.com',
-                'new_password': 'pass123',
                 'is_staff': '0',
                 'is_staff': '0',
                 'is_superuser': '1',
                 'is_superuser': '1',
                 'signature': 'Hello world!',
                 'signature': 'Hello world!',
@@ -689,16 +675,15 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertFalse(updated_user.is_staff)
         self.assertFalse(updated_user.is_staff)
         self.assertTrue(updated_user.is_superuser)
         self.assertTrue(updated_user.is_superuser)
 
 
     def test_edit_denote_superadmin(self):
     def test_edit_denote_superadmin(self):
         """edit user view allows super admin to denote other super admin"""
         """edit user view allows super admin to denote other super admin"""
-        test_user = UserModel.objects.create_user(
+        test_user = create_test_user(
             'Bob',
             'Bob',
             'bob@test.com',
             'bob@test.com',
-            'pass123',
             is_staff=True,
             is_staff=True,
             is_superuser=True,
             is_superuser=True,
         )
         )
@@ -720,7 +705,6 @@ class UserAdminViewsTests(AdminTestCase):
                 'rank': str(test_user.rank_id),
                 'rank': str(test_user.rank_id),
                 'roles': str(test_user.roles.all()[0].pk),
                 'roles': str(test_user.roles.all()[0].pk),
                 'email': 'reg@stered.com',
                 'email': 'reg@stered.com',
-                'new_password': 'pass123',
                 'is_staff': '0',
                 'is_staff': '0',
                 'is_superuser': '0',
                 'is_superuser': '0',
                 'signature': 'Hello world!',
                 'signature': 'Hello world!',
@@ -735,7 +719,7 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertFalse(updated_user.is_staff)
         self.assertFalse(updated_user.is_staff)
         self.assertFalse(updated_user.is_superuser)
         self.assertFalse(updated_user.is_superuser)
 
 
@@ -744,7 +728,7 @@ class UserAdminViewsTests(AdminTestCase):
         self.user.is_superuser = False
         self.user.is_superuser = False
         self.user.save()
         self.user.save()
 
 
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:edit', kwargs={
             'misago:admin:users:accounts:edit', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,
@@ -762,7 +746,6 @@ class UserAdminViewsTests(AdminTestCase):
                 'rank': str(test_user.rank_id),
                 'rank': str(test_user.rank_id),
                 'roles': str(test_user.roles.all()[0].pk),
                 'roles': str(test_user.roles.all()[0].pk),
                 'email': 'reg@stered.com',
                 'email': 'reg@stered.com',
-                'new_password': 'pass123',
                 'is_staff': '1',
                 'is_staff': '1',
                 'is_superuser': '1',
                 'is_superuser': '1',
                 'signature': 'Hello world!',
                 'signature': 'Hello world!',
@@ -777,7 +760,7 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertFalse(updated_user.is_staff)
         self.assertFalse(updated_user.is_staff)
         self.assertFalse(updated_user.is_superuser)
         self.assertFalse(updated_user.is_superuser)
 
 
@@ -786,7 +769,7 @@ class UserAdminViewsTests(AdminTestCase):
         self.user.is_superuser = False
         self.user.is_superuser = False
         self.user.save()
         self.user.save()
 
 
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:edit', kwargs={
             'misago:admin:users:accounts:edit', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,
@@ -804,7 +787,6 @@ class UserAdminViewsTests(AdminTestCase):
                 'rank': str(test_user.rank_id),
                 'rank': str(test_user.rank_id),
                 'roles': str(test_user.roles.all()[0].pk),
                 'roles': str(test_user.roles.all()[0].pk),
                 'email': 'reg@stered.com',
                 'email': 'reg@stered.com',
-                'new_password': 'pass123',
                 'is_staff': '0',
                 'is_staff': '0',
                 'is_superuser': '0',
                 'is_superuser': '0',
                 'signature': 'Hello world!',
                 'signature': 'Hello world!',
@@ -821,7 +803,7 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertFalse(updated_user.is_active)
         self.assertFalse(updated_user.is_active)
         self.assertEqual(updated_user.is_active_staff_message, "Disabled in test!")
         self.assertEqual(updated_user.is_active_staff_message, "Disabled in test!")
 
 
@@ -830,7 +812,7 @@ class UserAdminViewsTests(AdminTestCase):
         self.user.is_superuser = True
         self.user.is_superuser = True
         self.user.save()
         self.user.save()
 
 
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
 
 
         test_user.is_staff = True
         test_user.is_staff = True
         test_user.save()
         test_user.save()
@@ -852,7 +834,6 @@ class UserAdminViewsTests(AdminTestCase):
                 'rank': str(test_user.rank_id),
                 'rank': str(test_user.rank_id),
                 'roles': str(test_user.roles.all()[0].pk),
                 'roles': str(test_user.roles.all()[0].pk),
                 'email': 'reg@stered.com',
                 'email': 'reg@stered.com',
-                'new_password': 'pass123',
                 'is_staff': '1',
                 'is_staff': '1',
                 'is_superuser': '0',
                 'is_superuser': '0',
                 'signature': 'Hello world!',
                 'signature': 'Hello world!',
@@ -869,7 +850,7 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertFalse(updated_user.is_active)
         self.assertFalse(updated_user.is_active)
         self.assertEqual(updated_user.is_active_staff_message, "Disabled in test!")
         self.assertEqual(updated_user.is_active_staff_message, "Disabled in test!")
 
 
@@ -878,7 +859,7 @@ class UserAdminViewsTests(AdminTestCase):
         self.user.is_superuser = False
         self.user.is_superuser = False
         self.user.save()
         self.user.save()
 
 
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
 
 
         test_user.is_staff = True
         test_user.is_staff = True
         test_user.save()
         test_user.save()
@@ -900,7 +881,6 @@ class UserAdminViewsTests(AdminTestCase):
                 'rank': str(test_user.rank_id),
                 'rank': str(test_user.rank_id),
                 'roles': str(test_user.roles.all()[0].pk),
                 'roles': str(test_user.roles.all()[0].pk),
                 'email': 'reg@stered.com',
                 'email': 'reg@stered.com',
-                'new_password': 'pass123',
                 'is_staff': '1',
                 'is_staff': '1',
                 'is_superuser': '0',
                 'is_superuser': '0',
                 'signature': 'Hello world!',
                 'signature': 'Hello world!',
@@ -917,13 +897,13 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertTrue(updated_user.is_active)
         self.assertTrue(updated_user.is_active)
         self.assertFalse(updated_user.is_active_staff_message)
         self.assertFalse(updated_user.is_active_staff_message)
 
 
     def test_edit_is_deleting_account_cant_reactivate(self):
     def test_edit_is_deleting_account_cant_reactivate(self):
         """users deleting own accounts can't be reactivated"""
         """users deleting own accounts can't be reactivated"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_user.mark_for_delete()
         test_user.mark_for_delete()
 
 
         test_link = reverse(
         test_link = reverse(
@@ -943,7 +923,6 @@ class UserAdminViewsTests(AdminTestCase):
                 'rank': str(test_user.rank_id),
                 'rank': str(test_user.rank_id),
                 'roles': str(test_user.roles.all()[0].pk),
                 'roles': str(test_user.roles.all()[0].pk),
                 'email': 'reg@stered.com',
                 'email': 'reg@stered.com',
-                'new_password': 'pass123',
                 'is_staff': '1',
                 'is_staff': '1',
                 'is_superuser': '0',
                 'is_superuser': '0',
                 'signature': 'Hello world!',
                 'signature': 'Hello world!',
@@ -959,13 +938,13 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertFalse(updated_user.is_active)
         self.assertFalse(updated_user.is_active)
         self.assertTrue(updated_user.is_deleting_account)
         self.assertTrue(updated_user.is_deleting_account)
 
 
     def test_edit_unusable_password(self):
     def test_edit_unusable_password(self):
         """admin edit form handles unusable passwords and lets setting new password"""
         """admin edit form handles unusable passwords and lets setting new password"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com')
+        test_user = create_test_user('Bob', 'bob@test.com')
         self.assertFalse(test_user.has_usable_password())
         self.assertFalse(test_user.has_usable_password())
 
 
         test_link = reverse(
         test_link = reverse(
@@ -1000,12 +979,12 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertTrue(updated_user.has_usable_password())
         self.assertTrue(updated_user.has_usable_password())
 
 
     def test_edit_keep_unusable_password(self):
     def test_edit_keep_unusable_password(self):
         """admin edit form handles unusable passwords and lets admin leave them unchanged"""
         """admin edit form handles unusable passwords and lets admin leave them unchanged"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com')
+        test_user = create_test_user('Bob', 'bob@test.com')
         self.assertFalse(test_user.has_usable_password())
         self.assertFalse(test_user.has_usable_password())
 
 
         test_link = reverse(
         test_link = reverse(
@@ -1039,12 +1018,12 @@ class UserAdminViewsTests(AdminTestCase):
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
-        updated_user = UserModel.objects.get(pk=test_user.pk)
+        updated_user = User.objects.get(pk=test_user.pk)
         self.assertFalse(updated_user.has_usable_password())
         self.assertFalse(updated_user.has_usable_password())
 
 
     def test_edit_agreements_list(self):
     def test_edit_agreements_list(self):
         """edit view displays list of user's agreements"""
         """edit view displays list of user's agreements"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:edit', kwargs={
             'misago:admin:users:accounts:edit', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,
@@ -1084,7 +1063,7 @@ class UserAdminViewsTests(AdminTestCase):
 
 
     def test_delete_threads_view_staff(self):
     def test_delete_threads_view_staff(self):
         """delete user threads view validates if user deletes staff"""
         """delete user threads view validates if user deletes staff"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_user.is_staff = True
         test_user.is_staff = True
         test_user.save()
         test_user.save()
 
 
@@ -1102,7 +1081,7 @@ class UserAdminViewsTests(AdminTestCase):
 
 
     def test_delete_threads_view_superuser(self):
     def test_delete_threads_view_superuser(self):
         """delete user threads view validates if user deletes superuser"""
         """delete user threads view validates if user deletes superuser"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_user.is_superuser = True
         test_user.is_superuser = True
         test_user.save()
         test_user.save()
 
 
@@ -1120,7 +1099,7 @@ class UserAdminViewsTests(AdminTestCase):
 
 
     def test_delete_threads_view(self):
     def test_delete_threads_view(self):
         """delete user threads view deletes threads"""
         """delete user threads view deletes threads"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:delete-threads', kwargs={
             'misago:admin:users:accounts:delete-threads', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,
@@ -1160,7 +1139,7 @@ class UserAdminViewsTests(AdminTestCase):
 
 
     def test_delete_posts_view_staff(self):
     def test_delete_posts_view_staff(self):
         """delete user posts view validates if user deletes staff"""
         """delete user posts view validates if user deletes staff"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_user.is_staff = True
         test_user.is_staff = True
         test_user.save()
         test_user.save()
 
 
@@ -1178,7 +1157,7 @@ class UserAdminViewsTests(AdminTestCase):
 
 
     def test_delete_posts_view_superuser(self):
     def test_delete_posts_view_superuser(self):
         """delete user posts view validates if user deletes superuser"""
         """delete user posts view validates if user deletes superuser"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_user.is_superuser = True
         test_user.is_superuser = True
         test_user.save()
         test_user.save()
 
 
@@ -1196,7 +1175,7 @@ class UserAdminViewsTests(AdminTestCase):
 
 
     def test_delete_posts_view(self):
     def test_delete_posts_view(self):
         """delete user posts view deletes posts"""
         """delete user posts view deletes posts"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:delete-posts', kwargs={
             'misago:admin:users:accounts:delete-posts', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,
@@ -1237,7 +1216,7 @@ class UserAdminViewsTests(AdminTestCase):
 
 
     def test_delete_account_view_staff(self):
     def test_delete_account_view_staff(self):
         """delete user account view validates if user deletes staff"""
         """delete user account view validates if user deletes staff"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_user.is_staff = True
         test_user.is_staff = True
         test_user.save()
         test_user.save()
 
 
@@ -1255,7 +1234,7 @@ class UserAdminViewsTests(AdminTestCase):
 
 
     def test_delete_account_view_superuser(self):
     def test_delete_account_view_superuser(self):
         """delete user account view validates if user deletes superuser"""
         """delete user account view validates if user deletes superuser"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_user.is_superuser = True
         test_user.is_superuser = True
         test_user.save()
         test_user.save()
 
 
@@ -1273,7 +1252,7 @@ class UserAdminViewsTests(AdminTestCase):
 
 
     def test_delete_account_view(self):
     def test_delete_account_view(self):
         """delete user account view deletes user account"""
         """delete user account view deletes user account"""
-        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_user = create_test_user('Bob', 'bob@test.com')
         test_link = reverse(
         test_link = reverse(
             'misago:admin:users:accounts:delete-account', kwargs={
             'misago:admin:users:accounts:delete-account', kwargs={
                 'pk': test_user.pk,
                 'pk': test_user.pk,

+ 32 - 9
misago/users/testutils.py

@@ -3,9 +3,9 @@ from django.contrib.auth import get_user_model
 from misago.core.testutils import MisagoTestCase
 from misago.core.testutils import MisagoTestCase
 
 
 from .models import AnonymousUser, Online
 from .models import AnonymousUser, Online
+from .setupnewuser import setup_new_user
 
 
-
+User = get_user_model()
-UserModel = get_user_model()
 
 
 
 
 class UserTestCase(MisagoTestCase):
 class UserTestCase(MisagoTestCase):
@@ -23,7 +23,7 @@ class UserTestCase(MisagoTestCase):
         return AnonymousUser()
         return AnonymousUser()
 
 
     def get_authenticated_user(self):
     def get_authenticated_user(self):
-        return UserModel.objects.create_user(
+        return create_test_user(
             "TestUser",
             "TestUser",
             "test@user.com",
             "test@user.com",
             self.USER_PASSWORD,
             self.USER_PASSWORD,
@@ -31,12 +31,12 @@ class UserTestCase(MisagoTestCase):
         )
         )
 
 
     def get_superuser(self):
     def get_superuser(self):
-        user = UserModel.objects.create_superuser(
+        return create_test_superuser(
-            "TestSuperUser", "test@superuser.com", self.USER_PASSWORD
+            "TestSuperUser",
+            "test@superuser.com",
+            self.USER_PASSWORD,
+            joined_from_ip=self.USER_IP,
         )
         )
-        user.joined_from_ip = self.USER_IP
-        user.save()
-        return user
 
 
     def login_user(self, user, password=None):
     def login_user(self, user, password=None):
         self.client.force_login(user)
         self.client.force_login(user)
@@ -53,10 +53,33 @@ class AuthenticatedUserTestCase(UserTestCase):
         self.login_user(self.user)
         self.login_user(self.user)
 
 
     def reload_user(self):
     def reload_user(self):
-        self.user = UserModel.objects.get(id=self.user.id)
+        self.user.refresh_from_db()
 
 
 
 
 class SuperUserTestCase(AuthenticatedUserTestCase):
 class SuperUserTestCase(AuthenticatedUserTestCase):
     def get_initial_user(self):
     def get_initial_user(self):
         self.user = self.get_superuser()
         self.user = self.get_superuser()
         self.login_user(self.user)
         self.login_user(self.user)
+
+
+def create_test_user(username, email, password=None, **extra_fields):
+    """Faster counterpart of regular `create_user` followed by `setup_new_user`"""
+    if "avatars" not in extra_fields:
+        extra_fields["avatars"] = user_placeholder_avatars
+
+    return User.objects.create_user(username, email, password, **extra_fields)
+
+
+def create_test_superuser(username, email, password=None, **extra_fields):
+    """Faster counterpart of regular `create_superuser` followed by `setup_new_user`"""
+    if "avatars" not in extra_fields:
+        extra_fields["avatars"] = user_placeholder_avatars
+
+    return User.objects.create_superuser(username, email, password, **extra_fields)
+
+
+user_placeholder_avatars = [
+        {"size": 400, "url": "http://placekitten.com/400/400"},
+        {"size": 200, "url": "http://placekitten.com/200/200"},
+        {"size": 100, "url": "http://placekitten.com/100/100"},
+    ]

+ 7 - 8
misago/users/views/admin/users.py

@@ -19,16 +19,16 @@ from misago.users.forms.admin import (
     BanUsersForm, EditUserForm, EditUserFormFactory, NewUserForm, SearchUsersForm)
     BanUsersForm, EditUserForm, EditUserFormFactory, NewUserForm, SearchUsersForm)
 from misago.users.models import Ban
 from misago.users.models import Ban
 from misago.users.profilefields import profilefields
 from misago.users.profilefields import profilefields
+from misago.users.setupnewuser import setup_new_user
 from misago.users.signatures import set_user_signature
 from misago.users.signatures import set_user_signature
 
 
-
+User = get_user_model()
-UserModel = get_user_model()
 
 
 
 
 class UserAdmin(generic.AdminBaseMixin):
 class UserAdmin(generic.AdminBaseMixin):
     root_link = 'misago:admin:users:accounts:index'
     root_link = 'misago:admin:users:accounts:index'
     templates_dir = 'misago/admin/users'
     templates_dir = 'misago/admin/users'
-    model = UserModel
+    model = User
 
 
     def create_form_type(self, request, target):
     def create_form_type(self, request, target):
         add_is_active_fields = False
         add_is_active_fields = False
@@ -115,8 +115,8 @@ class UsersList(UserAdmin, generic.ListView):
             raise generic.MassActionError(message)
             raise generic.MassActionError(message)
         else:
         else:
             activated_users_pks = [u.pk for u in inactive_users]
             activated_users_pks = [u.pk for u in inactive_users]
-            queryset = UserModel.objects.filter(pk__in=activated_users_pks)
+            queryset = User.objects.filter(pk__in=activated_users_pks)
-            queryset.update(requires_activation=UserModel.ACTIVATION_NONE)
+            queryset.update(requires_activation=User.ACTIVATION_NONE)
 
 
             subject = _("Your account on %(forum_name)s forums has been activated")
             subject = _("Your account on %(forum_name)s forums has been activated")
             mail_subject = subject % {'forum_name': settings.forum_name}
             mail_subject = subject % {'forum_name': settings.forum_name}
@@ -253,14 +253,13 @@ class NewUser(UserAdmin, generic.ModelFormView):
     message_submit = _('New user "%(user)s" has been registered.')
     message_submit = _('New user "%(user)s" has been registered.')
 
 
     def handle_form(self, form, request, target):
     def handle_form(self, form, request, target):
-        new_user = UserModel.objects.create_user(
+        new_user = User.objects.create_user(
             form.cleaned_data['username'],
             form.cleaned_data['username'],
             form.cleaned_data['email'],
             form.cleaned_data['email'],
             form.cleaned_data['new_password'],
             form.cleaned_data['new_password'],
             title=form.cleaned_data['title'],
             title=form.cleaned_data['title'],
             rank=form.cleaned_data.get('rank'),
             rank=form.cleaned_data.get('rank'),
             joined_from_ip=request.user_ip,
             joined_from_ip=request.user_ip,
-            set_default_avatar=True
         )
         )
 
 
         if form.cleaned_data.get('staff_level'):
         if form.cleaned_data.get('staff_level'):
@@ -270,7 +269,7 @@ class NewUser(UserAdmin, generic.ModelFormView):
             new_user.roles.add(*form.cleaned_data['roles'])
             new_user.roles.add(*form.cleaned_data['roles'])
 
 
         new_user.update_acl_key()
         new_user.update_acl_key()
-        new_user.save()
+        setup_new_user(request.settings, new_user)
 
 
         messages.success(request, self.message_submit % {'user': target.username})
         messages.success(request, self.message_submit % {'user': target.username})
         return redirect('misago:admin:users:accounts:edit', pk=new_user.pk)
         return redirect('misago:admin:users:accounts:edit', pk=new_user.pk)

+ 1 - 1
misago/users/views/profile.py

@@ -18,7 +18,7 @@ UserModel = get_user_model()
 
 
 class ProfileView(View):
 class ProfileView(View):
     def get(self, request, *args, **kwargs):
     def get(self, request, *args, **kwargs):
-        profile = self.get_profile(request, kwargs.pop('pk'), kwargs.pop('slug'))
+        profile = self.get_profile(request, kwargs.get('pk'), kwargs.get('slug'))
 
 
         # resolve that we can display requested section
         # resolve that we can display requested section
         sections = user_profile.get_sections(request, profile)
         sections = user_profile.get_sections(request, profile)