Ejemplo n.º 1
0
 def setUp(self):
     self.user = User.objects.get(username='******')
     self.user2 = User.objects.get(username='******')
     self.contest = get_contest_with_forum()
     self.forum = self.contest.forum
     self.cat = Category(forum=self.forum, name='test_category')
     self.cat.save()
     self.ban = Ban(reason="Saying Ni in forum")
     self.ban.user = self.user
     self.ban.admin = User.objects.get(username='******')
     self.ban.forum = self.forum
     self.ban.save()
Ejemplo n.º 2
0
def get_msgs(request, forum=None):
    now = timezone.now()
    if forum is None:
        forum = request.contest.forum
    msgs = []
    if request.user.is_authenticated and Ban.is_banned(forum, request.user):
        msgs.append(
            _("You are banned on this forum. You can't add, edit or "
              "report posts. To appeal contact contest administrators."))
    if forum.is_locked(request.timestamp):
        msgs.append(
            _("This forum is locked, it is not possible to add "
              "or edit posts right now"))
        if forum.unlock_date and forum.unlock_date > now:
            localtime = timezone.localtime(forum.unlock_date)
            msgs.append(
                _("Forum is going to be unlocked at %s") %
                localtime.strftime('%Y-%m-%d %H:%M:%S'))
    elif forum.lock_date and forum.lock_date > now:
        localtime = timezone.localtime(forum.lock_date)
        msgs.append(
            _("Forum is going to be locked at %s") %
            localtime.strftime('%Y-%m-%d %H:%M:%S'))

    return msgs
Ejemplo n.º 3
0
def get_msgs(request, forum=None):
    now = timezone.now()
    if forum is None:
        forum = request.contest.forum
    msgs = []
    if Ban.is_banned(forum, request.user):
        msgs.append(_("You are banned on this forum. You can't add, edit or "
                      "report posts. To appeal contact contest administrators.")
                    )
    if forum.is_locked(request.timestamp):
        msgs.append(_("This forum is locked, it is not possible to add "
                      "or edit posts right now"))
    if forum.lock_date and forum.lock_date > now and \
            not forum.is_locked(request.timestamp):
        localtime = timezone.localtime(forum.lock_date)
        msgs.append(_("Forum is going to be locked at %s") % \
                    localtime.strftime('%Y-%m-%d %H:%M:%S'))
    if forum.unlock_date and forum.unlock_date > now and \
            forum.is_locked(request.timestamp):
        localtime = timezone.localtime(forum.unlock_date)
        msgs.append(_("Forum is going to be unlocked at %s") % \
                    localtime.strftime('%Y-%m-%d %H:%M:%S'))
    return msgs
Ejemplo n.º 4
0
class TestBan(TestCase):
    fixtures = ['test_users', 'test_contest']

    def setUp(self):
        self.user = User.objects.get(username='******')
        self.user2 = User.objects.get(username='******')
        self.contest = get_contest_with_forum()
        self.forum = self.contest.forum
        self.cat = Category(forum=self.forum, name='test_category')
        self.cat.save()
        self.ban = Ban(reason="Saying Ni in forum")
        self.ban.user = self.user
        self.ban.admin = User.objects.get(username='******')
        self.ban.forum = self.forum
        self.ban.save()

    def test_report_post(self):
        thr = Thread(category=self.cat, name='test_thread')
        thr.save()
        p = Post(thread=thr, content='This post will be reported.',
                 author=self.user, add_date=timezone.now())
        p.save()
        self.assertTrue(self.client.login(username='******'))
        url = reverse('forum_post_report', kwargs={'contest_id': self.contest.id,
                                                   'category_id': self.cat.id,
                                                   'thread_id': thr.id,
                                                   'post_id': p.id})
        response = self.client.post(url, follow=True)
        self.assertEqual(403, response.status_code)
        self.ban.delete()
        response = self.client.post(url, follow=True)
        self.assertEqual(200, response.status_code)

    def test_add_thread(self):
        self.assertTrue(self.client.login(username='******'))
        self.assertEqual(0, Thread.objects.all().count())
        new_thread_url = reverse('forum_add_thread', kwargs={
                                 'contest_id': self.contest.id,
                                 'category_id': self.cat.id})
        self.client.post(new_thread_url,
                         {'name': "Test Thread",
                          'content': "lorem ipsum lorem ipsum!"})
        self.assertEqual(0, Thread.objects.all().count())
        self.ban.delete()
        self.client.post(new_thread_url,
                         {'name': "Test Thread",
                          'content': "lorem ipsum lorem ipsum!"})
        thread = Thread.objects.all()[0]
        self.assertEqual("Test Thread", thread.name)
        self.assertEqual(1, thread.count_posts())
        self.assertEqual("lorem ipsum lorem ipsum!", thread.last_post.content)
        self.assertEqual(User.objects.get(username='******'),
                          thread.last_post.author)

    def test_edit_post(self):
        thr = Thread(category=self.cat, name='test_thread')
        thr.save()
        p = Post(thread=thr, content='This post will be reported.',
                 author=self.user, add_date=timezone.now())
        p.save()
        self.assertTrue(self.client.login(username='******'))
        edit_url = reverse('forum_post_edit', kwargs={'contest_id': self.contest.id,
                                                     'category_id': self.cat.id,
                                                     'thread_id': thr.id,
                                                     'post_id': p.id})
        self.assertEqual(403, self.client.get(edit_url).status_code)
        self.ban.delete()
        self.assertEqual(200, self.client.get(edit_url).status_code)

    def test_add_post(self):
        thr = Thread(category=self.cat, name='test_thread')
        thr.save()
        thread_url = reverse('forum_thread', kwargs={'contest_id': self.contest.id,
                                                     'category_id': self.cat.id,
                                                     'thread_id': thr.id})
        self.assertTrue(self.client.login(username='******'))
        self.assertFalse(Post.objects.filter(author=self.user).exists())
        response = self.client.get(thread_url)
        self.assertNotIsInstance(response.context['form'], PostForm)

        self.client.post(thread_url, {'content': "lorem ipsum?"})
        self.assertFalse(Post.objects.filter(author=self.user).exists())

        self.ban.delete()

        response = self.client.get(thread_url)
        self.assertIsInstance(response.context['form'], PostForm)

        self.client.post(thread_url, {'content': "lorem ipsum?"})
        self.assertTrue(Post.objects.filter(author=self.user).exists())
        post = Post.objects.filter(author=self.user)[0]
        self.assertEqual("lorem ipsum?", post.content)
        self.assertEqual(self.user, post.author)

    def test_ban_view_without_removing_reports(self):
        self.ban.delete()
        thr = Thread(category=self.cat, name='test_thread')
        thr.save()
        p0 = Post(thread=thr, content='test0', author=self.user2,
                  reported=True, reported_by=self.user)
        p0.save()
        p1 = Post(thread=thr, content='test1', author=self.user2,
                  reported=True, reported_by=self.user)
        p1.save()
        p2 = Post(thread=thr, content='test2', author=self.user2)
        p2.save()
        p3 = Post(thread=thr, content='test2', author=self.user,
                  reported=True, reported_by=self.user2)
        p3.save()

        def check_reports():
            p0.refresh_from_db()
            p1.refresh_from_db()
            p2.refresh_from_db()
            p3.refresh_from_db()
            return [p0.reported, p1.reported, p2.reported, p3.reported]

        self.assertEqual([True, True, False, True], check_reports())

        self.assertTrue(self.client.login(username='******'))
        self.assertFalse(Ban.objects.exists())

        ban_url = reverse('forum_user_ban', kwargs={'contest_id': self.contest.id,
                                                    'user_id': self.user.id})

        self.client.post(ban_url, {'reason': 'Abuse'})
        self.assertEqual(1, Ban.objects.count())
        ban = Ban.objects.all()[0]
        self.assertEqual(self.user, ban.user)
        self.assertEqual('test_admin', ban.admin.username)
        self.assertEqual('Abuse', ban.reason)
        self.assertEqual(self.contest.forum, ban.forum)
        self.assertEqual([True, True, False, True], check_reports())
        ban.delete()

        self.client.post(ban_url, {'reason': 'Abuse', 'delete_reports': True})
        self.assertEqual(1, Ban.objects.count())
        ban = Ban.objects.all()[0]
        self.assertEqual(self.user, ban.user)
        self.assertEqual('test_admin', ban.admin.username)
        self.assertEqual('Abuse', ban.reason)
        self.assertEqual(self.contest.forum, ban.forum)
        self.assertEqual([False, False, False, True], check_reports())
Ejemplo n.º 5
0
def can_interact_with_admins(request):
    if request.user.is_anonymous:
        return False
    is_banned = Ban.is_banned(request.contest.forum, request.user)
    return is_contest_admin(request) or not is_banned
Ejemplo n.º 6
0
def can_interact_with_users(request):
    if request.user.is_anonymous:
        return False
    is_banned = Ban.is_banned(request.contest.forum, request.user)
    is_locked = request.contest.forum.is_locked(request.timestamp)
    return is_contest_admin(request) or (not is_banned and not is_locked)
Ejemplo n.º 7
0
def can_interact_with_admins(request):
    if request.user.is_anonymous:
        return False
    is_banned = Ban.is_banned(request.contest.forum, request.user)
    return is_contest_admin(request) or not is_banned
Ejemplo n.º 8
0
def can_interact_with_users(request):
    if request.user.is_anonymous:
        return False
    is_banned = Ban.is_banned(request.contest.forum, request.user)
    is_locked = request.contest.forum.is_locked(request.timestamp)
    return is_contest_admin(request) or (not is_banned and not is_locked)