def create_other_threads(self):
     for page in LessonPage.objects.all():
         if not page.has_own_topic:
             new_topic, topic_created = Topic.objects.get_or_create(
                 forum=Forum.objects.get(name='Lessons Forum'),
                 name='Урок-' + str(page.lesson_number),
                 user=User.objects.get(username='******'),
                 slug='lecon' + str(page.lesson_number),
             )
             if topic_created:
                 page.topic_id = new_topic.id
                 self.stdout.write(
                     str(page.lesson_number) + ' thread created')
                 body = 'Не стесняйтесь задавать вопросы и комментировать.'
                 new_post = Post(
                     body=body,
                     topic_id=new_topic.id,
                     user_id=new_topic.user_id,
                     user_ip='1.1.1.1',
                     created=datetime.now(),
                 )
                 new_post.save()
                 self.stdout.write(str(lesson_number) + ' post created')
             else:
                 self.stdout.write(
                     str(lesson_number) + ' thread not created')
             page.save()
	def create_other_threads(self):
		for page in LessonPage.objects.all():
			if not page.has_own_topic:
				new_topic, topic_created = Topic.objects.get_or_create(
					forum=Forum.objects.get(name='Lessons Forum'),
					name='Урок-' + str(page.lesson_number),
					user=User.objects.get(username='******'),
					slug='lecon' + str(page.lesson_number),
				)
				if topic_created:
					page.topic_id = new_topic.id
					self.stdout.write(str(page.lesson_number) + ' thread created')
					body = 'Не стесняйтесь задавать вопросы и комментировать.'
					new_post = Post(
						body=body,
						topic_id=new_topic.id,
						user_id=new_topic.user_id,
						user_ip='1.1.1.1',
						created=datetime.now(),
					)
					new_post.save()
					self.stdout.write(str(lesson_number) + ' post created')
				else:
					self.stdout.write(str(lesson_number) + ' thread not created')
				page.save()
    def test_topics_delete_view(self):
        topic2 = Topic.objects.create(name='Topic 2',
                                      forum=self.forum,
                                      user=self.superuser)

        post2 = Post(topic=topic2, user=self.superuser, body='post on topic2')
        post2.save()

        topics_delete_url = reverse('pybb:topics_delete')

        self.login_as(self.staff)

        response = self.client.post(topics_delete_url,
                                    data={
                                        'topic_ids':
                                        [self.topic.pk, topic2.pk],
                                        'topic': topic2,
                                        'confirm': True
                                    })

        topic2 = Topic.objects.get(pk=topic2.pk)

        self.assertTrue(topic2.delete)

        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.context['form'].forms), 2)
        self.assertTemplateUsed(response, 'pybb/topic/delete.html')
Exemple #4
0
    def test_topic_merge_form(self):
        topic = Topic.objects.create(name='merged_topic', forum=self.forum, user=self.superuser)

        post = Post(topic=topic, user=self.superuser, body='merged post')
        post.save()

        form = TopicMergeForm(topic=topic, data={
            'topic': topic.pk
        })

        self.assertFalse(form.is_valid())
        self.assertIn('topic', form.errors)

        form = TopicMergeForm(topic=topic, data={
            'topic': self.topic.pk
        })

        self.assertTrue(form.is_valid())

        new_topic = form.save()

        topic = Topic.objects.get(pk=topic.pk)

        self.assertTrue(topic.redirect)

        self.assertEqual(new_topic.redirections.count(), 1)
        self.assertEqual(Post.objects.get(pk=post.pk).topic, self.topic)
        self.assertEqual(topic.posts.count(), 0)
Exemple #5
0
    def test_topic_merge_formset(self):
        topic = Topic.objects.create(name='merged_topic', forum=self.forum, user=self.superuser)

        post = Post(topic=topic, user=self.superuser, body='merged post')
        post.save()

        topics = [topic]

        FormSet = get_topic_merge_formset(topics=topics)

        formset = FormSet()

        for i in range(len(topics)):
            self.assertEqual(formset.forms[i].topic, topics[i])

        formset = FormSet(data={
            'form-TOTAL_FORMS': 1,
            'form-INITIAL_FORMS': 0,
            'form-0-topic': self.topic.pk
        })

        self.assertTrue(formset.is_valid())

        for form in formset:
            new_topic = form.save()

        topic = Topic.objects.get(pk=topic.pk)

        self.assertTrue(topic.redirect)

        self.assertEqual(new_topic.redirections.count(), 1)
        self.assertEqual(Post.objects.get(pk=post.pk).topic, self.topic)
        self.assertEqual(topic.posts.count(), 0)
    def test_topics_delete_complete(self):
        topic2 = Topic.objects.create(name='Topic 2',
                                      forum=self.forum,
                                      user=self.superuser)

        post2 = Post(topic=topic2, user=self.superuser, body='post on topic2')
        post2.save()

        topics_delete_url = reverse('pybb:topics_delete')

        self.login_as(self.staff)

        response = self.client.post(topics_delete_url,
                                    data={
                                        'topic_ids':
                                        [self.topic.pk, topic2.pk],
                                        'form-TOTAL_FORMS': 2,
                                        'form-INITIAL_FORMS': 0,
                                        'form-0-topic': self.topic.pk,
                                        'form-0-confirm': True,
                                        'form-1-topic': topic2.pk,
                                        'form-1-confirm': True,
                                        'submit': 1
                                    })

        topic2 = Topic.objects.get(pk=topic2.pk)

        self.assertTrue(self.topic.delete)
        self.assertTrue(topic2.delete)

        self.assertRedirects(response, reverse('pybb:index'))
Exemple #7
0
    def test_multiple_quote_add(self):
        self.user
        self.login_as(self.staff)

        self.post

        post = Post(topic=self.topic, user=self.superuser, body='[b]do you want my pere nowel?[/b]')
        post.save()

        response = self.client.post(reverse('quote'), data={
            'topic_id': self.topic.pk,
            'post_id': post.pk
        })

        self.assertEqual(response.status_code, 302)

        response = self.client.get(reverse('pybb:post_create',
                                           kwargs={'topic_id': self.topic.id}) + '?quote_id=%d' % self.post.id)

        self.assertEqual(response.context['form'].initial['body'], u'[quote="zeus;{}"]bbcode [b]test[/b][/quote]\n\n[quote="oleiade;{}"][b]do you want my pere nowel?[/b][/quote]\n\n'.format(self.post.pk, post.pk))

        self.assertEqual(response.status_code, 200)

        response = self.client.post(reverse('quote'), data={
            'topic_id': self.topic.pk,
            'post_id': post.pk
        })

        self.assertEqual(response.status_code, 302)

        response = self.client.get(reverse('pybb:post_create',
                                           kwargs={'topic_id': self.topic.id}))
        self.assertTrue('body' not in response.context['form'].initial)
        self.assertEqual(response.status_code, 200)
Exemple #8
0
    def test_topic_delete_formset(self):
        topic2 = Topic.objects.create(name='Topic 2', forum=self.forum, user=self.superuser)

        post2 = Post(topic=topic2, user=self.superuser, body='post on topic2')
        post2.save()

        topics = Topic.objects.filter(pk__in=[self.topic.pk, topic2.pk])

        FormSet = get_topic_delete_formset(topics=topics)

        formset = FormSet(data={
            'form-TOTAL_FORMS': 2,
            'form-INITIAL_FORMS': 0,
            'form-0-topic': self.topic.pk,
            'form-0-confirm': True,
            'form-1-topic': topic2.pk,
            'form-1-confirm': True,
        })

        self.assertTrue(formset.is_valid())

        for form in formset:
            topic = form.save()

            self.assertTrue(topic.deleted)
Exemple #9
0
    def test_topic_move_form_with_new_forum(self):
        forum = Forum.objects.create(name='temporary forum')

        topic = Topic.objects.create(name='move_topic', forum=forum, user=self.superuser)

        post = Post(topic=topic, user=self.superuser, body='move post')
        post.save()

        name = 'new name for temporary topic'

        form = TopicMoveForm(topic=topic, data={
            'name': name,
            'forum': self.forum.pk,
            'redirection_type': TopicRedirection.TYPE_PERMANENT_REDIRECT
        })

        self.assertTrue(form.is_valid())

        new_topic = form.save()

        topic = Topic.objects.get(pk=topic.pk)

        self.assertTrue(topic.redirect)

        self.failUnless(new_topic.slug is not None)
        self.assertEqual(new_topic.redirections.count(), 1)
        self.assertEqual(Post.objects.get(pk=post.pk).topic, new_topic)
        self.assertEqual(topic.posts.count(), 0)
Exemple #10
0
    def test_topic_move_complete(self):
        topic = Topic(name='xtopic', forum=self.forum, user=self.user)
        topic.save()
        post = Post(topic=topic, user=self.user, body='one')
        post.save()

        topic_merge_url = reverse('pybb:topic_move')

        self.login_as(self.staff)

        name = 'new name for a topic'

        response = self.client.post(topic_merge_url, data={
            'topic_ids': [topic.pk],
            'form-TOTAL_FORMS': 1,
            'form-INITIAL_FORMS': 0,
            'form-0-name': name,
            'form-0-forum': self.forum.pk,
            'form-0-redirection_type': TopicRedirection.TYPE_PERMANENT_REDIRECT,
            'submit': 1
        })

        self.assertRedirects(response, reverse('pybb:index'))

        topic = Topic.objects.get(pk=topic.pk)

        self.assertTrue(topic.redirect)
        self.failUnless(topic.redirection is not None)

        redirection = topic.redirection

        new_topic = redirection.to_topic

        self.assertEqual(new_topic.name, name)
        self.assertEqual(new_topic.post_count, 1)
Exemple #11
0
    def test_topic_tracker_redirect_view(self):
        self.login_as(self.staff)

        self.post

        response = self.client.get(reverse('pybb:topic_tracker_redirect', kwargs={
            'topic_id': self.topic.pk
        }))

        self.assertRedirects(response, self.topic.get_absolute_url(), status_code=301)

        TopicReadTracker.objects.create(topic=self.topic,
                                        user=self.staff)

        response = self.client.get(reverse('pybb:topic_tracker_redirect', kwargs={
            'topic_id': self.topic.pk
        }))

        self.client.get(self.topic.get_absolute_url())

        post = Post(topic=self.topic, user=self.user, body='test')
        post.save()

        response = self.client.get(reverse('pybb:topic_tracker_redirect', kwargs={
            'topic_id': self.topic.pk
        }))

        self.assertRedirects(response, post.get_absolute_url(), status_code=301)
Exemple #12
0
    def test_topic_move_form_errors(self):
        forum = Forum.objects.create(name='temporary forum')

        topic = Topic.objects.create(name='move_topic', forum=forum, user=self.superuser)

        post = Post(topic=topic, user=self.superuser, body='move post')
        post.save()

        form = TopicMoveForm(topic=topic, data={
            'name': topic.name,
            'forum': forum.pk,
            'redirection_type': TopicRedirection.TYPE_PERMANENT_REDIRECT
        })

        self.assertFalse(form.is_valid())
        self.assertIn('name', form.errors)

        Topic.objects.create(name='move_topic', forum=self.forum, user=self.superuser)

        form = TopicMoveForm(topic=topic, data={
            'forum': self.forum.pk,
            'redirection_type': TopicRedirection.TYPE_PERMANENT_REDIRECT
        })

        self.assertFalse(form.is_valid())
        self.assertIn('name', form.errors)

        form = TopicMoveForm(topic=topic, data={
            'forum': self.forum.pk,
            'redirection_type': TopicRedirection.TYPE_EXPIRING_REDIRECT
        })

        self.assertFalse(form.is_valid())
        self.assertIn('expired', form.errors)
Exemple #13
0
 def save(self, commit=True):
     if self.instance.pk:
         post = super(PostForm, self).save(commit=False)
         if self.user:
             post.user = self.user
         if post.topic.head == post:
             post.topic.name = self.cleaned_data['name']
             post.topic.updated = datetime.now()
             post.topic.save()
         post.save()
         return post
     allow_post = True
     if defaults.PYBB_PREMODERATION:
             allow_post = defaults.PYBB_PREMODERATION(self.user, self.cleaned_data['body'])
     if self.forum:
         topic = Topic(forum=self.forum,
                       user=self.user,
                       name=self.cleaned_data['name'])
         if not allow_post:
             topic.on_moderation = True
         topic.save()
     else:
         topic = self.topic
     post = Post(topic=topic, user=self.user, user_ip=self.ip,
                 body=self.cleaned_data['body'])
     if not allow_post:
         post.on_moderation = True
     post.save()
     return post
Exemple #14
0
 def save(self, commit=True):
     if self.instance.pk:
         post = super(PostForm, self).save(commit=False)
         if self.user:
             post.user = self.user
         if post.topic.head == post:
             post.topic.name = self.cleaned_data['name']
             post.topic.updated = datetime.now()
             post.topic.save()
         post.save()
         return post
     allow_post = True
     if defaults.PYBB_PREMODERATION:
         allow_post = defaults.PYBB_PREMODERATION(self.user,
                                                  self.cleaned_data['body'])
     if self.forum:
         topic = Topic(forum=self.forum,
                       user=self.user,
                       name=self.cleaned_data['name'])
         if not allow_post:
             topic.on_moderation = True
         topic.save()
     else:
         topic = self.topic
     post = Post(topic=topic,
                 user=self.user,
                 user_ip=self.ip,
                 body=self.cleaned_data['body'])
     if not allow_post:
         post.on_moderation = True
     post.save()
     return post
Exemple #15
0
    def test_topic_delete_formset(self):
        topic2 = Topic.objects.create(name='Topic 2',
                                      forum=self.forum,
                                      user=self.superuser)

        post2 = Post(topic=topic2, user=self.superuser, body='post on topic2')
        post2.save()

        topics = Topic.objects.filter(pk__in=[self.topic.pk, topic2.pk])

        FormSet = get_topic_delete_formset(topics=topics)

        formset = FormSet(
            data={
                'form-TOTAL_FORMS': 2,
                'form-INITIAL_FORMS': 0,
                'form-0-topic': self.topic.pk,
                'form-0-confirm': True,
                'form-1-topic': topic2.pk,
                'form-1-confirm': True,
            })

        self.assertTrue(formset.is_valid())

        for form in formset:
            topic = form.save()

            self.assertTrue(topic.deleted)
Exemple #16
0
    def test_topics_delete_complete(self):
        topic2 = Topic.objects.create(name='Topic 2', forum=self.forum, user=self.superuser)

        post2 = Post(topic=topic2, user=self.superuser, body='post on topic2')
        post2.save()

        topics_delete_url = reverse('pybb:topics_delete')

        self.login_as(self.staff)

        response = self.client.post(topics_delete_url, data={
            'topic_ids': [self.topic.pk, topic2.pk],
            'form-TOTAL_FORMS': 2,
            'form-INITIAL_FORMS': 0,
            'form-0-topic': self.topic.pk,
            'form-0-confirm': True,
            'form-1-topic': topic2.pk,
            'form-1-confirm': True,
            'submit': 1
        })

        topic2 = Topic.objects.get(pk=topic2.pk)

        self.assertTrue(self.topic.delete)
        self.assertTrue(topic2.delete)

        self.assertRedirects(response, reverse('pybb:index'))
Exemple #17
0
    def test_topic_move_form_with_new_forum(self):
        forum = Forum.objects.create(name='temporary forum')

        topic = Topic.objects.create(name='move_topic',
                                     forum=forum,
                                     user=self.superuser)

        post = Post(topic=topic, user=self.superuser, body='move post')
        post.save()

        name = 'new name for temporary topic'

        form = TopicMoveForm(topic=topic,
                             data={
                                 'name':
                                 name,
                                 'forum':
                                 self.forum.pk,
                                 'redirection_type':
                                 TopicRedirection.TYPE_PERMANENT_REDIRECT
                             })

        self.assertTrue(form.is_valid())

        new_topic = form.save()

        topic = Topic.objects.get(pk=topic.pk)

        self.assertTrue(topic.redirect)

        self.assertTrue(new_topic.slug is not None)
        self.assertEqual(new_topic.redirections.count(), 1)
        self.assertEqual(Post.objects.get(pk=post.pk).topic, new_topic)
        self.assertEqual(topic.posts.count(), 0)
Exemple #18
0
 def test_subscription(self):
     user = get_user_model().objects.create_user(username='******',
                                                 password='******',
                                                 email='*****@*****.**')
     client = Client()
     client.login(username='******', password='******')
     response = client.post(reverse('pybb:subscription_create'),
                            data={
                                'topic_id': self.topic.pk,
                                'type': Subscription.TYPE_INSTANT_ALERT
                            })
     self.assertEqual(response.status_code, 302)
     self.assertRedirects(response, self.topic.get_absolute_url())
     self.assertTrue(user in list(self.topic.subscribers.all()))
     new_post = Post(topic=self.topic,
                     user=self.user,
                     body='test subscribtion юникод')
     new_post.save()
     self.assertTrue([
         msg for msg in mail.outbox
         if new_post.get_absolute_url() in msg.body
     ])
     response = client.post(reverse('pybb:subscription_delete'),
                            data={'topic_id': self.topic.pk})
     self.assertEqual(response.status_code, 302)
     self.assertRedirects(response, self.topic.get_absolute_url())
     self.assertTrue(user not in list(self.topic.subscribers.all()))
Exemple #19
0
    def test_topic_merge_form(self):
        topic = Topic.objects.create(name='merged_topic',
                                     forum=self.forum,
                                     user=self.superuser)

        post = Post(topic=topic, user=self.superuser, body='merged post')
        post.save()

        form = TopicMergeForm(topic=topic, data={'topic': topic.pk})

        self.assertFalse(form.is_valid())
        self.assertIn('topic', form.errors)

        form = TopicMergeForm(topic=topic, data={'topic': self.topic.pk})

        self.assertTrue(form.is_valid())

        new_topic = form.save()

        topic = Topic.objects.get(pk=topic.pk)

        self.assertTrue(topic.redirect)

        self.assertEqual(new_topic.redirections.count(), 1)
        self.assertEqual(Post.objects.get(pk=post.pk).topic, self.topic)
        self.assertEqual(topic.posts.count(), 0)
Exemple #20
0
    def test_simple_quote(self):
        post = Post(user=self.staff, body='[quote="zeus;%d"]Super quote[/quote]' % self.post.pk, topic=self.topic)
        post.save()

        self.assertHTMLEqual(minify_html(post.body_html), u'<blockquote><div class="quote-author">        Posted by <a class="quote-author-name" href="/users/zeus/">zeus</a><a rel="nofollow" class="quote-message-link" href="/xfoo/{}-etopic#post{}"></a></div><div class="quote-message">        Super quote    </div></blockquote>'.format(self.post.topic_id, self.post.id))

        self.assertEqual(Quote.objects.filter(from_post=post).count(), 1)
Exemple #21
0
    def test_undelete_post_topic_view(self):
        post = Post(topic=self.topic,
                    user=self.user,
                    body='test to delete',
                    deleted=True)
        post.save()
        post.mark_as_deleted(user=self.user)

        self.login()

        self.post.mark_as_deleted(user=self.user)

        response = self.client.post(
            reverse('pybb:post_delete', args=[self.post.id]))

        self.assertEqual(response.status_code, 302)

        self.post = Post.objects.get(pk=self.post.pk)

        self.assertRaises(PostDeletion.DoesNotExist,
                          lambda: self.post.deletion)

        self.assertFalse(self.post.deleted)

        self.assertTrue(Post.objects.get(pk=post.pk).deleted)
Exemple #22
0
 def test_forum_updated(self):
     time.sleep(1)
     topic = Topic(name='xtopic', forum=self.forum, user=self.user)
     topic.save()
     post = Post(topic=topic, user=self.user, body='one')
     post.save()
     post = Post.objects.get(id=post.id)
     self.assertTrue(self.forum.updated == post.created)
Exemple #23
0
 def test_forum_updated(self):
     time.sleep(1)
     topic = Topic(name='xtopic', forum=self.forum, user=self.user)
     topic.save()
     post = Post(topic=topic, user=self.user, body='one')
     post.save()
     post = Post.objects.get(id=post.id)
     self.assertTrue(self.forum.updated == post.created)
Exemple #24
0
    def test_hidden(self):
        client = Client()
        parent = Forum(name='hcat', hidden=True)
        parent.save()

        forum_in_hidden = Forum(name='in_hidden', forum=parent)
        forum_in_hidden.save()

        topic_in_hidden = Topic(forum=forum_in_hidden, name='in_hidden', user=self.user)
        topic_in_hidden.save()

        forum_hidden = Forum(name='hidden', forum=self.parent_forum, hidden=True)
        forum_hidden.save()

        topic_hidden = Topic(forum=forum_hidden, name='hidden', user=self.user)
        topic_hidden.save()

        post_hidden = Post(topic=topic_hidden, user=self.user, body='hidden')
        post_hidden.save()

        post_in_hidden = Post(topic=topic_in_hidden, user=self.user, body='hidden')
        post_in_hidden.save()

        self.assertFalse(parent.id in [c.id for c in client.get(reverse('pybb:index')).context['forums']])
        self.assertEqual(client.get(parent.get_absolute_url()).status_code, 302)
        self.assertEqual(client.get(forum_in_hidden.get_absolute_url()).status_code, 302)
        self.assertEqual(client.get(topic_in_hidden.get_absolute_url()).status_code, 302)

        self.assertNotContains(client.get(reverse('pybb:index')), forum_hidden.get_absolute_url())
        self.assertNotContains(client.get(reverse('pybb:feed_topics')), topic_hidden.get_absolute_url())
        self.assertNotContains(client.get(reverse('pybb:feed_topics')), topic_in_hidden.get_absolute_url())

        self.assertNotContains(client.get(reverse('pybb:feed_posts')), post_hidden.get_absolute_url())
        self.assertNotContains(client.get(reverse('pybb:feed_posts')), post_in_hidden.get_absolute_url())
        self.assertEqual(client.get(forum_hidden.get_absolute_url()).status_code, 302)
        self.assertEqual(client.get(topic_hidden.get_absolute_url()).status_code, 302)

        client.login(username='******', password='******')

        self.assertTrue(parent.id in [c.id for c in client.get(reverse('pybb:index')).context['forums']])

        self.assertContains(client.get(reverse('pybb:index')), forum_hidden.get_absolute_url())

        self.assertEqual(client.get(parent.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(forum_in_hidden.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(topic_in_hidden.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(forum_hidden.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(topic_hidden.get_absolute_url()).status_code, 200)
        self.user.is_staff = True
        self.user.save()
        self.assertTrue(parent.id in [c.id for c in client.get(reverse('pybb:index')).context['forums']])
        self.assertContains(client.get(reverse('pybb:index')), forum_hidden.get_absolute_url())

        self.assertEqual(client.get(parent.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(forum_in_hidden.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(topic_in_hidden.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(forum_hidden.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(topic_hidden.get_absolute_url()).status_code, 200)
Exemple #25
0
 def test_topic_deletion(self):
     topic = Topic(name='xtopic', forum=self.forum, user=self.user)
     topic.save()
     post = Post(topic=topic, user=self.user, body='one')
     post.save()
     post = Post(topic=topic, user=self.user, body='two')
     post.save()
     post.delete()
     Topic.objects.get(id=topic.id)
     Forum.objects.get(id=self.forum.id)
     topic.delete()
     Forum.objects.get(id=self.forum.id)
Exemple #26
0
    def test_delete_post_view_own_user(self):
        post = Post(topic=self.topic, user=self.user, body='test to delete')
        post.save()

        self.login()

        response = self.client.post(reverse('pybb:post_delete', args=[post.id]))
        self.assertEqual(response.status_code, 302)

        self.assertRaises(Post.DoesNotExist, lambda: Post.objects.get(pk=post.pk, deleted=False))

        self.assertNotEqual(post.deletion, None)
Exemple #27
0
 def test_topic_deletion(self):
     topic = Topic(name='xtopic', forum=self.forum, user=self.user)
     topic.save()
     post = Post(topic=topic, user=self.user, body='one')
     post.save()
     post = Post(topic=topic, user=self.user, body='two')
     post.save()
     post.delete()
     Topic.objects.get(id=topic.id)
     Forum.objects.get(id=self.forum.id)
     topic.delete()
     Forum.objects.get(id=self.forum.id)
Exemple #28
0
    def test_simple_quote(self):
        post = Post(user=self.staff,
                    body='[quote="zeus;%d"]Super quote[/quote]' % self.post.pk,
                    topic=self.topic)
        post.save()

        self.assertHTMLEqual(
            minify_html(post.body_html),
            u'<blockquote><div class="quote-author">        Posted by <a class="quote-author-name" href="/users/zeus/">zeus</a><a rel="nofollow" class="quote-message-link" href="/xfoo/{}-etopic#post{}"></a></div><div class="quote-message">        Super quote    </div></blockquote>'
            .format(self.post.topic_id, self.post.id))

        self.assertEqual(Quote.objects.filter(from_post=post).count(), 1)
Exemple #29
0
    def test_staff(self):
        client = Client()
        parent = Forum(name='hcat', staff=True)
        parent.save()

        forum_in_staff = Forum(name='in_staff', forum=parent)
        forum_in_staff.save()

        topic_in_staff = Topic(forum=forum_in_staff, name='in_staff', user=self.user)
        topic_in_staff.save()

        forum_staff = Forum(name='staff', forum=self.parent_forum, staff=True)
        forum_staff.save()

        topic_staff = Topic(forum=forum_staff, name='staff', user=self.user)
        topic_staff.save()

        post_staff = Post(topic=topic_staff, user=self.user, body='staff')
        post_staff.save()

        post_in_staff = Post(topic=topic_in_staff, user=self.user, body='staff')
        post_in_staff.save()

        self.assertFalse(parent.id in [c.id for c in client.get(reverse('pybb:index')).context['forums']])
        self.assertEqual(client.get(parent.get_absolute_url()).status_code, 404)
        self.assertEqual(client.get(forum_in_staff.get_absolute_url()).status_code, 404)
        self.assertEqual(client.get(topic_in_staff.get_absolute_url()).status_code, 404)

        self.assertEqual(client.get(forum_staff.get_absolute_url()).status_code, 404)
        self.assertEqual(client.get(topic_staff.get_absolute_url()).status_code, 404)

        client.login(username='******', password='******')

        self.assertFalse(parent.id in [c.id for c in client.get(reverse('pybb:index')).context['forums']])

        self.assertNotContains(client.get(reverse('pybb:index')), forum_staff.get_absolute_url())

        self.assertEqual(client.get(parent.get_absolute_url()).status_code, 404)
        self.assertEqual(client.get(forum_in_staff.get_absolute_url()).status_code, 404)
        self.assertEqual(client.get(topic_in_staff.get_absolute_url()).status_code, 404)
        self.assertEqual(client.get(forum_staff.get_absolute_url()).status_code, 404)
        self.assertEqual(client.get(topic_staff.get_absolute_url()).status_code, 404)

        self.user.is_staff = True
        self.user.save()

        self.assertTrue(parent.id in [c.id for c in client.get(reverse('pybb:index')).context['forums']])

        self.assertEqual(client.get(parent.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(forum_in_staff.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(topic_in_staff.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(forum_staff.get_absolute_url()).status_code, 200)
        self.assertEqual(client.get(topic_staff.get_absolute_url()).status_code, 200)
Exemple #30
0
    def save(self, commit=True):
        if self.instance.pk:
            post = super(PostForm, self).save(commit=False)
            if self.user:
                post.user = self.user
            if post.topic.head == post:
                post.topic.name = self.cleaned_data['name']
                if self.may_create_poll:
                    post.topic.poll_type = self.cleaned_data['poll_type']
                    post.topic.poll_question = self.cleaned_data[
                        'poll_question']
                post.topic.updated = tznow()
                if commit:
                    post.topic.save()
            post.updated = tznow()
            if commit:
                post.save()
                # Subscribe to topic
                if self.cleaned_data['subscribe']:
                    post.topic.subscribers.add(self.user)
                else:
                    post.topic.subscribers.remove(self.user)
            return post, post.topic

        allow_post = True
        if defaults.PYBB_PREMODERATION:
            allow_post = defaults.PYBB_PREMODERATION(self.user,
                                                     self.cleaned_data['body'])
        if self.forum:
            topic = Topic(
                forum=self.forum,
                user=self.user,
                name=self.cleaned_data['name'],
                poll_type=self.cleaned_data.get('poll_type',
                                                Topic.POLL_TYPE_NONE),
                poll_question=self.cleaned_data.get('poll_question', None),
                slug=self.cleaned_data.get('slug', None),
            )
            if not allow_post:
                topic.on_moderation = True
        else:
            topic = self.topic
        post = Post(user=self.user,
                    user_ip=self.ip,
                    body=self.cleaned_data['body'])
        if not allow_post:
            post.on_moderation = True
        if commit:
            topic.save()
            post.topic = topic
            post.save()
        return post, topic
Exemple #31
0
    def test_compute(self):
        # initials
        self.assertEqual(self.forum.forum_count, 0)
        self.assertEqual(self.parent_forum.forum_count, 1)

        self.topic
        self.post

        parent_forum = Forum.objects.get(pk=self.parent_forum.pk)

        self.assertEqual(parent_forum.topic_count, 1)
        self.assertEqual(parent_forum.post_count, 1)
        self.assertEqual(self.forum.topic_count, 1)
        self.assertEqual(self.forum.post_count, 1)

        forum = Forum.objects.create(name='bar', description='bar', forum=self.forum)

        topic = Topic(name='bar', forum=forum, user=self.user)
        topic.save()

        post = Post(topic=topic, user=self.user, body='my new post')
        post.save()

        self.assertEqual(topic.post_count, 1)
        self.assertEqual(forum.topic_count, 1)

        self.assertEqual(Forum.objects.get(pk=self.forum.pk).topic_count, 2)
        self.assertEqual(Forum.objects.get(pk=self.parent_forum.pk).topic_count, 2)

        new_topic = Topic(name='foo', forum=self.forum, user=self.user)
        new_topic.save()

        new_post = Post(topic=topic, user=self.user, body='my new post')
        new_post.save()

        self.assertEqual(Forum.objects.get(pk=self.forum.pk).topic_count, 3)
        self.assertEqual(Forum.objects.get(pk=self.parent_forum.pk).topic_count, 3)

        post.mark_as_deleted(commit=True)

        self.assertEqual(Forum.objects.get(pk=self.forum.pk).topic_count, 2)
        self.assertEqual(Forum.objects.get(pk=self.parent_forum.pk).topic_count, 2)

        self.assertTrue(Topic.objects.get(pk=topic.pk).deleted)

        self.assertEqual(Forum.objects.get(pk=forum.pk).topic_count, 0)
        self.assertEqual(Forum.objects.get(pk=forum.pk).post_count, 0)

        new_topic.mark_as_deleted()

        self.assertEqual(Forum.objects.get(pk=self.forum.pk).topic_count, 1)
        self.assertEqual(Forum.objects.get(pk=self.parent_forum.pk).topic_count, 1)
Exemple #32
0
    def test_double_quote(self):
        post_1 = Post(user=self.staff, body='[quote="%s;%d"]%s[/quote]' % (self.post.user.username,
                                                                         self.post.pk,
                                                                         self.post.body),
                    topic=self.topic)
        post_1.save()

        post_2 = Post(user=self.superuser, body='[quote="%s;%d"]%s[/quote]' % (post_1.user.username,
                                                                             post_1.pk,
                                                                             post_1.body), topic=self.topic)
        post_2.save()
        self.assertHTMLEqual(minify_html(post_2.body_html), u'<blockquote><div class="quote-author">        Posted by <a class="quote-author-name" href="/users/thoas/">thoas</a><a rel="nofollow" class="quote-message-link" href="/xfoo/{}-etopic#post{}"></a></div><div class="quote-message"><blockquote><div class="quote-author">        Posted by <a class="quote-author-name" href="/users/zeus/">zeus</a><a rel="nofollow" class="quote-message-link" href="/xfoo/{}-etopic#post{}"></a></div><div class="quote-message">        bbcode <strong>test</strong></div></blockquote></div></blockquote>'.format(post_1.topic_id, post_1.id, self.post.topic_id, self.post.id))

        self.assertEqual(Quote.objects.filter(from_post=post_2).count(), 2)
Exemple #33
0
    def test_delete_post_view_own_user(self):
        post = Post(topic=self.topic, user=self.user, body='test to delete')
        post.save()

        self.login()

        response = self.client.post(reverse('pybb:post_delete',
                                            args=[post.id]))
        self.assertEqual(response.status_code, 302)

        self.assertRaises(Post.DoesNotExist,
                          lambda: Post.objects.get(pk=post.pk, deleted=False))

        self.assertNotEqual(post.deletion, None)
Exemple #34
0
 def test_topic_updated(self):
     topic = Topic(name='etopic', forum=self.forum, user=self.user)
     topic.save()
     time.sleep(1)
     post = Post(topic=topic, user=self.user, body='bbcode [b]test[b]')
     post.save()
     client = Client()
     response = client.get(self.forum.get_absolute_url())
     self.assertEqual(response.context['topic_list'][0], topic)
     time.sleep(1)
     post = Post(topic=self.topic, user=self.user, body='bbcode [b]test[b]')
     post.save()
     client = Client()
     response = client.get(self.forum.get_absolute_url())
     self.assertEqual(response.context['topic_list'][0], self.topic)
Exemple #35
0
 def test_topic_updated(self):
     topic = Topic(name='etopic', forum=self.forum, user=self.user)
     topic.save()
     time.sleep(1)
     post = Post(topic=topic, user=self.user, body='bbcode [b]test[b]')
     post.save()
     client = Client()
     response = client.get(self.forum.get_absolute_url())
     self.assertEqual(response.context['topic_list'][0], topic)
     time.sleep(1)
     post = Post(topic=self.topic, user=self.user, body='bbcode [b]test[b]')
     post.save()
     client = Client()
     response = client.get(self.forum.get_absolute_url())
     self.assertEqual(response.context['topic_list'][0], self.topic)
Exemple #36
0
    def test_topic_move_form_errors(self):
        forum = Forum.objects.create(name='temporary forum')

        topic = Topic.objects.create(name='move_topic',
                                     forum=forum,
                                     user=self.superuser)

        post = Post(topic=topic, user=self.superuser, body='move post')
        post.save()

        form = TopicMoveForm(topic=topic,
                             data={
                                 'name':
                                 topic.name,
                                 'forum':
                                 forum.pk,
                                 'redirection_type':
                                 TopicRedirection.TYPE_PERMANENT_REDIRECT
                             })

        self.assertFalse(form.is_valid())
        self.assertIn('name', form.errors)

        Topic.objects.create(name='move_topic',
                             forum=self.forum,
                             user=self.superuser)

        form = TopicMoveForm(topic=topic,
                             data={
                                 'forum':
                                 self.forum.pk,
                                 'redirection_type':
                                 TopicRedirection.TYPE_PERMANENT_REDIRECT
                             })

        self.assertFalse(form.is_valid())
        self.assertIn('name', form.errors)

        form = TopicMoveForm(topic=topic,
                             data={
                                 'forum':
                                 self.forum.pk,
                                 'redirection_type':
                                 TopicRedirection.TYPE_EXPIRING_REDIRECT
                             })

        self.assertFalse(form.is_valid())
        self.assertIn('expired', form.errors)
Exemple #37
0
    def test_topic_merge_view(self):
        topic = Topic(name='xtopic', forum=self.forum, user=self.user)
        topic.save()
        post = Post(topic=topic, user=self.user, body='one')
        post.save()

        topic_merge_url = reverse('pybb:topic_merge')

        self.login_as(self.staff)

        response = self.client.post(topic_merge_url,
                                    data={'topic_ids': [topic.pk]})

        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.context['form'].forms), 1)
        self.assertTemplateUsed(response, 'pybb/topic/merge.html')
Exemple #38
0
    def test_undelete_post_view_own_user(self):
        post = Post(topic=self.topic, user=self.user, body='test to delete', deleted=True)
        post.save()

        PostDeletion.objects.create(post=post, user=self.user)

        self.login()

        response = self.client.post(reverse('pybb:post_delete', args=[post.id]))
        self.assertEqual(response.status_code, 302)

        post = Post.objects.get(pk=post.pk)

        self.assertRaises(PostDeletion.DoesNotExist, lambda: post.deletion)

        self.assertFalse(post.deleted)
Exemple #39
0
    def test_multiple_mentions(self):
        self.user
        self.staff
        self.superuser

        multiple_mentions = Post(topic=self.topic, user=self.user, body='@thoas is right and @oleiade or @zeus!')

        processor = MentionProcessor(multiple_mentions.body, obj=multiple_mentions)

        self.assertEqual(processor.render(), u'[mention=%d]thoas[/mention] is right and [mention=%d]oleiade[/mention] or [mention=%d]zeus[/mention]!' % (
            self.staff.pk,
            self.superuser.pk,
            self.user.pk
        ))
        multiple_mentions.save()

        self.assertEqual(Mention.objects.filter(post=multiple_mentions).count(), 3)
Exemple #40
0
    def test_topic_merge_view(self):
        topic = Topic(name='xtopic', forum=self.forum, user=self.user)
        topic.save()
        post = Post(topic=topic, user=self.user, body='one')
        post.save()

        topic_merge_url = reverse('pybb:topic_merge')

        self.login_as(self.staff)

        response = self.client.post(topic_merge_url, data={
            'topic_ids': [topic.pk]
        })

        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.context['form'].forms), 1)
        self.assertTemplateUsed(response, 'pybb/topic/merge.html')
Exemple #41
0
    def test_multiple_mentions(self):
        self.user
        self.staff
        self.superuser

        multiple_mentions = Post(topic=self.topic, user=self.user, body='@thoas is right and @oleiade or @zeus!')

        processor = MentionProcessor(multiple_mentions.body, obj=multiple_mentions)

        self.assertEqual(processor.render(), u'[mention=%d]thoas[/mention] is right and [mention=%d]oleiade[/mention] or [mention=%d]zeus[/mention]!' % (
            self.staff.pk,
            self.superuser.pk,
            self.user.pk
        ))
        multiple_mentions.save()

        self.assertEqual(Mention.objects.filter(post=multiple_mentions).count(), 3)
 def handle(self, *args, **options):
     _parser = Markdown(
         extensions=[
             'forum.mdownx.nofollowlinks',
             'markdown.extensions.nl2br',
             'pymdownx.extra',
             'pymdownx.emoji',
             'pymdownx.tasklist',
             'pymdownx.details',
             'pymdownx.superfences',
             'pymdownx.details',
         ],
         safe_mode='escape',
     )
     table = self.import_from_csv('narodny_konspekt.csv')
     for lesson_number in table:
         table[lesson_number] = self.rewrite(table[lesson_number])
         if isinstance(table[lesson_number], float):
             pass
         else:
             try:
                 page = LessonPage.objects.get(lesson_number=lesson_number)
             except:
                 self.stdout.write("Lesson page doesn't exist")
                 break
             page.has_own_topic = True
             new_topic, topic_created = Topic.objects.get_or_create(
                 forum=Forum.objects.get(name='Lessons Forum'),
                 name='Урок-' + str(page.lesson_number),
                 user=User.objects.get(username='******'),
                 slug='lecon' + str(page.lesson_number),
             )
             page.topic_id = new_topic.id
             self.stdout.write(str(lesson_number) + ' thread created')
             body = table[lesson_number]
             new_post = Post(
                 body=body,
                 topic_id=new_topic.id,
                 user_id=new_topic.user_id,
                 user_ip='1.1.1.1',
                 created=datetime.now(tz=pytz.timezone(settings.TIME_ZONE)),
             )
             new_post.save()
             self.stdout.write(str(lesson_number) + ' post created')
             page.save()
	def handle(self, *args, **options):
		_parser = Markdown(
			extensions=[
				'forum.mdownx.nofollowlinks',
				'markdown.extensions.nl2br',
				'pymdownx.extra',
				'pymdownx.emoji',
				'pymdownx.tasklist',
				'pymdownx.details',
				'pymdownx.superfences',
				'pymdownx.details',
			],
			safe_mode='escape',
		)
		table = self.import_from_csv('narodny_konspekt.csv')
		for lesson_number in table:
			table[lesson_number] = self.rewrite(table[lesson_number])
			if isinstance(table[lesson_number], float):
				pass
			else:
				try:
					page = LessonPage.objects.get(lesson_number=lesson_number)
				except:
					self.stdout.write("Lesson page doesn't exist")
					break
				page.has_own_topic = True
				new_topic, topic_created = Topic.objects.get_or_create(
					forum=Forum.objects.get(name='Lessons Forum'),
					name='Урок-' + str(page.lesson_number),
					user=User.objects.get(username='******'),
					slug='lecon' + str(page.lesson_number),
				)
				page.topic_id = new_topic.id
				self.stdout.write(str(lesson_number) + ' thread created')
				body = table[lesson_number]
				new_post = Post(
					body=body,
					topic_id=new_topic.id,
					user_id=new_topic.user_id,
					user_ip='1.1.1.1',
					created=datetime.now(tz=pytz.timezone(settings.TIME_ZONE)),
				)
				new_post.save()
				self.stdout.write(str(lesson_number) + ' post created')
				page.save()
Exemple #44
0
    def test_topic_merge_complete(self):
        topic = Topic(name='xtopic', forum=self.forum, user=self.user)
        topic.save()
        post = Post(topic=topic, user=self.user, body='one')
        post.save()

        topic_merge_url = reverse('pybb:topic_merge')

        self.login_as(self.staff)

        response = self.client.post(topic_merge_url, data={
            'topic_ids': [topic.pk],
            'form-TOTAL_FORMS': 1,
            'form-INITIAL_FORMS': 0,
            'form-0-topic': self.topic.pk,
            'submit': 1
        })

        self.assertRedirects(response, reverse('pybb:index'))
Exemple #45
0
    def test_delete_post_view_superuser(self):
        post = Post(topic=self.topic, user=self.user, body='test to delete')
        post.save()
        self.user.is_superuser = True
        self.user.save()
        self.login()
        response = self.client.post(reverse('pybb:post_delete', args=[post.id]), follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(Topic.objects.filter(id=self.topic.id).count(), 1)
        self.assertEqual(Forum.objects.filter(id=self.forum.id).count(), 1)

        response = self.client.post(reverse('pybb:post_delete', args=[self.post.id]), follow=True)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(Post.objects.filter(id=self.post.id,
                                             deleted=False).count(), 0)
        self.assertEqual(Topic.objects.filter(id=self.topic.id,
                                              deleted=False).count(), 0)
        self.assertEqual(Forum.objects.filter(id=self.forum.id).count(), 1)
Exemple #46
0
    def test_double_quote(self):
        post_1 = Post(user=self.staff,
                      body='[quote="%s;%d"]%s[/quote]' %
                      (self.post.user.username, self.post.pk, self.post.body),
                      topic=self.topic)
        post_1.save()

        post_2 = Post(user=self.superuser,
                      body='[quote="%s;%d"]%s[/quote]' %
                      (post_1.user.username, post_1.pk, post_1.body),
                      topic=self.topic)
        post_2.save()
        self.assertHTMLEqual(
            minify_html(post_2.body_html),
            u'<blockquote><div class="quote-author">        Posted by <a class="quote-author-name" href="/users/thoas/">thoas</a><a rel="nofollow" class="quote-message-link" href="/xfoo/{}-etopic#post{}"></a></div><div class="quote-message"><blockquote><div class="quote-author">        Posted by <a class="quote-author-name" href="/users/zeus/">zeus</a><a rel="nofollow" class="quote-message-link" href="/xfoo/{}-etopic#post{}"></a></div><div class="quote-message">        bbcode <strong>test</strong></div></blockquote></div></blockquote>'
            .format(post_1.topic_id, post_1.id, self.post.topic_id,
                    self.post.id))

        self.assertEqual(Quote.objects.filter(from_post=post_2).count(), 2)
Exemple #47
0
    def save(self, commit=True):
        topic = super(MoveTopicForm, self).save(commit=False)
        if 'target_forums' in self.changed_data:
            forum_id = int(self.cleaned_data['target_forums'])
            target_forum = Forum.objects.get(pk=forum_id)
            if not pybb_can_administer_forum(self.user, target_forum):
                raise PermissionDenied

            topic.forum = target_forum
            topic.save()

            # Unsubscribe all users that aren't allowed to read the target
            # forum
            list_subscribers = list(topic.subscribers.all())
            for subscriber in list_subscribers:
                if not pybb_can_view_forum(subscriber, target_forum):
                    topic.subscribers.remove(subscriber)

            if self.cleaned_data['leave_placeholder']:
                t = template.loader.get_template(
                    'pybb/messages/topic_moved.html')
                post_body = mark_safe(
                    t.render(Context({
                        'topic': topic,
                        'domain': self.domain
                    })))

                placeholder_topic = Topic(forum=self.original_forum,
                                          user=self.user,
                                          name=topic.name,
                                          status=2,
                                          topic_after_move=topic,
                                          hidden=topic.hidden)
                placeholder_topic.save()

                post = Post(topic=placeholder_topic,
                            user=self.user,
                            user_ip=self.ip,
                            body=post_body)
                post.save()

        return self.instance
Exemple #48
0
    def test_multiple_quote_add(self):
        self.user
        self.login_as(self.staff)

        self.post

        post = Post(topic=self.topic,
                    user=self.superuser,
                    body='[b]do you want my pere nowel?[/b]')
        post.save()

        response = self.client.post(reverse('quote'),
                                    data={
                                        'topic_id': self.topic.pk,
                                        'post_id': post.pk
                                    })

        self.assertEqual(response.status_code, 302)

        response = self.client.get(
            reverse('pybb:post_create', kwargs={'topic_id': self.topic.id}) +
            '?quote_id=%d' % self.post.id)

        self.assertEqual(
            response.context['form'].initial['body'],
            u'[quote="zeus;{}"]bbcode [b]test[/b][/quote]\n\n[quote="oleiade;{}"][b]do you want my pere nowel?[/b][/quote]\n\n'
            .format(self.post.pk, post.pk))

        self.assertEqual(response.status_code, 200)

        response = self.client.post(reverse('quote'),
                                    data={
                                        'topic_id': self.topic.pk,
                                        'post_id': post.pk
                                    })

        self.assertEqual(response.status_code, 302)

        response = self.client.get(
            reverse('pybb:post_create', kwargs={'topic_id': self.topic.id}))
        self.assertTrue('body' not in response.context['form'].initial)
        self.assertEqual(response.status_code, 200)
Exemple #49
0
    def save(self, commit=True):
        if self.instance.pk:
            post = super(PostForm, self).save(commit=False)
            if self.user:
                post.user = self.user
            if post.topic.head == post:
                post.topic.name = self.cleaned_data['name']
                if self.may_create_poll:
                    post.topic.poll_type = self.cleaned_data['poll_type']
                    post.topic.poll_question = self.cleaned_data['poll_question']
                post.topic.updated = tznow()
                if commit:
                    post.topic.save()
            post.updated = tznow()
            if commit:
                post.save()
            return post, post.topic

        allow_post = True
        if defaults.PYBB_PREMODERATION:
            allow_post = defaults.PYBB_PREMODERATION(self.user, self.cleaned_data['body'])
        if self.forum:
            topic = Topic(
                forum=self.forum,
                user=self.user,
                name=self.cleaned_data['name'],
                poll_type=self.cleaned_data.get('poll_type', Topic.POLL_TYPE_NONE),
                poll_question=self.cleaned_data.get('poll_question', None),
                slug=self.cleaned_data.get('slug', None),
            )
            if not allow_post:
                topic.on_moderation = True
        else:
            topic = self.topic
        post = Post(user=self.user, user_ip=self.ip, body=self.cleaned_data['body'])
        if not allow_post:
            post.on_moderation = True
        if commit:
            topic.save()
            post.topic = topic
            post.save()
        return post, topic
Exemple #50
0
    def test_undelete_post_view_own_user(self):
        post = Post(topic=self.topic,
                    user=self.user,
                    body='test to delete',
                    deleted=True)
        post.save()

        PostDeletion.objects.create(post=post, user=self.user)

        self.login()

        response = self.client.post(reverse('pybb:post_delete',
                                            args=[post.id]))
        self.assertEqual(response.status_code, 302)

        post = Post.objects.get(pk=post.pk)

        self.assertRaises(PostDeletion.DoesNotExist, lambda: post.deletion)

        self.assertFalse(post.deleted)
Exemple #51
0
 def test_subscription(self):
     user = get_user_model().objects.create_user(username='******', password='******', email='*****@*****.**')
     client = Client()
     client.login(username='******', password='******')
     response = client.post(reverse('pybb:subscription_create'), data={
         'topic_id': self.topic.pk,
         'type': Subscription.TYPE_INSTANT_ALERT
     })
     self.assertEqual(response.status_code, 302)
     self.assertRedirects(response, self.topic.get_absolute_url())
     self.assertTrue(user in list(self.topic.subscribers.all()))
     new_post = Post(topic=self.topic, user=self.user, body='test subscribtion юникод')
     new_post.save()
     self.assertTrue([msg for msg in mail.outbox if new_post.get_absolute_url() in msg.body])
     response = client.post(reverse('pybb:subscription_delete'), data={
         'topic_id': self.topic.pk
     })
     self.assertEqual(response.status_code, 302)
     self.assertRedirects(response, self.topic.get_absolute_url())
     self.assertTrue(user not in list(self.topic.subscribers.all()))
Exemple #52
0
    def test_undelete_post_topic_view(self):
        post = Post(topic=self.topic, user=self.user, body='test to delete', deleted=True)
        post.save()
        post.mark_as_deleted(user=self.user)

        self.login()

        self.post.mark_as_deleted(user=self.user)

        response = self.client.post(reverse('pybb:post_delete', args=[self.post.id]))

        self.assertEqual(response.status_code, 302)

        self.post = Post.objects.get(pk=self.post.pk)

        self.assertRaises(PostDeletion.DoesNotExist, lambda: self.post.deletion)

        self.assertFalse(self.post.deleted)

        self.assertTrue(Post.objects.get(pk=post.pk).deleted)
Exemple #53
0
    def test_topic_merge_complete(self):
        topic = Topic(name='xtopic', forum=self.forum, user=self.user)
        topic.save()
        post = Post(topic=topic, user=self.user, body='one')
        post.save()

        topic_merge_url = reverse('pybb:topic_merge')

        self.login_as(self.staff)

        response = self.client.post(topic_merge_url,
                                    data={
                                        'topic_ids': [topic.pk],
                                        'form-TOTAL_FORMS': 1,
                                        'form-INITIAL_FORMS': 0,
                                        'form-0-topic': self.topic.pk,
                                        'submit': 1
                                    })

        self.assertRedirects(response, reverse('pybb:index'))
Exemple #54
0
    def test_posts_move_new_topic_form(self):
        forum = Forum.objects.create(name='temporary forum')

        topic = Topic.objects.create(name='move_topic', forum=forum, user=self.superuser)

        post = Post(topic=topic, user=self.superuser, body='move post')
        post.save()

        posts = Post.objects.filter(id__in=[self.post.pk, post.pk])

        form = PostsMoveNewTopicForm(posts=posts, user=self.superuser, data={
            'name': 'New topic name',
            'forum': self.forum.pk,
        })

        self.assertTrue(form.is_valid())

        new_topic = form.save()

        self.assertEqual(new_topic.posts.count(), 2)
Exemple #55
0
    def save(self, *args, **kwargs):
        if self.forum:
            topic_is_new = True
            topic = Topic(forum=self.forum,
                          user=self.user,
                          name=self.cleaned_data['name'])
            topic.save(*args, **kwargs)
        else:
            topic_is_new = False
            topic = self.topic

        post = Post(topic=topic,
                    user=self.user,
                    markup=self.cleaned_data['markup'],
                    body=self.cleaned_data['body'])
        post.save(*args, **kwargs)

        if pybb_settings.ATTACHMENT_ENABLE:
            self.save_attachment(post, self.cleaned_data['attachment'])

        return post
Exemple #56
0
    def save(self):

        if self.forum:
            topic = Topic(forum=self.forum,
                          user=self.user,
                          name=self.cleaned_data['name'])
            topic.save()
        else:
            topic = self.topic

        post = Post(topic=topic,
                    user=self.user,
                    user_ip=self.ip,
                    markup=self.user.pybb_profile.markup,
                    body=self.cleaned_data['body'])
        post.save()

        if settings.PYBB_ATTACHMENT_ENABLE:
            for f in self.files:
                self.save_attachment(post, self.files[f])

        return post
Exemple #57
0
    def test_topic_move_complete(self):
        topic = Topic(name='xtopic', forum=self.forum, user=self.user)
        topic.save()
        post = Post(topic=topic, user=self.user, body='one')
        post.save()

        topic_merge_url = reverse('pybb:topic_move')

        self.login_as(self.staff)

        name = 'new name for a topic'

        response = self.client.post(
            topic_merge_url,
            data={
                'topic_ids': [topic.pk],
                'form-TOTAL_FORMS': 1,
                'form-INITIAL_FORMS': 0,
                'form-0-name': name,
                'form-0-forum': self.forum.pk,
                'form-0-redirection_type':
                TopicRedirection.TYPE_PERMANENT_REDIRECT,
                'submit': 1
            })

        self.assertRedirects(response, reverse('pybb:index'))

        topic = Topic.objects.get(pk=topic.pk)

        self.assertTrue(topic.redirect)
        self.failUnless(topic.redirection is not None)

        redirection = topic.redirection

        new_topic = redirection.to_topic

        self.assertEqual(new_topic.name, name)
        self.assertEqual(new_topic.post_count, 1)
Exemple #58
0
    def test_delete_post_view_superuser(self):
        post = Post(topic=self.topic, user=self.user, body='test to delete')
        post.save()
        self.user.is_superuser = True
        self.user.save()
        self.login()
        response = self.client.post(reverse('pybb:post_delete',
                                            args=[post.id]),
                                    follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(Topic.objects.filter(id=self.topic.id).count(), 1)
        self.assertEqual(Forum.objects.filter(id=self.forum.id).count(), 1)

        response = self.client.post(reverse('pybb:post_delete',
                                            args=[self.post.id]),
                                    follow=True)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(
            Post.objects.filter(id=self.post.id, deleted=False).count(), 0)
        self.assertEqual(
            Topic.objects.filter(id=self.topic.id, deleted=False).count(), 0)
        self.assertEqual(Forum.objects.filter(id=self.forum.id).count(), 1)
Exemple #59
0
    def test_compute_active_members(self):
        # Initials
        self.assertEquals(self.parent_forum.member_count, 0)
        self.assertEquals(self.forum.member_count, 0)
        self.assertEquals(self.topic.member_count, 0)

        # Add first post by self.user (count += 1)
        user_post_1 = self.post
        self.assertEquals(self.parent_forum.member_count, 1)
        self.assertEquals(self.forum.member_count, 1)
        self.assertEquals(self.topic.member_count, 1)

        # Add first post by self.staff (count += 1)
        staff_post_1 = Post(topic=self.topic,
                            user=self.staff,
                            body='my new post')
        staff_post_1.save()
        self.assertEquals(self.parent_forum.member_count, 2)
        self.assertEquals(self.forum.member_count, 2)
        self.assertEquals(self.topic.member_count, 2)

        # Add second post by self.user (count += 0)
        user_post_2 = Post(topic=self.topic,
                           user=self.user,
                           body='my new post')
        user_post_2.save()
        self.assertEquals(self.parent_forum.member_count, 2)
        self.assertEquals(self.forum.member_count, 2)
        self.assertEquals(self.topic.member_count, 2)

        # Delete staff_post_1 (count -= 1)
        staff_post_1.mark_as_deleted(commit=True)
        self.assertEquals(self.parent_forum.member_count, 1)
        self.assertEquals(self.forum.member_count, 1)
        self.assertEquals(self.topic.member_count, 1)

        # Restore staff_post_1 (count += 1)
        staff_post_1.mark_as_undeleted(commit=True)
        self.assertEquals(self.parent_forum.member_count, 2)
        self.assertEquals(self.forum.member_count, 2)
        self.assertEquals(self.topic.member_count, 2)

        # Delete user_post_2 (count -= 0)
        user_post_2.mark_as_deleted(commit=True)
        self.assertEquals(self.parent_forum.member_count, 2)
        self.assertEquals(self.forum.member_count, 2)
        self.assertEquals(self.topic.member_count, 2)

        # Add third post by self.user in parent_forum (count += 0)
        new_topic = Topic(name='foo2', forum=self.parent_forum, user=self.user)
        new_topic.save()
        user_post_3 = Post(topic=new_topic, user=self.user, body='my new post')
        user_post_3.save()
        self.assertEquals(self.parent_forum.member_count, 2)
        self.assertEquals(new_topic.member_count, 1)
        self.assertEquals(self.forum.member_count, 2)
        self.assertEquals(self.topic.member_count, 2)