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