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

Starting with tests suite for threads views

Rafał Pitoń 10 лет назад
Родитель
Сommit
4a0d5afd80

+ 4 - 1
misago/threads/forms/reply.py

@@ -144,6 +144,7 @@ class ReplyFormMiddleware(EditorFormsetMiddleware):
         self.parsing_result.update(form.parsing_result)
 
     def save(self, form):
+        # if we are starting new thread, create empty model
         if self.mode == START:
             self.thread.set_title(form.cleaned_data['title'])
             self.thread.starter_name = '-'
@@ -154,6 +155,7 @@ class ReplyFormMiddleware(EditorFormsetMiddleware):
             self.thread.last_post_on = self.datetime
             self.thread.save()
 
+        # make changes/set data on post
         self.post.updated_on = self.datetime
         if self.mode == EDIT:
             self.post.last_editor_name = self.user
@@ -169,6 +171,7 @@ class ReplyFormMiddleware(EditorFormsetMiddleware):
         self.post.post_checksum = update_post_checksum(self.post)
         self.post.save()
 
+        # Update thread
         if self.mode == START:
             self.forum.threads += 1
             self.thread.set_first_post(self.post)
@@ -191,4 +194,4 @@ class ReplyFormMiddleware(EditorFormsetMiddleware):
 
         if self.mode != EDIT:
             self.user.posts = F('posts') + 1
-        user.user.save(update_fields=['threads', 'posts'])
+        self.user.save(update_fields=['threads', 'posts'])

+ 118 - 0
misago/threads/tests/test_editor_view.py

@@ -0,0 +1,118 @@
+from django.core.urlresolvers import reverse
+
+from misago.acl.testutils import override_acl
+from misago.admin.testutils import AdminTestCase
+from misago.forums.models import Forum
+
+from misago.threads.models import Thread, Post
+
+
+class StartThreadFormTests(AdminTestCase):
+    def setUp(self):
+        super(StartThreadFormTests, self).setUp()
+
+        self.forum = Forum.objects.all_forums().filter(role="forum")[:1][0]
+        self.link = reverse('misago:start_thread', kwargs={
+            'forum_slug': self.forum.slug, 'forum_id': self.forum.id
+        })
+
+    def allow_start_thread(self):
+        forums_acl = self.test_admin.acl
+        forums_acl['visible_forums'].append(self.forum.pk)
+        forums_acl['forums'][self.forum.pk] = {
+            'can_see': 1,
+            'can_browse': 1,
+            'can_start_threads': 1,
+        }
+        override_acl(self.test_admin, forums_acl)
+
+    def test_cant_see(self):
+        """has no permission to see forum"""
+        forums_acl = self.test_admin.acl
+        forums_acl['visible_forums'].remove(self.forum.pk)
+        forums_acl['forums'][self.forum.pk] = {
+            'can_see': 0,
+            'can_browse': 0,
+            'can_start_threads': 1,
+        }
+        override_acl(self.test_admin, forums_acl)
+
+        response = self.client.get(self.link)
+        self.assertEqual(response.status_code, 404)
+
+    def test_cant_browse(self):
+        """has no permission to browse forum"""
+        forums_acl = self.test_admin.acl
+        forums_acl['visible_forums'].append(self.forum.pk)
+        forums_acl['forums'][self.forum.pk] = {
+            'can_see': 1,
+            'can_browse': 0,
+            'can_start_threads': 1,
+        }
+        override_acl(self.test_admin, forums_acl)
+
+        response = self.client.get(self.link)
+        self.assertEqual(response.status_code, 403)
+
+    def test_cant_start_thread_in_locked_forum(self):
+        """can't post in closed forum"""
+        self.forum.is_closed = True
+        self.forum.save()
+
+        forums_acl = self.test_admin.acl
+        forums_acl['visible_forums'].append(self.forum.pk)
+        forums_acl['forums'][self.forum.pk] = {
+            'can_see': 1,
+            'can_browse': 1,
+            'can_start_threads': 1,
+        }
+        override_acl(self.test_admin, forums_acl)
+
+        response = self.client.get(self.link)
+        self.assertEqual(response.status_code, 403)
+
+    def test_can_start_thread(self):
+        """can post new thread"""
+        self.allow_start_thread()
+        response = self.client.get(self.link)
+        self.assertEqual(response.status_code, 200)
+
+        self.allow_start_thread()
+        response = self.client.post(self.link, data={
+            'title': 'Hello, I am test thread!',
+            'post': 'Lorem ipsum dolor met!',
+            'submit': True,
+        })
+        self.assertEqual(response.status_code, 302)
+
+        updated_admin = self.test_admin.lock()
+        self.assertEqual(updated_admin.threads, 1)
+        self.assertEqual(updated_admin.posts, 1)
+
+        last_thread = self.test_admin.thread_set.all()[:1][0]
+        self.assertEqual(last_thread.forum_id, self.forum.pk)
+        self.assertEqual(last_thread.title, "Hello, I am test thread!")
+        self.assertEqual(last_thread.starter_id, updated_admin.id)
+        self.assertEqual(last_thread.starter_name, updated_admin.username)
+        self.assertEqual(last_thread.starter_slug, updated_admin.slug)
+        self.assertEqual(last_thread.last_poster_id, updated_admin.id)
+        self.assertEqual(last_thread.last_poster_name, updated_admin.username)
+        self.assertEqual(last_thread.last_poster_slug, updated_admin.slug)
+
+        last_post = self.test_admin.post_set.all()[:1][0]
+        self.assertEqual(last_post.forum_id, self.forum.pk)
+        self.assertEqual(last_post.post, 'Lorem ipsum dolor met!')
+        self.assertEqual(last_post.poster_id, updated_admin.id)
+        self.assertEqual(last_post.poster_name, updated_admin.username)
+
+        updated_forum = Forum.objects.get(id=self.forum.id)
+        self.assertEqual(updated_forum.threads, 1)
+        self.assertEqual(updated_forum.posts, 1)
+        self.assertEqual(updated_forum.last_thread_id, last_thread.id)
+        self.assertEqual(updated_forum.last_thread_title, last_thread.title)
+        self.assertEqual(updated_forum.last_thread_slug, last_thread.slug)
+
+        self.assertEqual(updated_forum.last_poster_id, updated_admin.id)
+        self.assertEqual(updated_forum.last_poster_name,
+                         updated_admin.username)
+        self.assertEqual(updated_forum.last_poster_slug, updated_admin.slug)

+ 6 - 10
misago/threads/tests/test_threads_list_view.py

@@ -1,9 +1,5 @@
-from django.core.urlresolvers import reverse
-
 from misago.acl.testutils import override_acl
 from misago.admin.testutils import AdminTestCase
-
-from misago.forums.lists import get_forums_list
 from misago.forums.models import Forum
 
 
@@ -14,7 +10,7 @@ class ThreadsListTests(AdminTestCase):
         self.forum = Forum.objects.all_forums().filter(role="forum")[:1][0]
         self.link = self.forum.get_absolute_url()
 
-    def test_index_cant_see(self):
+    def test_cant_see(self):
         """has no permission to see forum"""
         forums_acl = self.test_admin.acl
         forums_acl['visible_forums'].remove(self.forum.pk)
@@ -23,11 +19,11 @@ class ThreadsListTests(AdminTestCase):
             'can_browse': 0,
         }
         override_acl(self.test_admin, forums_acl)
-        response = self.client.get(self.link)
 
+        response = self.client.get(self.link)
         self.assertEqual(response.status_code, 404)
 
-    def test_index_cant_browse(self):
+    def test_cant_browse(self):
         """has no permission to browse forum"""
         forums_acl = self.test_admin.acl
         forums_acl['visible_forums'].append(self.forum.pk)
@@ -36,11 +32,11 @@ class ThreadsListTests(AdminTestCase):
             'can_browse': 0,
         }
         override_acl(self.test_admin, forums_acl)
-        response = self.client.get(self.link)
 
+        response = self.client.get(self.link)
         self.assertEqual(response.status_code, 403)
 
-    def test_index_can_browse_empty(self):
+    def test_can_browse_empty(self):
         """has permission to browse forum, sees empty list"""
         forums_acl = self.test_admin.acl
         forums_acl['visible_forums'].append(self.forum.pk)
@@ -49,7 +45,7 @@ class ThreadsListTests(AdminTestCase):
             'can_browse': 1,
         }
         override_acl(self.test_admin, forums_acl)
-        response = self.client.get(self.link)
 
+        response = self.client.get(self.link)
         self.assertEqual(response.status_code, 200)
         self.assertIn("No threads", response.content)