def test_include_token_in_form_if_token_was_present_in_request(self):
     controller = TracCaptchaController(self.env)
     valid_token = CryptoBox(controller.token_key()).generate_token()
     req = self.post_request('/newticket',
                             field_summary='Foo',
                             __captcha_token=valid_token,
                             preview='Preview')
     response = self.simulate_request(req)
     self.assert_not_none(self.input_with_captcha_token(response))
     self.assert_false(self.is_fake_captcha_visible(response))
Пример #2
0
class TracCaptchaControllerTest(CaptchaTest):
    def setUp(self):
        self.super()
        self.controller = TracCaptchaController(self.env)
        self.assert_false(self.has_permission('anonymous', 'CAPTCHA_SKIP'))

    def captcha_token(self):
        return CryptoBox(self.controller.token_key()).generate_token()

    def test_token_key_from_configuration_always_returned_as_byte_string(self):
        # all crypto algorithms only work on unicode instances, even if they
        # only contain ASCII characters
        self.assert_true(isinstance(self.controller.token_key(), str))

    def test_can_generate_token_key_if_not_set(self):
        self.assert_equals('', self.env.config.get('trac-captcha',
                                                   'token_key'))
        self.assert_not_none(self.controller.token_key())

        stored_token = self.env.config.get('trac-captcha', 'token_key')
        self.assert_equals(self.controller.token_key(), stored_token)

    def test_returns_token_key_if_stored_in_config(self):
        self.env.config.set('trac-captcha', 'token_key', 'foobar')

        self.assert_equals('foobar', self.controller.token_key())

    def test_skip_captcha_if_valid_token_found(self):
        self.env.config.set('trac_captcha', 'token_key', 'foobar')
        req = self.request('/', __captcha_token=self.captcha_token())
        self.assert_none(None, req.remote_user)

        self.assert_true(self.controller.should_skip_captcha(req))

    def test_ignore_invalid_tokens(self):
        req = self.request('/', __captcha_token='foobar')
        self.assert_none(None, req.remote_user)

        self.assert_false(self.controller.should_skip_captcha(req))