--- a
+++ b/Allura/allura/tests/test_utils.py
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+import time
+import unittest
+
+import pylons
+from webob import Request
+
+from alluratest.controller import setup_unit_test
+
+from allura.lib import utils
+
+class TestAntispam(unittest.TestCase):
+
+ def setUp(self):
+ setup_unit_test()
+ pylons.request.remote_addr = '127.0.0.1'
+ self.a = utils.AntiSpam()
+
+ def test_generate_fields(self):
+ fields = '\n'.join(self.a.extra_fields())
+ assert 'name="timestamp"' in fields, fields
+ assert 'name="spinner"' in fields, fields
+ assert ('class="%s"' % self.a.honey_class) in fields, fields
+
+ def test_valid_submit(self):
+ form = dict(a='1', b='2')
+ r = Request.blank('/', POST=self._encrypt_form(**form))
+ validated = utils.AntiSpam.validate_request(r)
+ assert dict(a='1', b='2') == validated, validated
+
+ def test_invalid_old(self):
+ form = dict(a='1', b='2')
+ r = Request.blank('/', POST=self._encrypt_form(**form))
+ self.assertRaises(
+ ValueError,
+ utils.AntiSpam.validate_request,
+ r, now=time.time()+60*60+1)
+
+ def test_invalid_future(self):
+ form = dict(a='1', b='2')
+ r = Request.blank('/', POST=self._encrypt_form(**form))
+ self.assertRaises(
+ ValueError,
+ utils.AntiSpam.validate_request,
+ r, now=time.time()-10)
+
+ def test_invalid_spinner(self):
+ form = dict(a='1', b='2')
+ eform = self._encrypt_form(**form)
+ eform['spinner'] += 'a'
+ r = Request.blank('/', POST=eform)
+ self.assertRaises(ValueError, utils.AntiSpam.validate_request, r)
+
+ def test_invalid_honey(self):
+ form = dict(a='1', b='2', honey0='a')
+ eform = self._encrypt_form(**form)
+ r = Request.blank('/', POST=eform)
+ self.assertRaises(ValueError, utils.AntiSpam.validate_request, r)
+
+ def _encrypt_form(self, **kwargs):
+ encrypted_form = dict(
+ (self.a.enc(k), v) for k,v in kwargs.items())
+ encrypted_form.setdefault(self.a.enc('honey0'), '')
+ encrypted_form.setdefault(self.a.enc('honey1'), '')
+ encrypted_form['spinner'] = self.a.spinner_text
+ encrypted_form['timestamp'] = self.a.timestamp_text
+ return encrypted_form