~ubuntuone-pqm-team/canonical-identity-provider/trunk

« back to all changes in this revision

Viewing changes to identityprovider/tests/test_captcha.py

  • Committer: Danny Tamez
  • Date: 2010-04-21 15:29:24 UTC
  • Revision ID: danny.tamez@canonical.com-20100421152924-lq1m92tstk2iz75a
Canonical SSO Provider (Open Source) - Initial Commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2010 Canonical Ltd.  This software is licensed under the
 
2
# GNU Affero General Public License version 3 (see the file LICENSE).
 
3
 
 
4
from urllib2 import HTTPError, URLError
 
5
from copy import deepcopy
 
6
from unittest import TestCase
 
7
 
 
8
from django.conf import settings
 
9
 
 
10
from identityprovider.models.captcha import Captcha
 
11
 
 
12
 
 
13
class CaptchaTestCase(TestCase):
 
14
 
 
15
    def setUp(self):
 
16
        # save Django settings, to be restored later (that's poking into Django
 
17
        # internals)
 
18
        self._settings = settings._target
 
19
        settings._target = deepcopy(self._settings)
 
20
 
 
21
    def tearDown(self):
 
22
        settings._target = self._settings
 
23
 
 
24
    def test_opener_is_created_during_init(self):
 
25
        Captcha.opener = None
 
26
 
 
27
        captcha = Captcha({}, 'test')
 
28
 
 
29
        self.assertTrue(Captcha.opener is not None)
 
30
 
 
31
    def test_opener_is_created_when_proxy_is_required(self):
 
32
        Captcha.opener = None
 
33
        settings.CAPTCHA_USE_PROXY = True
 
34
        settings.CAPTCHA_PROXIES = {}
 
35
 
 
36
        captcha = Captcha({}, 'test')
 
37
 
 
38
        self.assertTrue(Captcha.opener is not None)
 
39
 
 
40
    def test_open_properly_handles_all_expected_error_codes(self):
 
41
        handled_codes = [111, 113, 408, 500, 502, 503, 504]
 
42
 
 
43
        def mock_open(request):
 
44
            code = handled_codes.pop()
 
45
            if code < 200:
 
46
                raise URLError([code])
 
47
            else:
 
48
                raise HTTPError(None, code, None, None, None)
 
49
        Captcha._setup_opener()
 
50
        Captcha.opener.open = mock_open
 
51
 
 
52
        while handled_codes:
 
53
            response = Captcha._open(None, {})
 
54
            self.assertTrue(response.is_error)
 
55
 
 
56
    def test_new_returns_valid_captcha(self):
 
57
        """This test requires network connection."""
 
58
        captcha = Captcha.new({})
 
59
        self.assertTrue("recaptcha.net" in captcha.image_url)
 
60
 
 
61
    def test_verify_is_short_circuited_when_disabled_in_settings(self):
 
62
        settings.DISABLE_CAPTCHA_VERIFICATION = True
 
63
 
 
64
        captcha = Captcha({'REMOTE_ADDR': '127.0.0.1'}, 'test')
 
65
        verify_result = captcha.verify('solution')
 
66
 
 
67
        self.assertTrue(verify_result)
 
68
        self.assertTrue(captcha.response is None)
 
69
 
 
70
    def test_verify_fails_but_contacts_recaptcha(self):
 
71
        """Requires network connection"""
 
72
        settings.DISABLE_CAPTCHA_VERIFICATION = False
 
73
        captcha = Captcha.new({'REMOTE_ADDR': '127.0.0.1'})
 
74
 
 
75
        verify_result = captcha.verify('solution')
 
76
 
 
77
        self.assertFalse(verify_result)
 
78
        self.assertEquals(captcha.response.code, 200)
 
79
 
 
80
    def test_serialize(self):
 
81
        captcha = Captcha({}, 'id', 'image')
 
82
 
 
83
        self.assertEquals(captcha.serialize(),
 
84
                          {'captcha_id': 'id', 'image_url': 'image'})