def test_recurrence(self): browser = Browser() browser.handleErrors = False browser.addHeader('Authorization', 'Basic %s:%s' % (portal_owner, default_password)) folder_url = self.folder.absolute_url() # Add event browser.open(folder_url + '/createObject?type_name=Event') form = browser.getForm('event-base-edit') form.getControl(name='title').value = 'An Event' form.getControl(name='startDate_year').value = ['2007'] form.getControl(name='startDate_month').value = ['04'] form.getControl(name='startDate_day').value = ['01'] form.getControl(name='startDate_hour').value = ['11'] form.getControl(name='startDate_minute').value = ['00'] form.getControl(name='endDate_year').value = ['2007'] form.getControl(name='endDate_month').value = ['04'] form.getControl(name='endDate_day').value = ['01'] form.getControl(name='endDate_hour').value = ['11'] form.getControl(name='endDate_minute').value = ['00'] # Edit the recurrence info: form.getControl(name='frequency').value = ['1'] form.getControl(name='interval').value = '6' form.getControl(name='form.button.save').click() # Make sure it's properly indexed: cat = self.portal.portal_catalog self.failUnless(len(cat(portal_type='Event', recurrence_days=732950)) == 1)
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"')
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 test_add_new_sector(self): import json from ..authentication import generate_token self.loginAsPortalOwner() country = self.portal.sectors['nl'] country.invokeFactory('euphorie.countrymanager', 'manager', login='******', password=u'manager') browser = Browser() browser.handleErrors = False browser.raiseHttpErrors = False browser.addHeader('X-Euphorie-Token', generate_token(country['manager'])) browser.post('http://nohost/plone/api/countries/nl/sectors', json.dumps({'title': u'IT development', 'login': '******', 'contact': { 'name': 'Jony Smith', 'email': '*****@*****.**', }, 'password': u'cobol-for-the-win'})) response = json.loads(browser.contents) self.assertEqual(response['type'], 'sector') self.assertEqual(response['id'], 'it-development') self.assertTrue('it-development' in country) sector = country['it-development'] self.assertEqual(sector.title, u'IT development') self.assertEqual(sector.login, 'it') self.assertEqual(sector.password, u'cobol-for-the-win')
def test_browser(self): import datetime from z3c.saconfig import Session from euphorie.client.model import SurveySession from euphorie.client.api.authentication import generate_token from euphorie.content.tests.utils import BASIC_SURVEY from euphorie.client.tests.utils import addAccount from euphorie.client.tests.utils import addSurvey self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) account = addAccount(password='******') survey_session = SurveySession( title=u'Dummy session', created=datetime.datetime(2012, 4, 22, 23, 5, 12), modified=datetime.datetime(2012, 4, 23, 11, 50, 30), zodb_path='nl/ict/software-development', account=account) Session.add(survey_session) browser = Browser() browser.addHeader('X-Euphorie-Token', generate_token(account)) browser.handleErrors = False browser.open('http://nohost/plone/client/api/users/1/' 'sessions/1/report-timeline') self.assertEqual( browser.headers['Content-Type'], 'application/vnd.openxmlformats-' 'officedocument.spreadsheetml.sheet')
def test_edit_multiple_existing_drafts(self): browser = Browser() browser.handleErrors = False self.folder.invokeFactory('Document', 'd1') self.folder['d1'].setTitle(u"New title") intid = getUtility(IIntIds).getId(self.folder['d1']) # Create two drafts for this object - we don't expect either to be used storage = getUtility(IDraftStorage) storage.createDraft(ptc.default_user, str(intid)) storage.createDraft(ptc.default_user, str(intid)) # 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 edit screen browser.open(self.folder['d1'].absolute_url() + '/edit') # We should now have cookies with the drafts information cookies = browser.cookies.forURL(browser.url) self.assertEquals('"%s"' % self.folder['d1'].absolute_url_path(), cookies['plone.app.drafts.path']) self.assertEquals('"%d"' % intid, cookies['plone.app.drafts.targetKey']) self.failIf('plone.app.drafts.draftName' in browser.cookies.forURL(browser.url)) # We can now save the page. The cookies should expire. 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))
def test_browser_get(self): import datetime from z3c.saconfig import Session from euphorie.client.model import SurveySession from euphorie.content.tests.utils import BASIC_SURVEY from euphorie.client.tests.utils import addAccount from euphorie.client.tests.utils import addSurvey from euphorie.client.api.authentication import generate_token from tno.euphorie.model import DutchCompany from Products.Five.testbrowser import Browser self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) account = addAccount(password='******') survey_session = SurveySession( title=u'Dummy session', created=datetime.datetime(2012, 4, 22, 23, 5, 12), modified=datetime.datetime(2012, 4, 23, 11, 50, 30), zodb_path='nl/ict/software-development', account=account) survey_session.dutch_company = DutchCompany( title=u'Acme B.V.', employees='40h', email='*****@*****.**', submit_date=datetime.date(2012, 6, 6)) Session.add(survey_session) browser = Browser() browser.addHeader('X-Euphorie-Token', generate_token(account)) browser.handleErrors = False browser.open( 'http://nohost/plone/client/api/users/1/sessions/1/' 'report-actionplan') self.assertEqual(browser.headers['Content-Type'], 'application/rtf') self.assertTrue('Bedrijfsnaam' in browser.contents)
def test_add_to_folder(self): browser = Browser() browser.handleErrors = False intid = getUtility(IIntIds).getId(self.folder) # 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.folder.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( '"%s/portal_factory/Document/document.2010-02-04.2866363923"' % self.folder.absolute_url_path(), cookies['plone.app.drafts.path'] ) self.assertEquals('"%d%%3ADocument"' % intid, cookies['plone.app.drafts.targetKey']) self.failIf('plone.app.drafts.draftName' in browser.cookies.forURL(browser.url)) # We can now cancel the edit. The cookies should expire. browser.getControl(name='form.button.cancel').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))
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))
def test_add_new_sector(self): import json from ..authentication import generate_token self.loginAsPortalOwner() country = self.portal.sectors['nl'] country.invokeFactory('euphorie.countrymanager', 'manager', login='******', password=u'manager') browser = Browser() browser.handleErrors = False browser.raiseHttpErrors = False browser.addHeader('X-Euphorie-Token', generate_token(country['manager'])) browser.post('http://nohost/plone/api/countries/nl/sectors', json.dumps({'title': u'IT development', 'login': '******', 'contact': { 'name': u'Jony Smith', 'email': u'*****@*****.**', }, 'password': u'cobol-for-the-win'})) response = json.loads(browser.contents) self.assertEqual(response['type'], 'sector') self.assertEqual(response['id'], 'it-development') self.assertTrue('it-development' in country) sector = country['it-development'] self.assertEqual(sector.title, u'IT development') self.assertEqual(sector.login, 'it') self.assertEqual(sector.password, u'cobol-for-the-win')
def getBrowser(loggedIn=False): """ instantiate and return a testbrowser for convenience """ browser = Browser() browser.handleErrors = True if loggedIn: user = PloneTestCase.default_user pwd = PloneTestCase.default_password browser.addHeader('Authorization', 'Basic %s:%s' % (user, pwd)) return browser
def getBrowser(self, loggedIn=False): """ instantiate and return a testbrowser for convenience """ browser = Browser() browser.handleErrors = True if loggedIn: user = PloneTestCase.default_user pwd = PloneTestCase.default_password browser.addHeader("Authorization", "Basic %s:%s" % (user, pwd)) return browser
def test_authentication_success(self): import json from z3c.saconfig import Session from euphorie.client.model import Account Session.add(Account(loginname='john', password=u'jane')) browser = Browser() browser.handleErrors = False browser.post('http://nohost/plone/client/api/users/authenticate', '{"login": "******", "password": "******"}') response = json.loads(browser.contents) self.assertEqual(response['type'], 'user')
def test_user_info(self): import json from euphorie.client.tests.utils import addAccount from euphorie.client.api.authentication import generate_token account = addAccount() browser = Browser() browser.addHeader('X-Euphorie-Token', generate_token(account)) browser.handleErrors = False browser.open('http://nohost/plone/client/api/users/1') response = json.loads(browser.contents) self.assertEqual(response['type'], 'user')
def test_authenticated_user(self): import json from ...tests.utils import createSector from ..authentication import generate_token sector = createSector(self.portal, login='******', password=u'sector') browser = Browser() browser.handleErrors = False browser.addHeader('X-Euphorie-Token', generate_token(sector)) browser.open('http://nohost/plone/api/countries/nl/managers') response = json.loads(browser.contents) self.assertEqual(set(response), set(['managers'])) self.assertEqual(response['managers'], [])
def test_download_signatures(self): self.browser.open('http://nohost/plone/megaphone/signers') self.failIf('Download signatures' in self.browser.contents) browser = Browser() browser.handleErrors = False browser.addHeader('Authorization', 'Basic root:secret') browser.open('http://nohost/plone/megaphone/signers') browser.getLink('Download signatures as CSV').click() self.assertEqual('attachment; filename="saved-letters.csv"', browser.headers['content-disposition']) self.assertEqual('text/comma-separated-values;charset=utf-8', browser.headers['content-type']) self.assertEqual('body,Harvey,Frank,[email protected],,Seattle,WA,,body\r\n', browser.contents)
def test_delete_all_signatures(self): self.browser.open('http://nohost/plone/megaphone/signers') self.failIf('Delete all signatures' in self.browser.contents) browser = Browser() browser.handleErrors = False browser.addHeader('Authorization', 'Basic root:secret') browser.open('http://nohost/plone/megaphone/signers') self.failUnless('Harvey' in browser.contents) browser.getLink('Delete all signatures').click() self.assertEqual('http://nohost/plone/megaphone/signers', browser.url) self.failIf('Harvey' in browser.contents)
def test_browser_authenticated_user(self): import json from ...tests.utils import createSector from ..authentication import generate_token self.loginAsPortalOwner() self.portal.sectors['nl'].invokeFactory('euphorie.countrymanager', 'manager') sector = createSector(self.portal, login='******', password=u'sector') browser = Browser() browser.handleErrors = False browser.addHeader('X-Euphorie-Token', generate_token(sector)) browser.open('http://nohost/plone/api/countries/nl/managers/manager') response = json.loads(browser.contents) self.assertEqual(response['type'], 'countrymanager')
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_remove_signature(self): # users can't remove unless they have Manage Portal permission self.browser.open('http://nohost/plone/megaphone/signers') self.failIf('Delete' in self.browser.contents) browser = Browser() browser.handleErrors = False browser.addHeader('Authorization', 'Basic root:secret') browser.open('http://nohost/plone/megaphone/signers') self.failUnless('Harvey' in browser.contents) browser.getLink('Delete').click() self.assertEqual('http://nohost/plone/megaphone/signers', browser.url) self.failIf('Harvey' in browser.contents)
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_must_select_valid_survey(self): import urllib from euphorie.client.tests.utils import registerUserInClient from euphorie.content.tests.utils import BASIC_SURVEY self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) browser = Browser() browser.open(self.portal.client['nl'].absolute_url()) registerUserInClient(browser) data = urllib.urlencode({'action': 'new', 'survey': '', 'title:utf8:ustring': 'Foo'}) browser.handleErrors = False browser.open(browser.url, data) self.assertEqual(browser.url, 'http://nohost/plone/client/nl')
def test_petition_wizard(self): # log in browser = Browser() browser.handleErrors = False self.app.acl_users.userFolderAddUser('root', 'secret', ['Manager'], []) browser.addHeader('Authorization', 'Basic root:secret') browser.open('http://nohost/plone') # make sure we get the right steps for configuring a petition browser.getLink('Megaphone Action').click() browser.getControl(name='intro.widgets.megaphone_type:list').value = ['petition'] browser.getControl('Continue').click() self.failUnless('General Settings' in browser.contents) browser.getControl('Title').value = 'Petition' browser.getControl('Continue').click() self.failUnless('Form Fields' in browser.contents) # remove captcha field browser.getControl(name='crud-edit.captcha.widgets.select:list').value = ['true'] browser.getControl('Delete').click() browser.getControl('Continue').click() self.failUnless('Thank You to Activist' in browser.contents) if HAS_SALESFORCE: browser.getControl('Continue').click() self.failUnless('Save to Salesforce' in browser.contents) browser.getControl('Continue').click() self.failUnless('List of Signatures' in browser.contents) browser.getControl('Finish').click() self.failUnless('Megaphone Action Wizard Summary' in browser.contents) browser.getLink('View').click() self.assertEqual('http://nohost/plone/petition/view', browser.url) self.failUnless(IMegaphone.providedBy(self.portal.petition)) # petitions don't get a 'Preview' button self.failIf('Preview' in browser.contents) # check the default fields expected_subitems = ['thank-you', 'body', 'first', 'last', 'email', 'street', 'city', 'state', 'zip', 'thank-you-email', 'saved-letters', 'rendered-letter'] self.assertEqual(expected_subitems, self.portal.petition.objectIds()) self.assertEqual('Additional Comment', self.portal.petition.body.Title()) # return to edit and make sure we still get the petition steps browser.getLink('Edit').click() self.failUnless('List of Signatures' in browser.contents)
def test_authenticated_user(self): import json from ...tests.utils import createSector from ..authentication import generate_token sector = createSector(self.portal, login='******', password=u'sector') browser = Browser() browser.handleErrors = False browser.addHeader('X-Euphorie-Token', generate_token(sector)) browser.open('http://nohost/plone/api/countries') response = json.loads(browser.contents) self.assertEqual(set(response), set(['countries'])) self.assertGreater(len(response['countries']), 30) nl = [c for c in response['countries'] if c['id'] == 'nl'][0] self.assertEqual(set(nl), set(['id', 'title', 'country-type'])) self.assertEqual(nl['id'], u'nl') self.assertEqual(nl['title'], u'The Netherlands') self.assertEqual(nl['country-type'], u'eu-member')
def test_must_select_valid_survey(self): import urllib from euphorie.client.tests.utils import registerUserInClient from euphorie.content.tests.utils import BASIC_SURVEY self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) browser = Browser() browser.open(self.portal.client['nl'].absolute_url()) registerUserInClient(browser) data = urllib.urlencode({ 'action': 'new', 'survey': '', 'title:utf8:ustring': 'Foo' }) browser.handleErrors = False browser.open(browser.url, data) self.assertEqual(browser.url, 'http://nohost/plone/client/nl')
def test_gallery_views(self): browser = Browser() browser.handleErrors = False self.setRoles(("Manager",)) self.portal.invokeFactory(id="test_gallery", type_name="Folder") gallery = self.portal.test_gallery self.portal.portal_workflow.doActionFor(gallery, "publish") populate_gallery(gallery) gallery.setLayout("galleryview") settings = GallerySettings(gallery) vocab = getUtility(IVocabularyFactory, "collective.plonetruegallery.DisplayTypes")(gallery) title = gallery.objectValues()[0].Title() for display_type in vocab.by_value.keys(): settings.display_type = display_type # This test doesn't trigger the same error as seen in real plone # caused by unicode characters in image titles browser.open(gallery.absolute_url()) self.assertTrue(title in browser.contents)
def test_basic_views(self): browser = Browser() browser.addHeader('Authorization', 'Basic %s:%s' % (portal_owner, default_password)) browser.handleErrors = False portal_url = self.portal.absolute_url() # First check that they work empty: browser.open(portal_url + '/a-calendar') browser.getLink('Week').click() browser.getLink('Day').click() browser.getLink('List').click() browser.getLink('Past').click() # Create an event: browser.open(portal_url + '/a-calendar') browser.getLink(id='event').click() form = browser.getForm('event-base-edit') form.getControl(name='title').value = 'An Event' form.getControl(name='startDate_year').value = ['2007'] form.getControl(name='startDate_month').value = ['04'] form.getControl(name='startDate_day').value = ['01'] form.getControl(name='startDate_hour').value = ['11'] form.getControl(name='startDate_minute').value = ['00'] form.getControl(name='endDate_year').value = ['2007'] form.getControl(name='endDate_month').value = ['04'] form.getControl(name='endDate_day').value = ['01'] form.getControl(name='endDate_hour').value = ['11'] form.getControl(name='endDate_minute').value = ['00'] form.getControl(name=self.submit_name).click() self.failUnless('an-event' in browser.url) # Check that it still works: browser.open(portal_url + '/a-calendar/day.html?date=2007-04-01') self.failUnless(self._isInCalendar(browser, "An Event")) browser.getLink('Week').click() self.failUnless(self._isInCalendar(browser, "An Event")) browser.getLink('Day').click() self.failUnless(self._isInCalendar(browser, "An Event")) # This event is in the past (unless you have borrowed Guidos time-machine) browser.getLink('Past').click() self.failUnless(self._isInCalendar(browser, "An Event")) browser.getLink('List').click() self.failIf(self._isInCalendar(browser, "An Event"))
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 test_do_not_abort_on_far_future(self): from euphorie.content.tests.utils import BASIC_SURVEY # 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", index=1).click() # Start the survey browser.getForm().submit() browser.getLink("Start Risk Identification").click() # Identify the risk browser.getControl("next").click() browser.getControl(name="answer").value = ["no"] browser.getControl("next").click() # Move on to the risk's action plan form browser.getLink("Go to action plan").click() browser.getLink("Create action plan").click() browser.getLink("Next").click() # Try an early year browser.getControl(name="measure.action_plan:utf8:ustring:records")\ .value = "Do something awesome" browser.getControl(name="measure.planning_start_day:records")\ .value = "1" browser.getControl(name="measure.planning_start_month:records")\ .value = ["2"] browser.getControl(name="measure.planning_start_year:records")\ .value = "12345" browser.handleErrors = False browser.getControl("next").click() self.assertEqual(browser.url, "http://nohost/plone/client/nl/ict/" "software-development/actionplan/1/1") self.assertTrue( "Please enter a year between 2000 and 2100" in browser.contents)
def _create_megaphone(self, type='letter'): browser = Browser() browser.handleErrors = False browser.addHeader('Authorization', 'Basic root:secret') browser.open('http://nohost/plone') browser.getLink('Megaphone Action').click() browser.getControl(name='intro.widgets.megaphone_type:list').value = [type] browser.getControl('Continue').click() browser.getControl('Title').value = 'Megaphone' browser.getControl('Continue').click() browser.getControl(name='crud-edit.captcha.widgets.select:list').value = ['true'] browser.getControl('Delete').click() while 1: try: browser.getControl('Continue').click() except LookupError: break browser.getControl('Finish').click() browser.open('http://nohost/plone/megaphone') browser.getLink('Publish').click()
def doc_suite(test_dir, setUp=None, tearDown=None, globs=None): """Returns a test suite, based on doctests found in /doctest.""" suite = [] if globs is None: globs = globals() # preparing a few elements globs['test_dir'] = current_dir browser = Browser() browser.handleErrors = False globs['browser'] = browser flags = (doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE | doctest.REPORT_ONLY_FIRST_FAILURE) package_dir = os.path.split(test_dir)[0] if package_dir not in sys.path: sys.path.append(package_dir) docs = [] for dir_ in ('doctests', ): doctest_dir = os.path.join(package_dir, dir_) # filtering files on extension docs.extend([ os.path.join(doctest_dir, doc) for doc in os.listdir(doctest_dir) if doc.endswith('.txt') ]) for test in docs: suite.append( FunctionalDocFileSuite(test, optionflags=flags, globs=globs, setUp=setUp, tearDown=tearDown, test_class=TestCase, module_relative=False)) return unittest.TestSuite(suite)
def testShowFrenchEvaluation(self): from euphorie.content.tests.utils import BASIC_SURVEY # Test for http://code.simplon.biz/tracker/tno-euphorie/ticket/150 self.loginAsPortalOwner() addSurvey(self.portal, BASIC_SURVEY) browser = Browser() survey = self.portal.client.nl["ict"]["software-development"] survey.evaluation_algorithm = u"french" survey["1"]["2"].type = "risk" browser.open(survey.absolute_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", index=1).click() # Start the survey browser.getForm().submit() browser.getLink("Start Risk Identification").click() # Identify the risk browser.getControl("next").click() browser.getControl(name="answer").value = ["no"] browser.getControl("next").click() # Move on to the risk's action plan form browser.getLink("Run evaluation").click() browser.handleErrors = False browser.getLink("Next").click() # Verify number of options self.assertEqual( len(browser.getControl(name="frequency:int").controls), 4) self.assertEqual( len(browser.getControl(name="severity:int").controls), 4) # Enter some digits browser.getControl(name="frequency:int").value = ["7"] browser.getControl(name="severity:int").value = ["10"] browser.getControl("next").click() # Verify the result browser.open( "http://nohost/plone/client/nl/ict/" "software-development/actionplan/1/1") self.assertEqual(browser.getControl(name="priority").value, ["high"])
def test_ui(self): from Products.Five.testbrowser import Browser browser = Browser() browser.addHeader("Authorization", "Basic %s:%s" % (portal_owner, default_password)) browser.handleErrors = False portal_url = self.portal.absolute_url() browser.open(portal_url) # Create a folder: browser.getLink("Folder").click() form = browser.getForm("folder-base-edit") form.getControl(name="title").value = "A Calendar" form.getControl(name="form_submit").click() # Create an event: browser.getLink(id="event").click() form = browser.getForm("event-base-edit") form.getControl(name="title").value = "An Event" form.getControl(name="startDate_year").value = ["2007"] form.getControl(name="startDate_month").value = ["04"] form.getControl(name="startDate_day").value = ["01"] form.getControl(name="startDate_hour").value = ["11"] form.getControl(name="startDate_minute").value = ["00"] form.getControl(name="endDate_year").value = ["2007"] form.getControl(name="endDate_month").value = ["04"] form.getControl(name="endDate_day").value = ["01"] form.getControl(name="endDate_hour").value = ["11"] form.getControl(name="endDate_minute").value = ["00"] form.getControl(name="form_submit").click() self.failUnless("an-event" in browser.url) browser.getLink("A Calendar").click() folder_url = browser.url browser.open(folder_url + "?date=2007-04-01") calendar = browser.contents[browser.contents.index('class="ploneCalendar"') :] self.failUnless("An Event" in calendar) browser.open(folder_url + "?date=2007-05-01") calendar = browser.contents[browser.contents.index('class="ploneCalendar"') :] self.failUnless("An Event" in calendar)
def doc_suite(test_dir, setUp=None, tearDown=None, globs=None): """Returns a test suite, based on doctests found in /doctest.""" suite = [] if globs is None: globs = globals() # preparing a few elements globs["test_dir"] = current_dir browser = Browser() browser.handleErrors = False globs["browser"] = browser flags = doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE | doctest.REPORT_ONLY_FIRST_FAILURE | doctest.REPORT_UDIFF package_dir = os.path.split(test_dir)[0] if package_dir not in sys.path: sys.path.append(package_dir) docs = [] for dir_ in ("doctests", "docs"): doctest_dir = os.path.join(package_dir, dir_) # filtering files on extension docs.extend([os.path.join(doctest_dir, doc) for doc in os.listdir(doctest_dir) if doc.endswith(".txt")]) for test in docs: suite.append( FunctionalDocFileSuite( test, optionflags=flags, globs=globs, setUp=setUp, tearDown=tearDown, test_class=TestCase, module_relative=False, ) ) return unittest.TestSuite(suite)
def test_add_new_manager(self): import json from ..authentication import generate_token self.loginAsPortalOwner() country = self.portal.sectors['nl'] country.invokeFactory('euphorie.countrymanager', 'manager', login='******', password=u'manager') browser = Browser() browser.handleErrors = False browser.raiseHttpErrors = False browser.addHeader('X-Euphorie-Token', generate_token(country['manager'])) browser.post('http://nohost/plone/api/countries/nl/managers', json.dumps({'title': u'Jane Doe', 'login': '******', 'password': u'johny'})) response = json.loads(browser.contents) self.assertEqual(response['type'], 'countrymanager') self.assertEqual(response['id'], 'jane-doe') self.assertTrue('jane-doe' in country) jane = country['jane-doe'] self.assertEqual(jane.title, u'Jane Doe') self.assertEqual(jane.login, 'jane') self.assertEqual(jane.password, u'johny')
def XtestSkipChildrenFalseForMandatoryModules(self): """ Mandatory modules must have skip_children=False. It's possible that the module was optional with skip_children=True and now after the update must be mandatory. """ survey = """<sector xmlns="http://xml.simplon.biz/euphorie/survey/1.0"> <title>Sector title</title> <survey> <title>Survey title</title> <module optional="true"> <title>Module Title</title> <description><p>Testing ticket #3860</p></description> <question>What is the sound of one hand clapping?</question> <risk type="risk"> <title>This risk exists</title> <problem-description>This risk doesn't exist</problem-description> <description><p>asdg</p></description> <show-not-applicable>false</show-not-applicable> <evaluation-method>direct</evaluation-method> </risk> </module> </survey> </sector>""" self.loginAsPortalOwner() addSurvey(self.portal, survey) browser = Browser() client_survey = self.portal.client.nl["sector-title"]["survey-title"] browser.open(client_survey.absolute_url()) 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() # Enter the profile information browser.getLink("Start Risk Identification").click() # Set Skip-children to True module_identification_url = browser.url browser.handleErrors = False # XXX: The following breaks when testing with sqlite but not with # postgres. browser.getControl(name="skip_children:boolean").controls[1].click() browser.getControl(name="next", index=1).click() # Change the survey to make the module required and publish again from euphorie.client import publish survey = self.portal.sectors["nl"]["sector-title"]["survey-title"][ "test-import"] module = survey['1'] module.optional = False publisher = publish.PublishSurvey(survey, self.portal.REQUEST) publisher.publish() # We should get an update notification now browser.open(client_survey.absolute_url()) browser.getLink("Start Risk Identification").click() # We should now be on the module self.assertEqual(browser.url, module_identification_url) # But this time, the module's "optional" question (i.e to skip the # children) should not be there self.assertRaises(LookupError, browser.getControl, name='skip_children:boolean') browser.getControl(name="next", index=1).click() # Now we must see the risk, i.e skip_children=False so we *must* answer # the risk self.assertEqual( "<legend>This risk exists</legend>" in browser.contents, True) # There are 2 inputs (2 radio, 1 hidden), for yes, no and postponed. self.assertEqual(len(browser.getControl(name="answer").controls), 3) self.assertEqual( browser.getControl(name="answer:default").value, 'postponed')