Ralfp 12 лет назад
Родитель
Сommit
ffe10beb4c

+ 3 - 4
misago/apps/threads/posting.py

@@ -1,7 +1,6 @@
 from django.core.urlresolvers import reverse
 from django.shortcuts import redirect
 from django.utils.translation import ugettext as _
-from misago.apps.threadtype.mixins import RedirectToPostMixin
 from misago.apps.threadtype.posting import NewThreadBaseView, EditThreadBaseView, NewReplyBaseView, EditReplyBaseView
 from misago.messages import Message
 from misago.models import Forum, Thread, Post
@@ -42,12 +41,12 @@ class EditThreadView(EditThreadBaseView, TypeMixin):
         return redirect(reverse('thread', kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % self.post.pk))
 
 
-class NewReplyView(NewReplyBaseView, RedirectToPostMixin, TypeMixin):
+class NewReplyView(NewReplyBaseView, TypeMixin):
     action = 'new_reply'
 
     def set_context(self):
         pass
-        
+
     def response(self):
         if self.post.moderated:
             request.messages.set_flash(Message(_("Your reply has been posted. It will be hidden from other members until moderator reviews it.")), 'success', 'threads_%s' % self.post.pk)
@@ -56,5 +55,5 @@ class NewReplyView(NewReplyBaseView, RedirectToPostMixin, TypeMixin):
         return self.redirect_to_post(post)
 
 
-class EditReplyView(EditReplyBaseView, RedirectToPostMixin, TypeMixin):
+class EditReplyView(EditReplyBaseView, TypeMixin):
     pass

+ 14 - 0
misago/apps/threadtype/base.py

@@ -0,0 +1,14 @@
+from django.core.urlresolvers import reverse
+from django.shortcuts import redirect
+from misago.utils.pagination import make_pagination
+
+class ViewBase(object):
+    def __new__(cls, request, **kwargs):
+        obj = super(ViewBase, cls).__new__(cls)
+        return obj(request, **kwargs)
+        
+    def redirect_to_post(self, post):
+        pagination = make_pagination(0, self.request.acl.threads.filter_posts(self.request, self.thread, self.thread.post_set).filter(id__lte=post.pk).count(), self.request.settings.posts_per_page)
+        if pagination['total'] > 1:
+            return redirect(reverse(self.thread_url, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug, 'page': pagination['total']}) + ('#post-%s' % post.pk))
+        return redirect(reverse(self.thread_url, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % post.pk))

+ 2 - 5
misago/apps/threadtype/list/views.py

@@ -9,8 +9,9 @@ from misago.apps.errors import error403, error404
 from misago.forms import Form, FormFields
 from misago.models import Forum, Thread, Post
 from misago.readstrackers import ForumsTracker
+from misago.apps.threadtype.base import ViewBase
 
-class ThreadsListBaseView(object):
+class ThreadsListBaseView(ViewBase):
     def _fetch_forum(self):
         self.fetch_forum()
         self.proxy = Forum.objects.parents_aware_forum(self.forum)
@@ -82,10 +83,6 @@ class ThreadsListBaseView(object):
         else:
             self.form = self.form(request=self.request)
 
-    def __new__(cls, request, **kwargs):
-        obj = super(ThreadsListBaseView, cls).__new__(cls)
-        return obj(request, **kwargs)
-
     def __call__(self, request, **kwargs):
         self.request = request
         self.kwargs = kwargs

+ 0 - 11
misago/apps/threadtype/mixins.py

@@ -1,9 +1,6 @@
 from django import forms
-from django.core.urlresolvers import reverse
-from django.shortcuts import redirect
 from django.utils.translation import ungettext
 from misago.utils.strings import slugify
-from misago.utils.pagination import make_pagination
 
 class ValidateThreadNameMixin(object):
     def clean_thread_name(self):
@@ -22,11 +19,3 @@ class ValidateThreadNameMixin(object):
                                                   self.request.settings['thread_name_max']
                                                   ) % {'count': self.request.settings['thread_name_max']})
         return data
-
-
-class RedirectToPostMixin(object):
-    def redirect_to_post(self, post):
-        pagination = make_pagination(0, self.request.acl.threads.filter_posts(self.request, self.thread, self.thread.post_set).filter(id__lte=post.pk).count(), self.request.settings.posts_per_page)
-        if pagination['total'] > 1:
-            return redirect(reverse(self.thread_url, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug, 'page': pagination['total']}) + ('#post-%s' % post.pk))
-        return redirect(reverse(self.thread_url, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % post.pk))

+ 2 - 5
misago/apps/threadtype/posting/base.py

@@ -6,12 +6,9 @@ from misago.forms import FormLayout
 from misago.markdown import post_markdown
 from misago.messages import Message
 from misago.models import Forum, WatchedThread
+from misago.apps.threadtype.base import ViewBase
 
-class PostingBaseView(object):
-    def __new__(cls, request, **kwargs):
-        obj = super(PostingBaseView, cls).__new__(cls)
-        return obj(request, **kwargs)
-
+class PostingBaseView(ViewBase):
     def form_initial_data(self):
         return {}
 

+ 2 - 5
misago/apps/threadtype/thread/views.py

@@ -11,9 +11,10 @@ from misago.messages import Message
 from misago.models import Forum, Thread, Post, Karma, WatchedThread
 from misago.readstrackers import ThreadsTracker
 from misago.utils.pagination import make_pagination
+from misago.apps.threadtype.base import ViewBase
 from misago.apps.threadtype.thread.forms import QuickReplyForm
 
-class ThreadBaseView(object):
+class ThreadBaseView(ViewBase):
     def fetch_thread(self):
         self.thread = Thread.objects.get(pk=self.kwargs.get('thread'))
         self.forum = self.thread.forum
@@ -153,10 +154,6 @@ class ThreadBaseView(object):
         else:
             self.posts_form = self.posts_form(request=self.request)
 
-    def __new__(cls, request, **kwargs):
-        obj = super(ThreadBaseView, cls).__new__(cls)
-        return obj(request, **kwargs)
-
     def __call__(self, request, **kwargs):
         self.request = request
         self.kwargs = kwargs

+ 22 - 5
misago/management/commands/startmisago.py

@@ -1,3 +1,4 @@
+from optparse import make_option
 from django.core.management import call_command
 from django.core.management.base import BaseCommand, CommandError
 
@@ -6,10 +7,26 @@ class Command(BaseCommand):
     Builds Misago database from scratch
     """
     help = 'Install Misago to database'
+    option_list = BaseCommand.option_list + (
+        make_option('--quiet',
+            action='store_true',
+            dest='quiet',
+            default=False,
+            help='Dont display output from this message'),
+        )
     
     def handle(self, *args, **options):
-        self.stdout.write('\nInstalling Misago to database...')
-        call_command('syncdb')
-        call_command('migrate')
-        call_command('syncfixtures')
-        self.stdout.write('\nInstallation complete! Don\'t forget to run adduser to create first admin!\n')
+        if not options['quiet']:
+            self.stdout.write('\nInstalling Misago to database...')
+
+        if options['quiet']:
+            call_command('syncdb', verbosity=0)
+            call_command('migrate', verbosity=0)
+            call_command('syncfixtures', quiet=1)
+        else:
+            call_command('syncdb')
+            call_command('migrate')
+            call_command('syncfixtures')
+
+        if not options['quiet']:
+            self.stdout.write('\nInstallation complete! Don\'t forget to run adduser to create first admin!\n')

+ 1 - 0
misago/tests/__init__.py

@@ -0,0 +1 @@
+from misago.tests.testuseradd import UserAddTestCase

+ 56 - 0
misago/tests/testuseradd.py

@@ -0,0 +1,56 @@
+from django.core.exceptions import ValidationError
+from django.core.management import call_command
+from django.test import TestCase
+from misago.models import User, Rank, Role
+from misago.monitor import Monitor
+
+class UserAddTestCase(TestCase):
+    def setUp(self):
+        call_command('startmisago', quiet=True)
+
+    def test_user_from_model(self):
+        """Test User.objects.create_user"""
+
+        user_a = User.objects.create_user('Lemmiwinks', 'lemm@sp.com', '123pass')
+
+        monitor = Monitor()
+        self.assertEqual(int(monitor['users']), 1)
+        self.assertEqual(int(monitor['users_inactive']), 0)
+        self.assertEqual(int(monitor['last_user']), user_a.pk)
+        self.assertEqual(monitor['last_user_name'], user_a.username)
+        self.assertEqual(monitor['last_user_slug'], user_a.username_slug)
+
+        user_b = User.objects.create_user('InactiveTest', 'lemsm@sp.com', '123pass', activation=User.ACTIVATION_USER)
+
+        monitor = Monitor()
+        self.assertEqual(int(monitor['users']), 1)
+        self.assertEqual(int(monitor['users_inactive']), 1)
+        self.assertEqual(int(monitor['last_user']), user_a.pk)
+        self.assertEqual(monitor['last_user_name'], user_a.username)
+        self.assertEqual(monitor['last_user_slug'], user_a.username_slug)
+
+        try:
+            user_c = User.objects.create_user('UsedMail', 'lemsm@sp.com', '123pass')
+            raise AssertionError("Created user account with taken e-mail address!")
+        except ValidationError:
+            pass
+
+        monitor = Monitor()
+        self.assertEqual(int(monitor['users']), 1)
+        self.assertEqual(int(monitor['users_inactive']), 1)
+        self.assertEqual(int(monitor['last_user']), user_a.pk)
+        self.assertEqual(monitor['last_user_name'], user_a.username)
+        self.assertEqual(monitor['last_user_slug'], user_a.username_slug)
+
+        try:
+            user_d = User.objects.create_user('InactiveTest', 'user@name.com', '123pass')
+            raise AssertionError("Created user account with taken username!")
+        except ValidationError:
+            pass
+
+        monitor = Monitor()
+        self.assertEqual(int(monitor['users']), 1)
+        self.assertEqual(int(monitor['users_inactive']), 1)
+        self.assertEqual(int(monitor['last_user']), user_a.pk)
+        self.assertEqual(monitor['last_user_name'], user_a.username)
+        self.assertEqual(monitor['last_user_slug'], user_a.username_slug)