diff --git a/boards/static/images/banned.png b/boards/static/images/banned.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f5abf1435c62e2c9d37288d7afec5332a7dab9 GIT binary patch literal 33559 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 Qrp~BuPa#sx`!fkP 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 nk9^y<0^{J$;M%~fN)Y{jviC^2Ko

+

{% trans 'Your IP address has been banned. Contact the administrator' %}

{% endblock %} \ No newline at end of file diff --git a/boards/tests.py b/boards/tests.py --- a/boards/tests.py +++ b/boards/tests.py @@ -113,13 +113,18 @@ class BoardTests(TestCase): self.assertEqual(1, Post.objects.count(), msg='The validation passed ' 'where it should fail') + # Change posting delay so we don't have to wait for 30 seconds or more + old_posting_delay = settings.POSTING_DELAY # Wait fot the posting delay or we won't be able to post + settings.POSTING_DELAY = 1 time.sleep(settings.POSTING_DELAY + 1) response = client.post(THREAD_PAGE_ONE, {'text': TEST_TEXT, 'tags': valid_tags}) self.assertEqual(HTTP_CODE_REDIRECT, response.status_code, msg=u'Posting new message failed: got code ' + str(response.status_code)) + # Restore posting delay + settings.POSTING_DELAY = old_posting_delay self.assertEqual(2, Post.objects.count(), msg=u'No posts were created') @@ -127,8 +132,6 @@ class BoardTests(TestCase): # Restore captcha setting settings.ENABLE_CAPTCHA = captcha_enabled - # TODO This test fails for now. We must check for 404.html instead of - # code 404 def test_404(self): """Test receiving error 404 when opening a non-existent page""" @@ -149,9 +152,8 @@ class BoardTests(TestCase): response_not_existing = client.get(THREAD_PAGE + str( existing_post_id + 1) + '/') - response_not_existing.get_full_path() - self.assertEqual(HTTP_CODE_NOT_FOUND, - response_not_existing.status_code, + self.assertEqual('boards/404.html', + response_not_existing.templates[0].name, u'Not existing thread is opened') response_existing = client.get(TAG_PAGE + tag_name + '/') @@ -160,14 +162,14 @@ class BoardTests(TestCase): u'Cannot open existing tag') response_not_existing = client.get(TAG_PAGE + u'not_tag' + '/') - self.assertEqual(HTTP_CODE_NOT_FOUND, - response_not_existing.status_code, + self.assertEqual('boards/404.html', + response_not_existing.templates[0].name, u'Not existing tag is opened') reply_id = Post.objects.create_post('', TEST_TEXT, - parent_id=existing_post_id) + thread=Post.objects.all()[0]) response_not_existing = client.get(THREAD_PAGE + str( reply_id) + '/') - self.assertEqual(HTTP_CODE_NOT_FOUND, - response_not_existing.status_code, - u'Not existing thread is opened') + self.assertEqual('boards/404.html', + response_not_existing.templates[0].name, + u'Reply is opened as a thread') diff --git a/boards/views.py b/boards/views.py --- a/boards/views.py +++ b/boards/views.py @@ -82,9 +82,6 @@ def _new_post(request, form, thread_id=b tag, created = Tag.objects.get_or_create(name=tag_name) tags.append(tag) - # TODO Add a possibility to define a link image instead of an image file. - # If a link is given, download the image automatically. - op = None if thread_id == boards.models.NO_PARENT else \ get_object_or_404(Post, id=thread_id) post = Post.objects.create_post(title=title, text=text, ip=ip,