def testInvalidDateDoesNotBreakRendering(self): import datetime from euphorie.content.tests.utils import BASIC_SURVEY from z3c.saconfig import Session from euphorie.client import model # Test for http://code.simplon.biz/tracker/tno-euphorie/ticket/150 self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) browser = Browser() survey_url = self.portal.client.nl["ict"]["software-development"]\ .absolute_url() browser.open(survey_url) registerUserInClient(browser) # Create a new survey session browser.getControl(name="title:utf8:ustring").value = \ u"Sessiøn".encode("utf-8") browser.getControl(name="next").click() # Start the survey browser.getForm().submit() browser.getLink("Start Risk Identification").click() # Update the risk risk = Session.query(model.Risk).first() risk.identification = "no" risk.action_plans.append(model.ActionPlan( action_plan=u"Do something awesome", planning_start=datetime.date(1, 2, 3))) # Render the report browser.handleErrors = False browser.open("http://nohost/plone/client/nl/ict/" "software-development/report/view")
def testUnicodeReportFilename(self): from euphorie.content.tests.utils import BASIC_SURVEY # Test for http://code.simplon.biz/tracker/euphorie/ticket/156 self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) browser = Browser() survey_url = self.portal.client.nl["ict"]["software-development"]\ .absolute_url() browser.open(survey_url) registerUserInClient(browser) # Create a new survey session browser.getControl(name="title:utf8:ustring").value = \ u"Sessiøn".encode("utf-8") browser.getControl(name="next").click() # Start the survey browser.getForm().submit() browser.getLink("Start Risk Identification").click() # Force creation of the company data browser.open("%s/report/company" % survey_url) # Download the report browser.handleErrors = False browser.open("%s/report/download" % survey_url) self.assertEqual(browser.headers.type, "application/rtf") self.assertEqual(browser.headers.get("Content-Disposition"), 'attachment; filename="Action plan Sessi\xc3\xb8n.rtf"')
class TestCase(ptc.FunctionalTestCase): """ We use this base class for all the tests in this package. If necessary, we can put common utility or setup code in here. This applies to unit test cases. """ _configure_portal = False def beforeTearDown(self): pass def afterSetUp(self): here = abspath(dirname(__file__)) url = urllib.pathname2url(here) self.testsite = 'file://%s/test_staticsite' % url self.portal.error_log._ignored_exceptions = () self.portal.acl_users.portal_role_manager.updateRolesList() self.portal.acl_users._doAddUser('manager', 'pass', ('Manager', ), []) self.login('manager') from Products.Five.testbrowser import Browser self.browser = Browser() # self.setRoles(('Manager',)) self.browser.open(self.portal.absolute_url() + '/login_form') self.browser.getControl(name='__ac_name').value = 'manager' self.browser.getControl(name='__ac_password').value = 'pass' self.browser.getControl(name='submit').click() self.browser.open(self.portal.absolute_url())
class TestCase(ptc.FunctionalTestCase): """ We use this base class for all the tests in this package. If necessary, we can put common utility or setup code in here. This applies to unit test cases. """ _configure_portal = False def beforeTearDown(self): pass def afterSetUp(self): here = abspath(dirname(__file__)) url = urllib.pathname2url(here) self.testsite = 'file://%s/test_staticsite' % url self.portal.error_log._ignored_exceptions = () self.portal.acl_users.portal_role_manager.updateRolesList() self.portal.acl_users._doAddUser('manager', 'pass', ('Manager',), []) self.login('manager') from Products.Five.testbrowser import Browser self.browser = Browser() # self.setRoles(('Manager',)) self.browser.open(self.portal.absolute_url()+'/login_form') self.browser.getControl(name='__ac_name').value = 'manager' self.browser.getControl(name='__ac_password').value = 'pass' self.browser.getControl(name='submit').click() self.browser.open(self.portal.absolute_url())
class FuiLockerFunctionalTestCase(ptc.FunctionalTestCase): """Test case class used for functional (doc-)tests """ def afterSetUp(self): self.browser = Browser() # The following is useful when writing and debugging testself.browser tests. It lets # us see error messages properly. self.browser.handleErrors = False self.portal.error_log._ignored_exceptions = () # We then turn off the various portlets, because they sometimes duplicate links # and text (e.g. the navtree, the recent recent items listing) that we wish to # test for in our own views. Having no portlets makes things easier. left_column = getUtility(IPortletManager, name=u"plone.leftcolumn") left_assignable = getMultiAdapter((self.portal, left_column), IPortletAssignmentMapping) for name in left_assignable.keys(): del left_assignable[name] right_column = getUtility(IPortletManager, name=u"plone.rightcolumn") right_assignable = getMultiAdapter((self.portal, right_column), IPortletAssignmentMapping) for name in right_assignable.keys(): del right_assignable[name] def loginAdminClick(self): portal_url = self.portal.absolute_url() self.browser.open(portal_url + '/login_form?came_from=' + portal_url) self.browser.getControl(name='__ac_name').value = portal_owner self.browser.getControl(name='__ac_password').value = default_password self.browser.getControl(name='submit').click() def logoutClick(self): portal_url = self.portal.absolute_url() self.browser.getLink("Log out").click()
class CKEditorTestCase(ptc.FunctionalTestCase): """base test case with convenience methods for all ckeditor tests""" def afterSetUp(self): super(CKEditorTestCase, self).afterSetUp() self.browser = Browser() self.uf = self.portal.acl_users self.uf.userFolderAddUser('root', 'secret', ['Manager'], []) self.ptool = getToolByName(self.portal, 'portal_properties') def loginAsManager(self, user='******', pwd='secret'): """points the browser to the login screen and logs in as user root with Manager role.""" self.browser.open('http://nohost/plone/') self.browser.getLink('Log in').click() self.browser.getControl('Login Name').value = user self.browser.getControl('Password').value = pwd self.browser.getControl('Log in').click() class layer(PloneSite): @classmethod def setUp(cls): # doctests don't play nicely with ipython try: iphook = sys.displayhook sys.displayhook = sys.__displayhook__ except: pass @classmethod def tearDown(cls): try: sys.displayhook = iphook except: pass
def testEmail(self): from euphorie.client.tests.utils import MockMailFixture from euphorie.client.tests.utils import addAccount self.addDummySurvey() addAccount() mail_fixture = MockMailFixture() self.portal.email_from_address = "*****@*****.**" self.portal.email_from_name = "Euphorie website" browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getLink('Login').click() browser.getLink("I forgot my password").click() browser.getControl(name="loginname").value = "*****@*****.**" browser.getControl(name="next").click() self.assertEqual(len(mail_fixture.storage), 1) (args, kw) = mail_fixture.storage[0] (mail, mto, mfrom) = args[:3] self.assertEqual(mfrom, "*****@*****.**") self.assertEqual(mto, "*****@*****.**") self.assertEqual( unicode(mail["Subject"]), u"OiRA registration reminder") body = mail.get_payload(0).get_payload(decode=True)\ .decode(mail.get_content_charset("utf-8")) self.failUnless(u"Øle" in body)
def testImageFromOtherSectorAccount(self): # http://code.simplon.biz/tracker/euphorie/ticket/143 import re from euphorie.content.tests.utils import createSector from euphorie.content.tests.utils import addSurvey from Products.Five.testbrowser import Browser sector = createSector(self.portal, login="******") self.loginAsPortalOwner() survey = addSurvey(sector) createSector(self.portal, id="sector2", login="******", password="******") self.logout() browser = Browser() browser.open("%s/@@login" % self.portal.absolute_url()) browser.getControl(name="__ac_name").value = "sector2" browser.getControl(name="__ac_password").value = "sector2" browser.getForm(id="loginForm").submit() risk = survey["1"]["2"] browser.open(risk.absolute_url()) match = re.search(r'<div class="introduction">\s*<img[^>]+src="([^"]+)', browser.contents) self.assertTrue(match) image_url = match.group(1) browser.open(image_url) self.assertEqual(browser.isHtml, False) self.assertEqual(browser.headers.maintype, "image")
def testUpdateModeInitialLoadAndSubmission(self): """Ensure that our Salesforce Adapter mapped objects find their way into the appropriate Salesforce.com instance. """ self._createTestContact() # open a test browser on the initial form browser = Browser() browser.open('http://nohost/plone/ff1') # update the comments field self.assertEqual(browser.getControl(name='comments').value, 'PloneTestCase') browser.getControl(name='comments').value = 'PloneTestCaseChanged' # submit again browser.getControl('Submit').click() # we should only get one record, and the name should be changed res = self.salesforce.query(['Id','LastName'],self.ff1.contact_adapter.getSFObjectType(), "Email='*****@*****.**'") for item in res['records']: self._todelete.append(item['Id']) self.assertEqual(1, res['size']) self.assertEqual('PloneTestCaseChanged', res['records'][0]['LastName'])
def getBrowser(url): browser = Browser() browser.open(url) browser.getControl(name='__ac_name').value = portal_owner browser.getControl(name='__ac_password').value = default_password browser.getControl(name='submit').click() return browser
def test_surveys_filtered_by_language(self): from euphorie.client.tests.utils import registerUserInClient survey = """<sector xmlns="http://xml.simplon.biz/euphorie/survey/1.0"> <title>Sector</title> <survey> <title>Survey</title> <language>en</language> </survey> </sector>""" survey_nl = \ """<sector xmlns="http://xml.simplon.biz/euphorie/survey/1.0"> <title>Branche</title> <survey> <title>Vragenlijst</title> <language>nl</language> </survey> </sector>""" self.loginAsPortalOwner() addSurvey(self.portal, survey) addSurvey(self.portal, survey_nl) browser = Browser() browser.open(self.portal.client.absolute_url()) browser.getLink("Nederlands").click() registerUserInClient(browser, link="Registreer") self.assertEqual( browser.url, "http://nohost/plone/client/nl/?language=nl-NL") self.assertEqual(browser.getControl(name="survey").options, ["branche/vragenlijst"]) browser.open( "%s?language=en" % self.portal.client["nl"].absolute_url()) self.assertEqual(browser.getControl(name="survey").options, ["sector/survey"])
class CKEditorTestCase(ptc.FunctionalTestCase): """base test case with convenience methods for all ckeditor tests""" def afterSetUp(self): super(CKEditorTestCase, self).afterSetUp() self.browser = Browser() self.uf = self.portal.acl_users self.uf.userFolderAddUser('root', 'secret', ['Manager'], []) self.ptool = getToolByName(self.portal, 'portal_properties') def loginAsManager(self, user='******', pwd='secret'): """points the browser to the login screen and logs in as user root with Manager role.""" self.browser.open('http://nohost/plone/') self.browser.getLink('Log in').click() self.browser.getControl('Login Name').value = user self.browser.getControl('Password').value = pwd self.browser.getControl('Log in').click() class layer(PloneSite): @classmethod def setUp(cls): # doctests don't play nicely with ipython try: iphook = sys.displayhook sys.displayhook = sys.__displayhook__ except: pass @classmethod def tearDown(cls): try: sys.displayhook = iphook except: pass
class TestCase(ptc.PloneTestCase): class layer(PloneSite): @classmethod def setUp(cls): fiveconfigure.debug_mode = True zcml.load_config('configure.zcml', uwosh.static.fix) fiveconfigure.debug_mode = False @classmethod def tearDown(cls): pass def afterSetUp(self): super(TestCase, self).afterSetUp() self.browser = Browser() self.uf = self.portal.acl_users self.uf.userFolderAddUser('root', 'secret', ['Manager'], []) def loginAsManager(self, user='******', pwd='secret'): """points the browser to the login screen and logs in as user root with Manager role.""" self.browser.open('http://nohost/plone/') self.browser.getLink('Log in').click() self.browser.getControl('Login Name').value = user self.browser.getControl('Password').value = pwd self.browser.getControl('Log in').click()
def testImageFromOtherSectorAccount(self): # http://code.simplon.biz/tracker/euphorie/ticket/143 import re from euphorie.content.tests.utils import createSector from euphorie.content.tests.utils import addSurvey from Products.Five.testbrowser import Browser sector = createSector(self.portal, login="******") self.loginAsPortalOwner() survey = addSurvey(sector) createSector(self.portal, id="sector2", login="******", password="******") self.logout() browser = Browser() browser.open("%s/@@login" % self.portal.absolute_url()) browser.getControl(name="__ac_name").value = "sector2" browser.getControl(name="__ac_password").value = "sector2" browser.getForm(id="loginForm").submit() risk = survey["1"]["2"] browser.open(risk.absolute_url()) match = re.search( r'<div class="introduction">\s*<img[^>]+src="([^"]+)', browser.contents) self.assertTrue(match) image_url = match.group(1) browser.open(image_url) self.assertEqual(browser.isHtml, False) self.assertEqual(browser.headers.maintype, "image")
def testUnknownAccount(self): self.addDummySurvey() browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getLink("I forgot my password").click() browser.getControl(name="loginname").value = "*****@*****.**" browser.getControl(name="next").click() self.failUnless("Unknown email address" in browser.contents)
class TestCase(ptc.PloneTestCase): def __init__(self, *args, **kwargs): super(TestCase, self).__init__(*args, **kwargs) from Products.Five.testbrowser import Browser self.browser = Browser() def login_as_user(self, username, password): self.browser.open('http://nohost/plone/logout') self.browser.open('http://nohost/plone/login_form') self.browser.getControl(name='__ac_name').value = username self.browser.getControl(name='__ac_password').value = password self.browser.getControl(name='submit').click() def login_as_manager(self): self.login_as_user( ptc.portal_owner, ptc.default_password) class layer(PloneSite): @classmethod def setUp(cls): fiveconfigure.debug_mode = True zcml.load_config('configure.zcml', collective.multimodeview) ztc.installPackage(collective.multimodeview) zcml.load_config('configure.zcml', collective.mcp) zcml.load_config('samples.zcml', collective.mcp) ztc.installPackage(collective.mcp) # We need to clean what has been added by samples. collective.mcp.categories = SortedList(id_attr='id') collective.mcp.pages = SortedList(id_attr='widget_id') fiveconfigure.debug_mode = False @classmethod def tearDown(cls): pass def afterSetUp(self): # his hack allows us to get the traceback when the getting a # 500 error when using the browser. self.portal.error_log._ignored_exceptions = () def raising(self, info): import traceback traceback.print_tb(info[2]) print info[1] from Products.SiteErrorLog.SiteErrorLog import SiteErrorLog SiteErrorLog.raising = raising transaction.commit()
def testUnknownAccount(self): self.addDummySurvey() browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getLink('Login').click() browser.getLink("I forgot my password").click() browser.getControl(name="loginname").value = "*****@*****.**" browser.getControl(name="next").click() self.failUnless("Unknown email address" in browser.contents)
def testValuesFromRequestUsedAfterValidationFailure(self): self._createTestContact() browser = Browser() browser.open('http://nohost/plone/ff1') self.assertEqual(browser.getControl(name='replyto').value, '*****@*****.**') browser.getControl(name='replyto').value = '' browser.getControl('Submit').click() self.failUnless('Please correct the indicated errors.' in browser.contents) self.assertEqual(browser.getControl(name='replyto').value, '')
def test_set_unknown_answer_if_skipped(self): from euphorie.content.tests.utils import BASIC_SURVEY self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) # Register in the client browser = Browser() survey_url = self.portal.client.nl['ict']['software-development']\ .absolute_url() browser.open(survey_url) registerUserInClient(browser) # Create a new survey session browser.getControl(name='title:utf8:ustring').value = u'Session' browser.getControl(name='next', index=1).click() # Start the survey browser.getForm().submit() browser.getLink('Start Risk Identification').click() browser.getControl('next').click() # No answer should be set on initial view self.assertEqual(browser.getControl(name='answer').value, []) # Do not give an identification answer risk_url = browser.url browser.getControl('next').click() # Go back and check the new answer browser.open(risk_url) self.assertEqual( browser.getControl(name='answer').value, ['postponed'])
def test_actions(self): # Ensure that all actions were registered. b = Browser() b.open(self.portal.absolute_url()+'/login') b.getControl(name='__ac_name').value = self.portal_owner b.getControl(name='__ac_password').value = self.default_password b.getControl(name='submit').click() b.open(self.portal.absolute_url()) self.assert_(b.getLink('Link management')) self.assert_(b.getLink('My links')) self.assert_(b.getLink('Links'))
def adminBrowser(self): """Return a browser logged in as the site owner.""" from Products.PloneTestCase.setup import portal_owner from Products.PloneTestCase.setup import default_password from Products.Five.testbrowser import Browser browser = Browser() browser.open("%s/@@login" % self.portal.absolute_url()) browser.getControl(name="__ac_name").value = portal_owner browser.getControl(name="__ac_password").value = default_password browser.getForm(id="loginForm").submit() return browser
def testAddingAlias(self): browser = Browser() browser.addHeader("Authorization", "Basic %s:%s" % (portal_owner, default_password)) portal_url = self.portal.absolute_url() url = portal_url + '/@@manage-aliases' browser.open(url) control = browser.getControl(name='redirection') control.value = '/bar' browser.getControl(name='form.button.Add').click() self.failUnless('Alias added' in browser.contents) self.assertEquals(self.rt.getRedirectObject('/bar'), self.portal)
def getBrowser(url): browser = Browser() browser.open(url) try: browser.getLink('Log in').click() except LinkNotFoundError: #!Plone4 pass browser.getControl(name='__ac_name').value = portal_owner browser.getControl(name='__ac_password').value = default_password browser.getControl(name='submit').click() return browser
def getBrowser(url): browser = Browser() browser.open(url) try: browser.getLink('Log in').click() except LinkNotFoundError: #!Plone4 pass browser.getControl(name='__ac_name').value = portal_owner browser.getControl(name='__ac_password').value = default_password browser.getControl(name='submit').click() return browser
def startSurveySession(self): from Products.Five.testbrowser import Browser browser=Browser() browser.open(self.BASE_URL) # Register a new user testing.registerUserInClient(browser) # Create a new survey session browser.getControl(name="title:utf8:ustring").value="Test session" browser.getControl(name="next", index=1).click() # Start the survey browser.getForm().submit() browser.handleErrors=False return browser
def test_login_not_case_sensitive(self): from euphorie.content.tests.utils import BASIC_SURVEY from euphorie.client.tests.utils import addSurvey from euphorie.client.tests.utils import addAccount self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) addAccount(password='******') browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getControl(name='__ac_name').value = '*****@*****.**' browser.getControl(name='__ac_password:utf8:ustring').value = 'secret' browser.getControl(name="next").click() self.assertTrue('@@login' not in browser.url)
def test_control_panel(self): browser = Browser() browser.addHeader('Authorization', 'Basic %s:%s' % (portal_owner, default_password)) jstool = self.portal.portal_javascripts # This is probably not the best way to test this # we want resources to be cooked after a form save # so we empty them first jstool.cookedresources = () browser.open(self.portal.absolute_url() + '/@@maps-controlpanel') browser.getControl('Default coordinates').value = "1.0, 1.5" browser.getControl('Save').click() self.failUnless(jstool.cookedresources)
def test_fallback_with_no_savedata(self): # if there's an exception and no savedata adapter, send an e-mail browser = Browser() browser.open('http://nohost/plone/ff1') browser.getControl(name='replyto').value = '*****@*****.**' browser.getControl(name='topic').value = 'foo' browser.getControl(name='comments').value = 'bar' browser.getControl('Submit').click() self.failUnless('Thank You' in browser.contents) self.assertEqual(1, len(self.portal.MailHost.messages)) self.failUnless('Someone submitted this form, but the data couldn\'t be saved to Salesforce' in self.portal.MailHost.messages[0])
def test_control_panel(self): browser = Browser() browser.addHeader('Authorization', 'Basic %s:%s' % (portal_owner, default_password)) jstool = self.portal.portal_javascripts # This is probably not the best way to test this # we want resources to be cooked after a form save # so we empty them first #jstool.cookedresources = () jstool.cache_duration = 0 browser.open(self.portal.absolute_url() + '/@@maps-controlpanel') browser.getControl('Default coordinates').value = "1.0, 1.5" browser.getControl('Save').click() self.failUnless(jstool.cookedresources)
def test_use_session_cookie_by_default(self): from euphorie.content.tests.utils import BASIC_SURVEY from euphorie.client.tests.utils import addSurvey from euphorie.client.tests.utils import addAccount self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) addAccount(password='******') browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getControl(name='__ac_name').value = '*****@*****.**' browser.getControl(name='__ac_password:utf8:ustring').value = 'secret' browser.getControl(name="next").click() auth_cookie = browser.cookies.getinfo('__ac') self.assertEqual(auth_cookie['expires'], None)
def test_fallback_with_no_savedata(self): # if there's an exception and no savedata adapter, send an e-mail browser = Browser() browser.open('http://nohost/plone/ff1') browser.getControl(name='replyto').value = '*****@*****.**' browser.getControl(name='topic').value = 'foo' browser.getControl(name='comments').value = 'bar' browser.getControl('Submit').click() self.failUnless('Thank You' in browser.contents) self.assertEqual(1, len(self.portal.MailHost.messages)) self.failUnless( 'Someone submitted this form, but the data couldn\'t be saved to Salesforce' in self.portal.MailHost.messages[0])
def test_extra_ga_pageview_post_login(self): from euphorie.content.tests.utils import BASIC_SURVEY from euphorie.client.tests.utils import addSurvey from euphorie.client.tests.utils import addAccount self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) addAccount(password='******') browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getLink('Login').click() browser.getControl(name='__ac_name').value = '*****@*****.**' browser.getControl(name='__ac_password:utf8:ustring').value = 'secret' browser.getControl(name="next").click() self.assertTrue(re.search('trackPageview.*login_form/success', browser.contents) is not None)
def test_login_not_case_sensitive(self): from euphorie.content.tests.utils import BASIC_SURVEY from euphorie.client.tests.utils import addSurvey from euphorie.client.tests.utils import addAccount self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) addAccount(password='******') browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getLink('Login').click() browser.getControl(name='__ac_name').value = '*****@*****.**' browser.getControl(name='__ac_password:utf8:ustring').value = 'secret' browser.getControl(name="next").click() self.assertTrue('@@login' not in browser.url)
def test_use_session_cookie_by_default(self): from euphorie.content.tests.utils import BASIC_SURVEY from euphorie.client.tests.utils import addSurvey from euphorie.client.tests.utils import addAccount self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) addAccount(password='******') browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getLink('Login').click() browser.getControl(name='__ac_name').value = '*****@*****.**' browser.getControl(name='__ac_password:utf8:ustring').value = 'secret' browser.getControl(name="next").click() auth_cookie = browser.cookies.getinfo('__ac') self.assertEqual(auth_cookie['expires'], None)
def startSurveySession(self): from Products.Five.testbrowser import Browser browser = Browser() browser.open(self.BASE_URL) # Register a new user testing.registerUserInClient(browser) # Create a new survey session browser.getLink(id="button-new-session").click() browser.getControl(name="title:utf8:ustring").value = "Test session" browser.getControl(name="next").click() # Start the survey browser.getForm().submit() browser.handleErrors = False return browser
def test_extra_ga_pageview_post_login(self): from euphorie.content.tests.utils import BASIC_SURVEY from euphorie.client.tests.utils import addSurvey from euphorie.client.tests.utils import addAccount self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) addAccount(password='******') browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getLink('Login').click() browser.getControl(name='__ac_name').value = '*****@*****.**' browser.getControl(name='__ac_password:utf8:ustring').value = 'secret' browser.getControl(name="next").click() self.assertTrue( re.search('trackPageview.*login_form/success', browser.contents) is not None)
def testUpdateModeCreateIfNoMatchResubmitAfterBrowserBackButton(self): # We have a form in update mode and configured to create a new # object if there is not matching object to update. Consider # the following scenario: # # 1. User gets to the form and submits it. # 2. A new record in Salesforce is created and user is taken # to the thank you page. # 3. User hits the browser back button # # At that point we want to make sure that if the user re # submits the form, we don't create a new object in Salesforce. # Instead, the record created the first time that form was # submited must be updated. Let's test this scenario. self._assertNoExistingTestContact() # set actionIfNoExistingObject to 'create' self.ff1.contact_adapter.setActionIfNoExistingObject('create') notify(AdapterModifiedEvent(self.ff1.contact_adapter)) # open a test browser and submit the form once browser = Browser() browser.open('http://nohost/plone/ff1') browser.getControl(name='replyto').value = '*****@*****.**' browser.getControl(name='comments').value = 'PloneTestCase' browser.getControl('Submit').click() # now there should be one (new) record query_tuple = (['Id','LastName'], self.ff1.contact_adapter.getSFObjectType(), "Email='*****@*****.**'") res = self.salesforce.query(*query_tuple) for item in res['records']: self._todelete.append(item['Id']) self.assertEqual(1, res['size']) self.assertEqual('PloneTestCase', res['records'][0]['LastName']) # hit the back button browser.goBack() # change the comments and resubmit the form browser.getControl(name='replyto').value = '*****@*****.**' browser.getControl(name='comments').value = 'New PloneTestCase' browser.getControl('Submit').click() # there should be still only one record and the comments field # should have changed res = self.salesforce.query(*query_tuple) for item in res['records']: self._todelete.append(item['Id']) self.assertEqual(1, res['size']) self.assertEqual('New PloneTestCase', res['records'][0]['LastName'])
def testMultiProfiles(self): # Tests http://code.simplon.biz/tracker/euphorie/ticket/96 survey = """<sector xmlns="http://xml.simplon.biz/euphorie/survey/1.0"> <title>Sector title</title> <survey> <title>Survey title</title> <profile-question> <title>Multiple profile question</title> <question>Profile titles</question> <description><p>Profile description.</p></description> <risk type="policy"> <title>Profile risk</title> <description><p>Risk description.</p></description> <evaluation-method>direct</evaluation-method> </risk> </profile-question> <module optional="false"> <title>Module title</title> <description><p>Module description.</p></description> <risk type="policy"> <title>Module risk</title> <description><p>Module description.</p></description> <evaluation-method>direct</evaluation-method> </risk> </module> </survey> </sector>""" self.loginAsPortalOwner() addSurvey(self.portal, survey) browser = Browser() browser.open(self.portal.client.nl["sector-title"] ["survey-title"].absolute_url()) registerUserInClient(browser) # Create a new survey session browser.getControl(name="title:utf8:ustring").value = "Test session" browser.getControl(name="next").click() # Start the survey browser.getForm().submit() # Enter the profile information browser.getControl(name="1:utf8:utext:list", index=0).value = "Profile 1" browser.getControl(name="1:utf8:utext:list", index=1).value = "Profile 2" browser.getForm().submit()
def test6734(self): self.loginAsPortalOwner() # We start off by copying the existing SimpleFolder type to # our own type 'MySimpleFolder'. For this type, we set the # SimpleFolder type to be the sole allowed content type. types = self.portal.portal_types types.manage_pasteObjects(types.manage_copyObjects(['SimpleFolder'])) types.manage_renameObjects(['copy_of_SimpleFolder'], ['MySimpleFolder']) my_type = types['MySimpleFolder'] attrs = dict(allowed_content_types=('SimpleFolder',), filter_content_types=True, portal_type='MySimpleFolder', title='MySimpleFolder') my_type.__dict__.update(attrs) browser = Browser() browser.addHeader('Authorization', 'Basic %s:%s' % ('portal_owner', user_password)) browser.open(self.folder.absolute_url()) browser.getLink('Add new').click() browser.getControl('MySimpleFolder').click() browser.getControl('Add').click() browser.getControl('Title').value = 'My dope folder' browser.getControl('Save').click() self.failUnless('Changes saved.' in browser.contents) self.failUnless('My dope folder' in browser.contents)
def test_add_to_portal_root_save(self): self.setRoles(('Manager',)) browser = Browser() browser.handleErrors = False # Login browser.open(self.portal.absolute_url() + '/login') browser.getControl(name='__ac_name').value = ptc.default_user browser.getControl(name='__ac_password').value = ptc.default_password browser.getControl('Log in').click() # Enter the add screen for a temporary portal_factory-managed object browser.open(self.portal.absolute_url() + '/portal_factory/Document/document.2010-02-04.2866363923/edit') # We should now have cookies with the drafts information cookies = browser.cookies.forURL(browser.url) self.assertEquals('"/plone/portal_factory/Document/document.2010-02-04.2866363923"', cookies['plone.app.drafts.path']) self.assertEquals('"0%3ADocument"', cookies['plone.app.drafts.targetKey']) self.failIf('plone.app.drafts.draftName' in browser.cookies.forURL(browser.url)) # We can now fill in the required fields and save. The cookies should expire. browser.getControl(name='title').value = u"New document" browser.getControl(name='form.button.save').click() self.failIf('plone.app.drafts.targetKey' in browser.cookies.forURL(browser.url)) self.failIf('plone.app.drafts.path' in browser.cookies.forURL(browser.url)) self.failIf('plone.app.drafts.draftName' in browser.cookies.forURL(browser.url))
class UWOshSuccessFunctionalTestCase(UWOshSuccessTestCase, ptc.FunctionalTestCase): def __init__(self, methodName='runTest'): UWOshSuccessTestCase.__init__(self, methodName) ptc.FunctionalTestCase.__init__(self, methodName) self.browser = Browser() self.browser.addHeader('Accept-Language', 'en-US') def browserLogout(self): self.browser.open(self.portal.absolute_url() + '/logout') self.assertTrue('You are now logged out' in self.browser.contents) def browserLogin(self, username, password='******'): self.browser.open(self.portal.absolute_url() + '/login_form') self.browser.getControl(name='__ac_name').value = username self.browser.getControl(name='__ac_password').value = password self.browser.getControl(name='submit').click() self.assertTrue('You are now logged in' in self.browser.contents)
class UWOshSuccessFunctionalTestCase(UWOshSuccessTestCase, ptc.FunctionalTestCase): def __init__(self, methodName='runTest'): UWOshSuccessTestCase.__init__(self, methodName) ptc.FunctionalTestCase.__init__(self, methodName) self.browser = Browser() self.browser.addHeader('Accept-Language', 'en-US') def browserLogout(self): self.browser.open(self.portal.absolute_url() + '/logout') self.assertTrue('You are now logged out' in self.browser.contents) def browserLogin(self, username, password='******'): self.browser.open(self.portal.absolute_url() + '/login_form') self.browser.getControl(name='__ac_name').value = username self.browser.getControl(name='__ac_password').value = password self.browser.getControl(name='submit').click() self.assertTrue('You are now logged in' in self.browser.contents)
class ControlPanelTestCase(FunctionalTestCase): """base test case with convenience methods for all control panel tests""" def afterSetUp(self): super(ControlPanelTestCase, self).afterSetUp() self.browser = Browser() self.uf = self.portal.acl_users self.uf.userFolderAddUser('root', 'secret', ['Manager'], []) self.ptool = getToolByName(self.portal, 'portal_properties') self.site_props = self.ptool.site_properties self.fake_request = FakeRequest() def loginAsManager(self, user='******', pwd='secret'): """points the browser to the login screen and logs in as user root with Manager role.""" self.browser.open('http://nohost/plone/') self.browser.getLink('Log in').click() self.browser.getControl('Login Name').value = user self.browser.getControl('Password').value = pwd self.browser.getControl('Log in').click() def simplify_white_space(self, text): """For easier testing we replace all white space with one space. And we remove white space around '<' and '>'. So this: <p id="foo"> Bar </p> becomes this: <p id="foo">Bar</p> """ text = re.sub('\s*<\s*', '<', text) text = re.sub('\s*>\s*', '>', text) text = re.sub('\s+', ' ', text) return text
def testUpdateWhenObjectInitiallyFoundGoesMissing(self): # create a contact and load it into the form... self._createTestContact() browser = Browser() browser.handleErrors = False browser.open('http://nohost/plone/ff1') self.assertEqual(browser.getControl(name='comments').value, 'PloneTestCase') # now manually remove the new contact from Salesforce self.salesforce.delete(self._todelete[-1:]) # on submission, the adapter will get a Id from the session and will try # to update the object with that Id, but we'll get an exception from SF # since the object no longer exists try: browser.getControl('Submit').click() except Exception, e: self.assertEqual(e.message, 'Failed to update Contact in Salesforce: entity is deleted')
def testUpdateModeAbortIfNoMatchOnDirectSubmission(self): self._assertNoExistingTestContact() # make sure the 'abort' setting of actionIfNoExistingObject is # respected even if the check on the initial form load was bypassed. # To test, we'll first load the form with the setting on 'create'... self.ff1.contact_adapter.setActionIfNoExistingObject('create') browser = Browser() browser.open('http://nohost/plone/ff1') # then switch it to 'abort' and submit the form... self.ff1.contact_adapter.setActionIfNoExistingObject('abort') browser.getControl(name='replyto').value = '*****@*****.**' browser.getControl(name='comments').value = 'PloneTestCase' browser.getControl('Submit').click() # should end up on the portal root, with an error message self.assertEqual(browser.url, 'http://nohost/plone') self.failUnless('Could not find item to edit.' in browser.contents)
def testNoUpdateIfInitialSessionWasDestroyed(self): # If the session is destroyed (e.g. if Zope restarts) or expires, then # we could get a submission that is supposed to be an update, but is # treated as a creation attempt. Let's be sure to avoid that... self._createTestContact() self.ff1.contact_adapter.setActionIfNoExistingObject('create') browser = Browser() browser.open('http://nohost/plone/ff1') # reset the sessions self.app.temp_folder._delObject('session_data') ztc.utils.setupCoreSessions(self.app) # submit the form browser.getControl('Submit').click() # make sure we didn't create a new item in Salesforce res = self.salesforce.query("SELECT Id FROM Contact WHERE Email='*****@*****.**' and LastName='PloneTestCase'") self.failIf(res['size'] > 1, 'Known issue: Accidental creation following session destruction.')
class PDFBookFunctionalTestCase(ptc.FunctionalTestCase, TestCaseMixin): def afterSetUp(self): super(PDFBookFunctionalTestCase, self).afterSetUp() self.makeBaseContent() self.browser = Browser() self.uf = self.portal.acl_users self.uf.userFolderAddUser('root', 'secret', ['Manager'], []) self.ptool = getToolByName(self.portal, 'portal_properties') self.site_props = self.ptool.site_properties return def loginAsManager(self, user='******', pwd='secret'): """points the browser to the login screen and logs in as user root with Manager role.""" self.browser.open('http://nohost/plone/') self.browser.getLink('Log in').click() self.browser.getControl('Login Name').value = user self.browser.getControl('Password').value = pwd self.browser.getControl('Log in').click() return
def test_remember_user_sets_cookie_expiration(self): import datetime from euphorie.content.tests.utils import BASIC_SURVEY from euphorie.client.tests.utils import addSurvey from euphorie.client.tests.utils import addAccount self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) addAccount(password='******') browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getControl(name='__ac_name').value = '*****@*****.**' browser.getControl(name='__ac_password:utf8:ustring').value = 'secret' browser.getControl(name='remember').value = ['True'] browser.getControl(name="next").click() auth_cookie = browser.cookies.getinfo('__ac') self.assertNotEqual(auth_cookie['expires'], None) delta = auth_cookie['expires'] - datetime.datetime.now( auth_cookie['expires'].tzinfo) self.assertTrue(delta.days > 100)
def testUpdateNullifiesEmptyFields(self): """ Tests that, in update mode, empty fields overwrite existing data with a null value. """ self._createTestContact() # Set actionIfNoExistingObject to 'abort.' self.ff1.contact_adapter.setActionIfNoExistingObject('abort') notify(AdapterModifiedEvent(self.ff1.contact_adapter)) browser = Browser() browser.open('http://nohost/plone/ff1') browser.getControl(name='replyto').value = '*****@*****.**' browser.getControl(name='comments').value = 'PloneTestCase' browser.getControl(name='topic').value = '(123) 456-7890' browser.getControl('Submit').click() # Now there should be one (new) record. query_tuple = (['Id','LastName','Phone'], self.ff1.contact_adapter.getSFObjectType(), "Email='*****@*****.**'") res = self.salesforce.query(*query_tuple) for item in res['records']: self._todelete.append(item['Id']) self.assertEqual(1, res['size']) self.assertEqual('PloneTestCase', res['records'][0]['LastName']) self.assertEqual('(123) 456-7890', res['records'][0]['Phone']) # We can now update the item by removing the phone number. browser.open('http://nohost/plone/ff1') self.assertEqual('(123) 456-7890', browser.getControl(name='topic').value) browser.getControl(name='topic').value = '' browser.getControl('Submit').click() # The record should now contain an empty phone number. query_tuple = (['Id','LastName','Phone'], self.ff1.contact_adapter.getSFObjectType(), "Email='*****@*****.**'") res = self.salesforce.query(*query_tuple) self.assertEqual(1, res['size']) self.assertEqual('PloneTestCase', res['records'][0]['LastName']) self.assertEqual('', res['records'][0]['Phone'])
def testCountryDefaultsToCurrentCountry(self): from euphorie.client.tests.utils import addSurvey from euphorie.client.tests.utils import registerUserInClient from euphorie.content.tests.utils import BASIC_SURVEY self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) browser = Browser() survey_url = self.portal.client.nl["ict"]["software-development"].absolute_url() browser.open(survey_url) registerUserInClient(browser) # Create a new survey session browser.getControl(name="title:utf8:ustring").value = "Sessiøn".encode("utf-8") browser.getControl(name="next").click() # Start the survey browser.getForm().submit() browser.getLink("Start Risk Identification").click() # Check the company data browser.open("%s/report/company" % survey_url) self.assertEqual(browser.getControl(name="form.widgets.country").value, ["nl"])
def test_remember_user_sets_cookie_expiration(self): import datetime from euphorie.content.tests.utils import BASIC_SURVEY from euphorie.client.tests.utils import addSurvey from euphorie.client.tests.utils import addAccount self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) addAccount(password='******') browser = Browser() browser.open(self.portal.client.nl.absolute_url()) browser.getLink('Login').click() browser.getControl(name='__ac_name').value = '*****@*****.**' browser.getControl(name='__ac_password:utf8:ustring').value = 'secret' browser.getControl(name='remember').value = ['True'] browser.getControl(name="next").click() auth_cookie = browser.cookies.getinfo('__ac') self.assertNotEqual(auth_cookie['expires'], None) delta = auth_cookie['expires'] - datetime.datetime.now( auth_cookie['expires'].tzinfo) self.assertTrue(delta.days > 100)
class ControlPanelTestCase(FunctionalTestCase): """base test case with convenience methods for all control panel tests""" def afterSetUp(self): super(ControlPanelTestCase, self).afterSetUp() self.browser = Browser() self.uf = self.portal.acl_users self.uf.userFolderAddUser('root', 'secret', ['Manager'], []) self.ptool = getToolByName(self.portal, 'portal_properties') self.site_props = self.ptool.site_properties def loginAsManager(self, user='******', pwd='secret'): """points the browser to the login screen and logs in as user root with Manager role.""" self.browser.open('http://nohost/plone/') self.browser.getLink('Log in').click() self.browser.getControl('Login Name').value = user self.browser.getControl('Password').value = pwd self.browser.getControl('Log in').click() def simplify_white_space(self, text): """For easier testing we replace all white space with one space. And we remove white space around '<' and '>'. So this: <p id="foo"> Bar </p> becomes this: <p id="foo">Bar</p> """ text = re.sub('\s*<\s*', '<', text) text = re.sub('\s*>\s*', '>', text) text = re.sub('\s+', ' ', text) return text
def testUpdateModeCreateIfNoMatch(self): self._assertNoExistingTestContact() # set actionIfNoExistingObject to 'create' self.ff1.contact_adapter.setActionIfNoExistingObject('create') notify(AdapterModifiedEvent(self.ff1.contact_adapter)) # open a test browser on the initial form browser = Browser() browser.open('http://nohost/plone/ff1') # confirm no existing values; set some new ones and submit self.assertEqual(browser.getControl(name='replyto').value, '') browser.getControl(name='replyto').value = '*****@*****.**' self.assertEqual(browser.getControl(name='comments').value, '') browser.getControl(name='comments').value = 'PloneTestCase' browser.getControl('Submit').click() # now there should be one (new) record res = self.salesforce.query(['Id','LastName'],self.ff1.contact_adapter.getSFObjectType(), "Email='*****@*****.**'") for item in res['records']: self._todelete.append(item['Id']) self.assertEqual(1, res['size']) self.assertEqual('PloneTestCase', res['records'][0]['LastName'])