view antispam/tests/rate_limit_tests.py @ 661:15dbe0ccda95

Prevent exceptions when viewing downloads in the admin when the file doesn't exist on the filesystem. This is usually seen in development but can also happen in production if the file is missing.
author Brian Neal <bgneal@gmail.com>
date Tue, 14 May 2013 21:02:47 -0500
parents ee87ea74d46b
children
line wrap: on
line source
"""
Tests for the rate limiting function in the antispam application.

"""
from django.test import TestCase
from django.core.urlresolvers import reverse

from antispam.rate_limit import _make_key
from core.services import get_redis_connection


class RateLimitTestCase(TestCase):
    KEY = _make_key('127.0.0.1')

    def setUp(self):
        self.conn = get_redis_connection()
        self.conn.delete(self.KEY)

    def tearDown(self):
        self.conn.delete(self.KEY)

    def testRegistrationLockout(self):

        for i in range(1, 11):
            response = self.client.post(
                    reverse('accounts-register'),
                    {},
                    follow=True)

            if i < 10:
                self.assertEqual(response.status_code, 200)
                self.assertTemplateUsed(response, 'accounts/register.html')
            elif i >= 10:
                self.assertEqual(response.status_code, 403)
                self.assertTemplateUsed(response, 'antispam/blocked.html')

    def testLoginLockout(self):

        for i in range(1, 11):
            response = self.client.post(
                    reverse('accounts-login'),
                    {},
                    follow=True)

            if i < 10:
                self.assertEqual(response.status_code, 200)
                self.assertTemplateUsed(response, 'accounts/login.html')
            elif i >= 10:
                self.assertEqual(response.status_code, 403)
                self.assertTemplateUsed(response, 'antispam/blocked.html')

    def testHoneypotLockout(self):

        response = self.client.post(
                reverse('accounts-register'), {
                    'username': u'test_user',
                    'email': u'test_user@example.com',
                    'password1': u'password',
                    'password2': u'password',
                    'agree_age': u'on',
                    'agree_tos': u'on',
                    'agree_privacy': u'on',
                    'question1': u'101',
                    'question2': u'DsjkdE$',
                },
                follow=True)

        val = self.conn.get(self.KEY)
        self.assertEqual(val, '1000001')

        response = self.client.post(
                reverse('accounts-login'),
                {},
                follow=True)

        self.assertEqual(response.status_code, 403)
        self.assertTemplateUsed(response, 'antispam/blocked.html')