# coding=utf-8 from django.utils.unittest import TestCase from django.test.client import Client import boards from boards.models import Post, Admin, Tag from neboard import settings TEST_TEXT = 'test text' NEW_THREAD_PAGE = '/' HTTP_CODE_REDIRECT = 302 class BoardTests(TestCase): def _create_post(self): return Post.objects.create_post(title='title', text='text') def test_post_add(self): post = self._create_post() self.assertIsNotNone(post) self.assertEqual(boards.models.NO_PARENT, post.parent) def test_delete_post(self): post = self._create_post() post_id = post.id Post.objects.delete_post(post) self.assertFalse(Post.objects.exists(post_id)) def test_delete_posts_by_ip(self): post = self._create_post() post_id = post.id Post.objects.delete_posts_by_ip('0.0.0.0') self.assertFalse(Post.objects.exists(post_id)) # Authentication tests def _create_test_user(self): admin = Admin(name='test_username12313584353165', password='test_userpassword135135512') admin.save() return admin def test_admin_login(self): client = Client() self.assertFalse('admin' in client.session) admin = self._create_test_user() response = client.post('/login', {'name': admin.name, 'password': admin.password}) # it means that login passed and user are redirected to another page self.assertEqual(302, response.status_code) self.assertTrue('admin' in client.session) self.assertTrue(client.session['admin']) admin.delete() wrong_name = 'sd2f1s3d21fs3d21f' wrong_password = 'sd2f1s3d21fs3d21fsdfsd' client.post('/login', {'name': wrong_name, 'password': wrong_password}) self.assertFalse(client.session['admin']) def test_admin_logout(self): client = Client() self.assertFalse('admin' in client.session) admin = self._create_test_user() client.post('/login', {'name': admin.name, 'password': admin.password}) self.assertTrue(client.session['admin']) client.get('/logout') self.assertFalse(client.session['admin']) admin.delete() def test_get_thread(self): opening_post = self._create_post() op_id = opening_post.id for i in range(0, 2): Post.objects.create_post('title', 'text', parent_id=op_id) thread = Post.objects.get_thread(op_id) self.assertEqual(3, len(thread)) def test_create_post_with_tag(self): tag = Tag.objects.create(name='test_tag') post = Post.objects.create_post(title='title', text='text', tags=[tag]) self.assertIsNotNone(post) def test_thread_max_count(self): for i in range(settings.MAX_THREAD_COUNT + 1): self._create_post() self.assertEqual(settings.MAX_THREAD_COUNT, len(Post.objects.get_threads())) def test_get(self): """Test if the get computes properly""" post = self._create_post() self.assertTrue(post.is_get()) def test_pages(self): """Test that the thread list is properly split into pages""" for i in range(settings.MAX_THREAD_COUNT): self._create_post() all_threads = Post.objects.get_threads() posts_in_second_page = Post.objects.get_threads(page=1) first_post = posts_in_second_page[0] self.assertEqual(all_threads[settings.THREADS_PER_PAGE].id, first_post.id) def test_post_validation(self): """Test the validation of the post form""" Post.objects.all().delete() client = Client() valid_tags = u'tag1 tag_2 тег_3' invalid_tags = u'$%_356 ---' response = client.post(NEW_THREAD_PAGE, {'title': 'test title', 'text': TEST_TEXT, 'tags': valid_tags}) self.assertEqual(response.status_code, HTTP_CODE_REDIRECT, msg='Posting new message failed: got code ' + str(response.status_code)) self.assertEqual(1, Post.objects.count(), msg='No posts were created') response = client.post(NEW_THREAD_PAGE, {'text': TEST_TEXT, 'tags': invalid_tags}) self.assertEqual(1, Post.objects.count(), msg='The validation passed ' 'where it should fail')