Changeset 2077 in products


Ignore:
Timestamp:
Apr 7, 2010 3:38:19 PM (14 years ago)
Author:
mylan
Message:

#185: Add tests for captcha validator

File:
1 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.z3cform.captcha/branches/captchas-refactoring/quintagroup/z3cform/captcha/tests.py

    r2076 r2077  
    1919from Products.PloneTestCase import PloneTestCase as ptc 
    2020 
     21from quintagroup.captcha.core.utils import * 
     22from quintagroup.captcha.core.tests.base import testPatch 
     23from quintagroup.captcha.core.tests.testWidget import addTestLayer 
     24 
    2125from quintagroup.z3cform.captcha import Captcha 
    2226from quintagroup.z3cform.captcha import CaptchaWidget 
    23 from quintagroup.z3cform.captcha.widget import CaptchaWidgetFactory 
     27from quintagroup.z3cform.captcha import CaptchaWidgetFactory 
     28from quintagroup.z3cform.captcha.validator import CaptchaValidator 
    2429 
    2530@onsetup 
     
    4348 
    4449    def afterSetUp(self): 
    45         super(TestRegistrations, self).afterSetUp() 
    4650        self.request = self.app.REQUEST 
    4751        alsoProvides(self.request, IFormLayer) 
     
    7781 
    7882    def afterSetUp(self): 
    79         super(TestCaptchaWidget, self).afterSetUp() 
    8083        self.request = self.app.REQUEST 
    8184        alsoProvides(self.request, IFormLayer) 
     
    109112         
    110113 
     114class TestCaptchaValidator(ptc.PloneTestCase): 
     115 
     116    def afterSetUp(self): 
     117        self.request = self.app.REQUEST 
     118        alsoProvides(self.request, IFormLayer) 
     119        # prepare context 
     120        self.loginAsPortalOwner() 
     121        testPatch() 
     122        addTestLayer(self) 
     123        self.captcha_key = self.portal.captcha_key 
     124        # prepare captcha data 
     125        self.hashkey = self.portal.getCaptcha() 
     126        self.request.form['hashkey'] = self.hashkey 
     127        # prepare validator 
     128        cform = form.BaseForm(self.portal, self.request) 
     129        cform.prefix = "" 
     130        cwidget = CaptchaWidget(self.request) 
     131        cwidget.form = cform 
     132        self.validator = CaptchaValidator(self.portal, self.request, None, None, cwidget) 
     133 
     134    def testSubmitRightCaptcha(self): 
     135        decrypted = decrypt(self.captcha_key, self.hashkey) 
     136        key = getWord(int(parseKey(decrypted)['key'])-1 ) 
     137        try: 
     138            res = self.validator.validate(key) 
     139        except ConversionError, e: 
     140            self.fail("Rised unexpected %s error on right captcha submit" % e) 
     141 
     142    def testSubmitWrongCaptcha(self): 
     143        try: 
     144            res = self.validator.validate("wrong key") 
     145        except ValueError, e: 
     146            self.assertEqual(str(e), u'Please re-enter validation code.') 
     147        else: 
     148            self.fail("No ValueError rised on wrong captcha key submit") 
     149 
     150    def testSubmitRightCaptchaTwice(self): 
     151        decrypted = decrypt(self.captcha_key, self.hashkey) 
     152        key = getWord(int(parseKey(decrypted)['key'])-1 ) 
     153        self.validator.validate(key) 
     154        try: 
     155            res = self.validator.validate(key) 
     156        except ValueError, e: 
     157            self.assertEqual(str(e), u'Please re-enter validation code.') 
     158        else: 
     159            self.fail("No ValueError rised on right captcha key " \ 
     160                      "submitting twice") 
     161 
     162 
    111163def test_suite(): 
    112164    suite = unittest.TestSuite() 
    113165    suite.addTest(unittest.makeSuite(TestRegistrations)) 
    114166    suite.addTest(unittest.makeSuite(TestCaptchaWidget)) 
     167    suite.addTest(unittest.makeSuite(TestCaptchaValidator)) 
    115168    return suite 
Note: See TracChangeset for help on using the changeset viewer.