From: David G. <svn...@pl...> - 2010-11-29 22:09:36
|
Author: davisagli Date: Mon Nov 29 22:08:12 2010 New Revision: 227801 Added: pfg.drafts/trunk/pfg/drafts/tests/__init__.py Removed: pfg.drafts/trunk/pfg/drafts/tests/seleniumtests/ Modified: pfg.drafts/trunk/pfg/drafts/browser.py pfg.drafts/trunk/pfg/drafts/configure.zcml pfg.drafts/trunk/pfg/drafts/skins/pfg_drafts/pfg_draft_macros.pt pfg.drafts/trunk/pfg/drafts/tests/tests.py pfg.drafts/trunk/setup.py Log: selenium tests Modified: pfg.drafts/trunk/pfg/drafts/browser.py ============================================================================== --- pfg.drafts/trunk/pfg/drafts/browser.py (original) +++ pfg.drafts/trunk/pfg/drafts/browser.py Mon Nov 29 22:08:12 2010 @@ -15,9 +15,8 @@ form = catalog.unrestrictedSearchResults(UID=uid)[0].getObject() if 'draft-stored' in form.objectIds(): # if there's a custom "draft stored" message, redirect to it - self.request.response.redirect(form.absolute_url + '/fg-draft-stored') + self.request.response.redirect(form.absolute_url + '/draft-stored') else: - # otherwise show a simple status message on the portal root + # otherwise show a simple status message on the form IStatusMessage(self.request).addStatusMessage('Draft saved.') - portal_url = getToolByName(self.context, 'portal_url')() - self.request.response.redirect(portal_url) \ No newline at end of file + self.request.response.redirect(form.absolute_url()) \ No newline at end of file Modified: pfg.drafts/trunk/pfg/drafts/configure.zcml ============================================================================== --- pfg.drafts/trunk/pfg/drafts/configure.zcml (original) +++ pfg.drafts/trunk/pfg/drafts/configure.zcml Mon Nov 29 22:08:12 2010 @@ -6,6 +6,8 @@ xmlns:i18n="http://namespaces.zope.org/i18n" i18n_domain="pfg.drafts"> + <include package="Products.PloneFormGen"/> + <gs:registerProfile name="default" title="PloneFormGen Draft Support" Modified: pfg.drafts/trunk/pfg/drafts/skins/pfg_drafts/pfg_draft_macros.pt ============================================================================== --- pfg.drafts/trunk/pfg/drafts/skins/pfg_drafts/pfg_draft_macros.pt (original) +++ pfg.drafts/trunk/pfg/drafts/skins/pfg_drafts/pfg_draft_macros.pt Mon Nov 29 22:08:12 2010 @@ -61,7 +61,7 @@ href="#">click here</a>. </p> <p tal:condition="isAnon">To retrieve a previously saved form, - <a tal:attributes="href string:${context/absolute_url}/require_login">log in</a> + <a id="pfg-draft-login" tal:attributes="href string:${context/absolute_url}/require_login">log in</a> to continue. </p> </dd> Added: pfg.drafts/trunk/pfg/drafts/tests/__init__.py ============================================================================== Modified: pfg.drafts/trunk/pfg/drafts/tests/tests.py ============================================================================== --- pfg.drafts/trunk/pfg/drafts/tests/tests.py (original) +++ pfg.drafts/trunk/pfg/drafts/tests/tests.py Mon Nov 29 22:08:12 2010 @@ -1,55 +1,105 @@ -import unittest +import os +import transaction +from time import sleep -#from zope.testing import doctestunit -#from zope.component import testing from Testing import ZopeTestCase as ztc +from Testing.ZopeTestCase.utils import startZServer -from Products.Five import fiveconfigure +from Products.Five import fiveconfigure, zcml from Products.PloneTestCase import PloneTestCase as ptc -from Products.PloneTestCase.layer import PloneSite -ptc.setupPloneSite() +from Products.PloneTestCase.layer import PloneSite, onsetup -import pfg.drafts +from zope.component import getAdapter +from plone.app.controlpanel.security import ISecuritySchema - -class TestCase(ptc.PloneTestCase): - - class layer(PloneSite): - - @classmethod - def setUp(cls): - fiveconfigure.debug_mode = True - ztc.installPackage(pfg.drafts) - fiveconfigure.debug_mode = False - - @classmethod - def tearDown(cls): - pass - - -def test_suite(): - return unittest.TestSuite([ - - # Unit tests - #doctestunit.DocFileSuite( - # 'README.txt', package='pfg.drafts', - # setUp=testing.setUp, tearDown=testing.tearDown), - - #doctestunit.DocTestSuite( - # module='pfg.drafts.mymodule', - # setUp=testing.setUp, tearDown=testing.tearDown), - - - # Integration tests that use PloneTestCase - #ztc.ZopeDocFileSuite( - # 'README.txt', package='pfg.drafts', - # test_class=TestCase), - - #ztc.FunctionalDocFileSuite( - # 'browser.txt', package='pfg.drafts', - # test_class=TestCase), - - ]) - -if __name__ == '__main__': - unittest.main(defaultTest='test_suite') +@onsetup +def load_zcml(): + fiveconfigure.debug_mode = True + import pfg.drafts + zcml.load_config('configure.zcml', pfg.drafts) + ztc.installPackage(pfg.drafts) + fiveconfigure.debug_mode = False + +ztc.installProduct('PloneFormGen') +load_zcml() +ptc.setupPloneSite(extension_profiles=['pfg.drafts:default']) + +class SeleniumLayer(PloneSite): + + @classmethod + def setUp(self): + # Start up Selenium + driver = os.environ.get('SELENIUM_DRIVER', '') or 'firefox' + webdriver = __import__( + 'selenium.%s.webdriver' % driver, fromlist=['WebDriver']) + self.selenium = webdriver.WebDriver('webdriver') + + host, port = startZServer() + self.base_url = 'http://%s:%s/plone' % (host, port) + + @classmethod + def tearDown(self): + self.selenium.quit() + del self.selenium + +class SeleniumTestCase(ptc.PloneTestCase): + layer = SeleniumLayer + + def afterSetUp(self): + # add a form + self.setRoles(['Manager']) + form = self.portal[self.portal.invokeFactory('FormFolder', 'testform')] + form.layout = 'pfg_draft_view' + self.portal.portal_workflow.doActionFor(form, 'publish') + transaction.commit() + + # enable registration + security_settings = getAdapter(self.portal, ISecuritySchema) + security_settings.enable_self_reg = True + security_settings.enable_user_pwd_choice = True + + self.base_url = self.layer.base_url + + def open(self, url): + transaction.commit() + self.layer.selenium.get(url) + + def test_save_draft(self): + sel = self.layer.selenium + + # start filling the form + self.open(self.base_url + '/testform') + sel.find_element_by_name('replyto').send_keys('te...@ex...') + + # save draft + sel.find_element_by_link_text('register now').click() + sleep(1) + sel.find_element_by_name('form.fullname').send_keys('Test') + sel.find_element_by_name('form.username').send_keys('testuser') + sel.find_element_by_name('form.email').send_keys('te...@ex...') + sel.find_element_by_name('form.password').send_keys('password') + sel.find_element_by_name('form.password_ctl').send_keys('password') + sel.find_element_by_name('form.actions.register').click() + sleep(1) + sel.find_element_by_xpath('//input[@value="Log in"]').click() + sleep(10) + + # At this point the draft should have been saved. + self.failUnless('Draft saved.' in sel.get_page_source()) + self.failUnless(sel.get_current_url().endswith('/testform')) + + # Now return to the form and make sure the saved value is present. + self.open(self.base_url + '/testform') + value = sel.find_element_by_name('replyto').get_attribute('value') + self.assertEqual('te...@ex...', value) + + # Now log out and make sure we can return to access the form. + self.open(self.base_url + '/logout') + self.open(self.base_url + '/testform') + sel.find_element_by_id('pfg-draft-login').click() + sel.find_element_by_name('__ac_name').send_keys('testuser') + sel.find_element_by_name('__ac_password').send_keys('password') + sel.find_element_by_xpath('//input[@value="Log in"]').click() + self.failUnless(sel.get_current_url().endswith('/testform')) + value = sel.find_element_by_name('replyto').get_attribute('value') + self.assertEqual('te...@ex...', value) Modified: pfg.drafts/trunk/setup.py ============================================================================== --- pfg.drafts/trunk/setup.py (original) +++ pfg.drafts/trunk/setup.py Mon Nov 29 22:08:12 2010 @@ -25,8 +25,12 @@ zip_safe=False, install_requires=[ 'setuptools', + 'Products.PloneFormGen', # -*- Extra requirements: -*- ], + extras_require={ + 'test': ['selenium>=2.0a5'], + }, entry_points=""" # -*- Entry points: -*- |