File size: 2,226 Bytes
75ba54e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import unittest
from app import app, db, Board, Post, BannedIP, prune_board

class GhostBoardTestCase(unittest.TestCase):
    def setUp(self):
        app.config['TESTING'] = True
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
        app.config['WTF_CSRF_ENABLED'] = False
        self.app = app.test_client()
        with app.app_context():
            db.create_all()
            b = Board(slug='tst', name='Test Board', description='Testing')
            db.session.add(b)
            db.session.commit()

    def tearDown(self):
        with app.app_context():
            db.session.remove()
            db.drop_all()

    def test_board_exists(self):
        response = self.app.get('/tst/')
        self.assertEqual(response.status_code, 200)
        self.assertIn(b'Test Board', response.data)

    def test_create_thread(self):
        with app.app_context():
            # Mock form data
            response = self.app.post('/tst/', data=dict(
                content='Test Thread Content'
            ), follow_redirects=True)
            self.assertEqual(response.status_code, 200)
            self.assertIn(b'Test Thread Content', response.data)
            
            post = Post.query.first()
            self.assertIsNotNone(post)
            self.assertIsNone(post.thread_id)

    def test_pruning(self):
        with app.app_context():
            board = Board.query.filter_by(slug='tst').first()
            # Create 101 threads
            for i in range(101):
                p = Post(board_id=board.id, content=f'Thread {i}')
                db.session.add(p)
            db.session.commit()
            
            self.assertEqual(Post.query.count(), 101)
            prune_board(board.id)
            self.assertEqual(Post.query.count(), 100)

    def test_ban_check(self):
        with app.app_context():
            banned = BannedIP(ip_address='127.0.0.1', reason='Test Ban')
            db.session.add(banned)
            db.session.commit()
            
            response = self.app.post('/tst/', data=dict(
                content='Should fail'
            ))
            self.assertEqual(response.status_code, 403)

if __name__ == '__main__':
    unittest.main()