Browse Source

Added example test

Ralfp 12 years ago
parent
commit
ffe10beb4c

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

@@ -1,7 +1,6 @@
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.shortcuts import redirect
 from django.shortcuts import redirect
 from django.utils.translation import ugettext as _
 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.apps.threadtype.posting import NewThreadBaseView, EditThreadBaseView, NewReplyBaseView, EditReplyBaseView
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Forum, Thread, Post
 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))
         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'
     action = 'new_reply'
 
 
     def set_context(self):
     def set_context(self):
         pass
         pass
-        
+
     def response(self):
     def response(self):
         if self.post.moderated:
         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)
             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)
         return self.redirect_to_post(post)
 
 
 
 
-class EditReplyView(EditReplyBaseView, RedirectToPostMixin, TypeMixin):
+class EditReplyView(EditReplyBaseView, TypeMixin):
     pass
     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.forms import Form, FormFields
 from misago.models import Forum, Thread, Post
 from misago.models import Forum, Thread, Post
 from misago.readstrackers import ForumsTracker
 from misago.readstrackers import ForumsTracker
+from misago.apps.threadtype.base import ViewBase
 
 
-class ThreadsListBaseView(object):
+class ThreadsListBaseView(ViewBase):
     def _fetch_forum(self):
     def _fetch_forum(self):
         self.fetch_forum()
         self.fetch_forum()
         self.proxy = Forum.objects.parents_aware_forum(self.forum)
         self.proxy = Forum.objects.parents_aware_forum(self.forum)
@@ -82,10 +83,6 @@ class ThreadsListBaseView(object):
         else:
         else:
             self.form = self.form(request=self.request)
             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):
     def __call__(self, request, **kwargs):
         self.request = request
         self.request = request
         self.kwargs = kwargs
         self.kwargs = kwargs

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

@@ -1,9 +1,6 @@
 from django import forms
 from django import forms
-from django.core.urlresolvers import reverse
-from django.shortcuts import redirect
 from django.utils.translation import ungettext
 from django.utils.translation import ungettext
 from misago.utils.strings import slugify
 from misago.utils.strings import slugify
-from misago.utils.pagination import make_pagination
 
 
 class ValidateThreadNameMixin(object):
 class ValidateThreadNameMixin(object):
     def clean_thread_name(self):
     def clean_thread_name(self):
@@ -22,11 +19,3 @@ class ValidateThreadNameMixin(object):
                                                   self.request.settings['thread_name_max']
                                                   self.request.settings['thread_name_max']
                                                   ) % {'count': self.request.settings['thread_name_max']})
                                                   ) % {'count': self.request.settings['thread_name_max']})
         return data
         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.markdown import post_markdown
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Forum, WatchedThread
 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):
     def form_initial_data(self):
         return {}
         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.models import Forum, Thread, Post, Karma, WatchedThread
 from misago.readstrackers import ThreadsTracker
 from misago.readstrackers import ThreadsTracker
 from misago.utils.pagination import make_pagination
 from misago.utils.pagination import make_pagination
+from misago.apps.threadtype.base import ViewBase
 from misago.apps.threadtype.thread.forms import QuickReplyForm
 from misago.apps.threadtype.thread.forms import QuickReplyForm
 
 
-class ThreadBaseView(object):
+class ThreadBaseView(ViewBase):
     def fetch_thread(self):
     def fetch_thread(self):
         self.thread = Thread.objects.get(pk=self.kwargs.get('thread'))
         self.thread = Thread.objects.get(pk=self.kwargs.get('thread'))
         self.forum = self.thread.forum
         self.forum = self.thread.forum
@@ -153,10 +154,6 @@ class ThreadBaseView(object):
         else:
         else:
             self.posts_form = self.posts_form(request=self.request)
             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):
     def __call__(self, request, **kwargs):
         self.request = request
         self.request = request
         self.kwargs = kwargs
         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 import call_command
 from django.core.management.base import BaseCommand, CommandError
 from django.core.management.base import BaseCommand, CommandError
 
 
@@ -6,10 +7,26 @@ class Command(BaseCommand):
     Builds Misago database from scratch
     Builds Misago database from scratch
     """
     """
     help = 'Install Misago to database'
     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):
     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)