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 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
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
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())
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
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)