コード例 #1
0
 def setUp(self):
     self.field = ReCAPTCHA(
         sitekey='my-sitekey',
         secretkey='my-secretkey',
         timeout=3,
         pass_on_error=False,
         widget=widgets.ReCAPTCHA,
     )
コード例 #2
0
class ContactoForm(forms.Form):
    nombre = forms.CharField()
    correo = forms.EmailField()
    ubicacion = forms.ModelChoiceField(queryset=Ubicacion.objects.all(),
                                       empty_label='Ubicación')
    mensaje = forms.CharField(widget=forms.Textarea({'rows': 6}))
    spam_honeypot_field = HoneypotField()
    captcha = ReCAPTCHA()
コード例 #3
0
    def test_field_defaults(self, settings):
        settings.RECAPTCHA_SITEKEY = 'sitekey-from-settings'
        settings.RECAPTCHA_SECRETKEY = 'secretkey-from-settings'
        settings.RECAPTCHA_WIDGET = 'antispam.captcha.widgets.InvisibleReCAPTCHA'
        settings.RECAPTCHA_TIMEOUT = 15
        settings.RECAPTCHA_PASS_ON_ERROR = True

        field = ReCAPTCHA()

        self.assertEqual('sitekey-from-settings', field.sitekey)
        self.assertEqual('secretkey-from-settings', field.secretkey)

        self.assertIsInstance(field.widget, widgets.InvisibleReCAPTCHA)
        self.assertEqual(field.sitekey, field.widget.sitekey)

        self.assertEqual(15, field.timeout)
        self.assertEqual(True, field.pass_on_error)
コード例 #4
0
class ContactoRecursosHumanosForm(forms.Form):
    nombre = forms.CharField()
    correo = forms.EmailField()
    ubicacion = forms.ModelChoiceField(queryset=Ubicacion.objects.all(),
                                       empty_label='Ubicación')
    mensaje = forms.CharField(widget=forms.Textarea)
    departamento = forms.ChoiceField()
    archivo = forms.FileField()
    spam_honeypot_field = HoneypotField()
    captcha = ReCAPTCHA()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        choices = [("", "Departamento")]

        for choice in kwargs['initial']['departamento']:
            choices += [(choice.id, choice.nombre)]

        self.fields["departamento"].choices = choices
コード例 #5
0
class ReCAPTCHATests(TestCase):
    def setUp(self):
        self.field = ReCAPTCHA(
            sitekey='my-sitekey',
            secretkey='my-secretkey',
            timeout=3,
            pass_on_error=False,
            widget=widgets.ReCAPTCHA,
        )

    def _get_response(self, json_data):
        resp = Response()
        resp.status_code = 200
        resp._content = json.dumps(json_data).encode('utf-8')
        return resp

    @patch('antispam.captcha.forms.settings')
    def test_field_defaults(self, settings):
        settings.RECAPTCHA_SITEKEY = 'sitekey-from-settings'
        settings.RECAPTCHA_SECRETKEY = 'secretkey-from-settings'
        settings.RECAPTCHA_WIDGET = 'antispam.captcha.widgets.InvisibleReCAPTCHA'
        settings.RECAPTCHA_TIMEOUT = 15
        settings.RECAPTCHA_PASS_ON_ERROR = True

        field = ReCAPTCHA()

        self.assertEqual('sitekey-from-settings', field.sitekey)
        self.assertEqual('secretkey-from-settings', field.secretkey)

        self.assertIsInstance(field.widget, widgets.InvisibleReCAPTCHA)
        self.assertEqual(field.sitekey, field.widget.sitekey)

        self.assertEqual(15, field.timeout)
        self.assertEqual(True, field.pass_on_error)

    @patch('antispam.captcha.forms.requests')
    def test_recaptcha_server_connection_error(self, requests):
        requests.post.side_effect = ConnectionError()

        with self.assertRaises(ValidationError) as e:
            self.field.validate('1234')

        self.assertEqual('captcha-error', e.exception.code)

    @patch('antispam.captcha.forms.requests')
    def test_recaptcha_internal_server_error(self, requests):
        resp = self._get_response({})
        resp.status_code = 500
        requests.post.return_value = resp

        with self.assertRaises(ValidationError) as e:
            self.field.validate('1234')

        self.assertEqual('captcha-error', e.exception.code)

    @patch('antispam.captcha.forms.requests')
    def test_recaptcha_validation_ok(self, requests):
        requests.post.return_value = self._get_response({'success': True})

        self.field.validate('1234')
        self.assertTrue(True)

    @patch('antispam.captcha.forms.requests')
    def test_recaptcha_validation_failed(self, requests):
        requests.post.return_value = self._get_response(
            {'success': False, 'error-codes': ['invalid-input-response']})

        with self.assertRaises(ValidationError) as e:
            self.field.validate('1234')

        self.assertEqual('captcha-invalid', e.exception.code)

    @patch('antispam.captcha.forms.requests')
    def test_recaptcha_validation_unexpected_error(self, requests):
        requests.post.return_value = self._get_response(
            {'success': False, 'error-codes': ['bad-request']})

        with self.assertRaises(ValidationError) as e:
            self.field.validate('1234')

        self.assertEqual('captcha-error', e.exception.code)

    @patch('antispam.captcha.forms.requests')
    def test_recaptcha_pass_on_error_request_error(self, requests):
        self.field.pass_on_error = True

        requests.post.side_effect = ConnectionError()

        self.field.validate('1234')
        self.assertTrue(True)

    @patch('antispam.captcha.forms.requests')
    def test_recaptcha_pass_on_error_unexpected_error(self, requests):
        self.field.pass_on_error = True

        requests.post.return_value = self._get_response(
            {'success': False, 'error-codes': ['bad-request']})

        self.field.validate('1234')
        self.assertTrue(True)