2022-07-12 18:30:16 -07:00
|
|
|
from datetime import timedelta
|
|
|
|
|
from django.core.exceptions import ValidationError
|
2022-05-07 16:43:32 -07:00
|
|
|
from django.test import TestCase
|
2022-07-12 18:30:16 -07:00
|
|
|
from board.forms import PostForm, ReplyForm
|
2022-05-07 16:43:32 -07:00
|
|
|
from board.models import Board, Post
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BumpTestCase(TestCase):
|
|
|
|
|
def setUp(self):
|
2022-07-12 18:30:16 -07:00
|
|
|
Board.objects.create(
|
|
|
|
|
url="test", name="test", post_cooldown=timedelta(seconds=0)
|
|
|
|
|
)
|
2022-05-07 16:43:32 -07:00
|
|
|
|
|
|
|
|
def test_bumping(self):
|
|
|
|
|
board = Board.objects.get(url="test")
|
|
|
|
|
self.assertEquals(board.threads.count(), 0)
|
|
|
|
|
post1 = Post.objects.create(board=board, text="test 1", ip="127.0.0.1")
|
|
|
|
|
post2 = Post.objects.create(board=board, text="test 2", ip="127.0.0.1")
|
|
|
|
|
post3 = Post.objects.create(board=board, text="test 3", ip="127.0.0.1")
|
|
|
|
|
post4 = Post.objects.create(board=board, text="test 4", ip="127.0.0.1")
|
|
|
|
|
|
|
|
|
|
self.assertEquals(
|
|
|
|
|
list(board.threads.order_by("-last_bump")), [post4, post3, post2, post1]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
Post.objects.create(board=board, text="bump", ip="127.0.0.1", op=post3)
|
|
|
|
|
self.assertEquals(
|
|
|
|
|
list(board.threads.order_by("-last_bump")), [post3, post4, post2, post1]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
Post.objects.create(board=board, text="bump", ip="127.0.0.1", op=post2)
|
|
|
|
|
self.assertEquals(
|
|
|
|
|
list(board.threads.order_by("-last_bump")), [post2, post3, post4, post1]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
Post.objects.create(board=board, text="bump", ip="127.0.0.1", op=post1)
|
|
|
|
|
self.assertEquals(
|
|
|
|
|
list(board.threads.order_by("-last_bump")), [post1, post2, post3, post4]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def test_no_bumping(self):
|
|
|
|
|
board = Board.objects.get(url="test")
|
|
|
|
|
self.assertEquals(board.threads.count(), 0)
|
|
|
|
|
|
|
|
|
|
board = Board.objects.get(url="test")
|
|
|
|
|
self.assertEquals(board.threads.count(), 0)
|
|
|
|
|
post1 = Post.objects.create(board=board, text="test 1", ip="127.0.0.1")
|
|
|
|
|
post2 = Post.objects.create(board=board, text="test 2", ip="127.0.0.1")
|
|
|
|
|
post3 = Post.objects.create(board=board, text="test 3", ip="127.0.0.1")
|
|
|
|
|
post4 = Post.objects.create(board=board, text="test 4", ip="127.0.0.1")
|
|
|
|
|
|
|
|
|
|
self.assertEquals(
|
|
|
|
|
list(board.threads.order_by("-last_bump")), [post4, post3, post2, post1]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
Post.objects.create(
|
|
|
|
|
board=board, text="bump", ip="127.0.0.1", op=post3, bump=False
|
|
|
|
|
)
|
|
|
|
|
self.assertEquals(
|
|
|
|
|
list(board.threads.order_by("-last_bump")), [post4, post3, post2, post1]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# thread that has been sunk
|
|
|
|
|
post2.bump = False
|
|
|
|
|
Post.objects.create(
|
|
|
|
|
board=board, text="bump", ip="127.0.0.1", op=post2, bump=True
|
|
|
|
|
)
|
|
|
|
|
self.assertEquals(
|
|
|
|
|
list(board.threads.order_by("-last_bump")), [post4, post3, post2, post1]
|
|
|
|
|
)
|
2022-07-12 18:30:16 -07:00
|
|
|
|
|
|
|
|
def test_thread_sticky(self):
|
|
|
|
|
board = Board.objects.get(url="test")
|
|
|
|
|
self.assertEquals(board.threads.count(), 0)
|
|
|
|
|
|
|
|
|
|
board = Board.objects.get(url="test")
|
|
|
|
|
self.assertEquals(board.threads.count(), 0)
|
|
|
|
|
post1 = Post.objects.create(
|
|
|
|
|
board=board, text="test 1", ip="127.0.0.1", sticky=True
|
|
|
|
|
)
|
|
|
|
|
post2 = Post.objects.create(board=board, text="test 2", ip="127.0.0.1")
|
|
|
|
|
post3 = Post.objects.create(board=board, text="test 3", ip="127.0.0.1")
|
|
|
|
|
post4 = Post.objects.create(board=board, text="test 4", ip="127.0.0.1")
|
|
|
|
|
|
|
|
|
|
self.assertEquals(
|
|
|
|
|
list(board.threads.order_by("-sticky", "-last_bump")),
|
|
|
|
|
[post1, post4, post3, post2],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
Post.objects.create(board=board, text="bump", ip="127.0.0.1", op=post3)
|
|
|
|
|
self.assertEquals(
|
|
|
|
|
list(board.threads.order_by("-sticky", "-last_bump")),
|
|
|
|
|
[post1, post3, post4, post2],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def test_thread_lock(self):
|
|
|
|
|
board = Board.objects.get(url="test")
|
|
|
|
|
op = Post.objects.create(board=board, text="test 1", ip="127.0.0.1", lock=True)
|
|
|
|
|
reply = Post(board=board, text="reply 1", op=op, ip="127.0.0.1")
|
|
|
|
|
self.assertRaises(ValidationError, reply.full_clean)
|
|
|
|
|
|
|
|
|
|
# Also, make sure that thread locks work after new posts are made
|
|
|
|
|
op = Post.objects.create(board=board, text="test 1", ip="127.0.0.1")
|
|
|
|
|
reply1 = Post(board=board, text="reply 1", op=op, ip="127.0.0.1")
|
|
|
|
|
reply1.full_clean() # should not raise
|
|
|
|
|
op.lock = True
|
|
|
|
|
reply2 = Post(board=board, text="reply 2", op=op, ip="127.0.0.2")
|
|
|
|
|
self.assertRaises(ValidationError, reply2.full_clean)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BoardReadonlyTestCase(TestCase):
|
|
|
|
|
def setUp(self):
|
|
|
|
|
Board.objects.create(
|
|
|
|
|
url="test", name="test", post_cooldown=timedelta(seconds=0), readonly=True
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def test_board_readonly(self):
|
|
|
|
|
board = Board.objects.get(url="test")
|
|
|
|
|
op = Post(board=board, text="test 1", ip="127.0.0.1")
|
|
|
|
|
self.assertRaises(ValidationError, op.full_clean)
|