class FolderFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer["app"] self.portal = self.layer["portal"] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader("Authorization", "Basic %s:%s" % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD)) def test_add_folder(self): self.browser.open(self.portal_url) self.browser.getLink(url="http://nohost/plone/++add++Folder").click() self.browser.getControl(name="form.widgets.IDublinCore.title").value = "My folder" self.browser.getControl(name="form.widgets.IShortName.id").value = "" self.browser.getControl(name="form.widgets.IDublinCore.description").value = "This is my folder." self.browser.getControl("Save").click() self.assertTrue(self.browser.url.endswith("my-folder/view")) self.assertTrue("My folder" in self.browser.contents) self.assertTrue("This is my folder" in self.browser.contents) def test_add_folder_with_shortname(self): self.browser.open(self.portal_url) self.browser.getLink(url="http://nohost/plone/++add++Folder").click() self.browser.getControl(name="form.widgets.IDublinCore.title").value = "My folder" self.browser.getControl(name="form.widgets.IShortName.id").value = "my-special-folder" self.browser.getControl("Save").click() self.assertTrue(self.browser.url.endswith("my-special-folder/view"))
class AudioFunctionalTest(unittest.TestCase): layer = MEDIA_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_add_audio(self): self.browser.open(self.portal_url) self.browser.getLink('Audio').click() self.browser.getControl( name='form.widgets.IDublinCore.title').value = "My audio" self.browser.getControl( name='form.widgets.IDublinCore.description')\ .value = "This is my audio." file_path = os.path.join(test_file_dir, "test.mp3") file_ctl = self.browser.getControl( name='form.widgets.IAudio.audio_file') file_ctl.add_file(open(file_path), 'audio/mp3', 'test.mp3') self.browser.getControl('Save').click() self.assertTrue('My audio' in self.browser.contents) self.assertTrue('This is my audio' in self.browser.contents) self.assertTrue('<audio' in self.browser.contents) self.assertIn('++widget++form.widgets.IAudio.audio_file/@@stream', self.browser.contents)
class SearchControlPanelFunctionalTest(unittest.TestCase): """Test that changes in the search control panel are actually stored in the registry. """ layer = PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.portal_url = self.portal.absolute_url() self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_search_control_panel_link(self): self.browser.open("%s/@@overview-controlpanel" % self.portal_url) self.browser.getLink('Search').click() def test_search_control_panel_backlink(self): self.browser.open("%s/@@search-controlpanel" % self.portal_url) self.assertTrue("General" in self.browser.contents) def test_search_control_panel_sidebar(self): self.browser.open("%s/@@search-controlpanel" % self.portal_url) self.browser.getLink('Site Setup').click() self.assertEqual(self.browser.url, 'http://nohost/plone/@@overview-controlpanel') def test_search_controlpanel_view(self): view = getMultiAdapter((self.portal, self.portal.REQUEST), name="search-controlpanel") view = view.__of__(self.portal) self.assertTrue(view()) def test_enable_livesearch(self): self.browser.open("%s/@@search-controlpanel" % self.portal_url) self.browser.getControl('Enable LiveSearch').selected = True self.browser.getControl('Save').click() registry = getUtility(IRegistry) settings = registry.forInterface(ISearchSchema, prefix="plone") self.assertEqual(settings.enable_livesearch, True) def test_types_not_searched(self): self.browser.open("%s/@@search-controlpanel" % self.portal_url) self.browser.getControl( name='form.widgets.types_not_searched:list').value = [ 'Discussion Item', 'News Item' ] self.browser.getControl('Save').click() registry = getUtility(IRegistry) settings = registry.forInterface(ISearchSchema, prefix="plone") self.assertFalse('Discussion Item' in settings.types_not_searched) self.assertFalse('News Item Item' in settings.types_not_searched)
class LinkFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic {0}:{1}'.format(SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_add_link(self): self.browser.open(self.portal_url) self.browser.getLink('Link').click() self.browser.getControl(name='form.widgets.IDublinCore.title')\ .value = 'My link' self.browser.getControl(name='form.widgets.IDublinCore.description')\ .value = 'This is my link.' self.browser.getControl(name='form.widgets.IShortName.id')\ .value = 'my-special-link' self.browser.getControl(name='form.widgets.remoteUrl.external')\ .value = 'https://plone.org' self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('my-special-link/view')) self.assertTrue('My link' in self.browser.contents) self.assertTrue('This is my link' in self.browser.contents)
class MarkupControlPanelFunctionalTest(unittest.TestCase): """Make sure changes in the markup control panel are properly stored in plone.app.registry. """ layer = PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.portal_url = self.portal.absolute_url() self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_markup_control_panel_link(self): self.browser.open("%s/@@overview-controlpanel" % self.portal_url) self.browser.getLink('Markup').click() def test_markup_control_panel_backlink(self): self.browser.open("%s/@@markup-controlpanel" % self.portal_url) self.assertTrue("Content" in self.browser.contents) def test_markup_control_panel_sidebar(self): self.browser.open("%s/@@markup-controlpanel" % self.portal_url) self.browser.getLink('Site Setup').click() self.assertEqual(self.browser.url, 'http://nohost/plone/@@overview-controlpanel') def test_markup_controlpanel_view(self): view = getMultiAdapter((self.portal, self.portal.REQUEST), name="markup-controlpanel") view = view.__of__(self.portal) self.assertTrue(view()) def test_default_type(self): self.browser.open("%s/@@markup-controlpanel" % self.portal_url) self.browser.getControl('Default format').value = ['text/plain'] self.browser.getControl('Save').click() registry = getUtility(IRegistry) settings = registry.forInterface(IMarkupSchema, prefix='plone') self.assertEqual(settings.default_type, 'text/plain') def test_allowed_types(self): self.browser.open("%s/@@markup-controlpanel" % self.portal_url) self.browser.getControl( name='form.widgets.allowed_types:list').value = [ 'text/html', 'text/x-web-textile' ] self.browser.getControl('Save').click() registry = getUtility(IRegistry) settings = registry.forInterface(IMarkupSchema, prefix='plone') self.assertEqual(settings.allowed_types, ('text/html', 'text/x-web-textile'))
def test_navigate_save(self): from zope.component import getUtility from plone.registry.interfaces import IRegistry from my315ok.products.interfaces import IMy315okProductsSettings app = self.layer['app'] portal = self.layer['portal'] browser = Browser(app) browser.handleErrors = False # Simulate HTTP Basic authentication browser.addHeader('Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) # Open Plone's site setup browser.open("%s/plone_control_panel" % portal.absolute_url()) # Go to the control panel browser.getLink('My315okProducts settings').click() # Edit the DAM codes field browser.getControl(name='form.widgets.wordsNum').value = "32" browser.getControl('Save').click() # Verify that this made it into the registry registry = getUtility(IRegistry) settings = registry.forInterface(IMy315okProductsSettings) self.assertEqual(settings.wordsNum,32)
class DocumentFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic {0}:{1}'.format( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_add_document(self): self.browser.open(self.portal_url) self.browser.getLink(url='http://nohost/plone/++add++Document').click() widget = 'form.widgets.IDublinCore.title' self.browser.getControl(name=widget).value = 'My document' widget = 'form.widgets.IDublinCore.description' self.browser.getControl(name=widget).value = 'This is my document.' widget = 'form.widgets.IRichText.text' self.browser.getControl(name=widget).value = 'Lorem Ipsum' widget = 'form.widgets.IShortName.id' self.browser.getControl(name=widget).value = 'my-special-document' self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('my-special-document/view')) self.assertTrue('My document' in self.browser.contents) self.assertTrue('This is my document' in self.browser.contents) self.assertTrue('Lorem Ipsum' in self.browser.contents)
class LinkFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic {0}:{1}'.format( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_add_link(self): self.browser.open(self.portal_url) self.browser.getLink('Link').click() self.browser.getControl(name='form.widgets.IDublinCore.title')\ .value = 'My link' self.browser.getControl(name='form.widgets.IDublinCore.description')\ .value = 'This is my link.' self.browser.getControl(name='form.widgets.IShortName.id')\ .value = 'my-special-link' self.browser.getControl(name='form.widgets.remoteUrl.external')\ .value = 'https://plone.org' self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('my-special-link/view')) self.assertTrue('My link' in self.browser.contents) self.assertTrue('This is my link' in self.browser.contents)
def test_can_enter_expiry_date(self): browser = Browser(self.layer['app']) portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Member', 'Manager')) document = createObject(portal, "Document", "effective_date_transition_doc", delete_first=True, title="Workflow note") transaction.commit() browser_login(portal, browser) browser.open(document.absolute_url()) browser.getLink("Manage page").click() browser.getLink("Public draft").click() workflow_actions = browser.getControl(name="form.widgets.workflow_action:list") workflow_actions.getControl(value="publish").click() # We set up a comment this time next_year = datetime.now() + timedelta(365) next_year = next_year - timedelta(seconds=next_year.second, microseconds=next_year.microsecond) browser.getControl(name="form.widgets.expiration_date-day").value = str(next_year.day) browser.getControl(name="form.widgets.expiration_date-month").value = [str(next_year.month)] browser.getControl(name="form.widgets.expiration_date-year").value = str(next_year.year) browser.getControl(name="form.widgets.expiration_date-hour").value = str(next_year.hour) browser.getControl(name="form.widgets.expiration_date-min").value = str(next_year.minute) browser.getControl("Save").click() # and it shows up in the workflow history self.assertEqual("publish", document.workflow_history['plone_workflow'][-1]['action']) self.assertEqual("published", portal.portal_workflow.getInfoFor(document, "review_state")) self.assertEqual(DateTime(next_year), document.getRawExpirationDate()) portal.manage_delObjects(['effective_date_transition_doc'])
class FolderFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_add_folder(self): self.browser.open(self.portal_url) self.browser.getLink(url='http://nohost/plone/++add++Folder').click() self.browser.getControl(name='form.widgets.IDublinCore.title')\ .value = "My folder" self.browser.getControl(name='form.widgets.IDublinCore.description')\ .value = "This is my folder." self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('my-folder/view')) self.assertTrue('My folder' in self.browser.contents) self.assertTrue('This is my folder' in self.browser.contents)
class PAMFuncTestHelperViews(unittest.TestCase): layer = PLONEAPPMULTILINGUAL_FUNCTIONAL_TESTING def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] self.browser = Browser(self.layer['app']) self.browser.handleErrors = False self.portal_url = self.portal.absolute_url() language_tool = getToolByName(self.portal, 'portal_languages') language_tool.addSupportedLanguage('ca') language_tool.addSupportedLanguage('es') def test_universal_link_view(self): self.browser.addHeader('Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD)) self.browser.addHeader('Accept-Language', 'ca') setRoles(self.portal, TEST_USER_ID, ['Manager']) login(self.portal, TEST_USER_NAME) doc1 = makeContent(self.portal, 'Document', id='doc1') doc1.setLanguage('en') doc1_ca = makeTranslation(doc1, 'ca') doc1_ca.setTitle(u"Foo") doc1_ca.setLanguage('ca') doc1_es = makeTranslation(doc1, 'es') doc1_es.setTitle(u"Foo") doc1_es.setLanguage('es') transaction.commit() self.browser.open(doc1.absolute_url()) self.browser.getLink("Universal Link").click() self.assertEqual(self.browser.url, 'http://nohost/plone/doc1-ca')
class PAMFuncTestHelperViews(unittest.TestCase): layer = PAM_FUNCTIONAL_TESTING def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] self.browser = Browser(self.layer['app']) self.browser.handleErrors = False self.browser.addHeader('Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD)) def test_universal_link_view(self): self.browser.addHeader('Accept-Language', 'ca') a_ca = createContentInContainer( self.portal['ca'], 'Document', title=u"Test document") a_en = api.translate(a_ca, 'en') api.translate(a_ca, 'es') transaction.commit() self.browser.open(a_en.absolute_url()) self.browser.getLink("Universal Link").click() self.assertEqual(self.browser.url, a_ca.absolute_url())
def test_can_enter_expiration_date_without_transaction(self): browser = Browser(self.layer['app']) portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Member', 'Manager')) document = createObject(portal, "Document", "expiration_date_without_transition_doc", delete_first=True, title="Workflow note") transaction.commit() browser_login(portal, browser) browser.open(document.absolute_url()) browser.getLink("Manage page").click() browser.getLink("Public draft").click() # Don't select any workflow action, but set date next_year = datetime.now() + timedelta(365) next_year = next_year - timedelta(seconds=next_year.second, microseconds=next_year.microsecond) browser.getControl(name="form.widgets.expiration_date-day").value = str(next_year.day) browser.getControl(name="form.widgets.expiration_date-month").value = [str(next_year.month)] browser.getControl(name="form.widgets.expiration_date-year").value = str(next_year.year) browser.getControl(name="form.widgets.expiration_date-hour").value = str(next_year.hour) browser.getControl(name="form.widgets.expiration_date-min").value = str(next_year.minute) browser.getControl("Save").click() # Still draft, but expiration date set self.assertEqual("visible", portal.portal_workflow.getInfoFor(document, "review_state")) self.assertEqual(DateTime(next_year), document.getRawExpirationDate())
class ConflictTests(TestCase): layer = LEGACY_COLLECTIVE_SOLR_FUNCTIONAL_TESTING def setUp(self): activateAndReindex(self.layer['portal']) commit() self.browser = Browser(self.layer['app']) self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_retry_on_conflict(self): self.browser.open(self.layer['portal'].absolute_url()) self.browser.getLink('Page').click() self.browser.getControl('Title', index=0).value = 'Foo' component.provideHandler(raise_on_first_add, ( Interface, IObjectCreatedEvent, )) self.browser.getControl('Save').click() self.assertEqual(len(UIDS), 2) self.assertEqual(len(solrSearchResults(SearchableText='Foo')), 1) sm = component.getSiteManager() sm.unregisterHandler(raise_on_first_add, ( Interface, IObjectCreatedEvent, ))
class PAMFuncTestHelperViews(unittest.TestCase): layer = PAM_FUNCTIONAL_TESTING def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] alsoProvides(self.layer['request'], IPloneAppMultilingualInstalled) self.browser = Browser(self.layer['app']) self.browser.handleErrors = False self.browser.addHeader('Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD)) self.settings = getUtility(IRegistry).forInterface( ILanguageSchema, prefix='plone') def test_universal_link_view(self): self.settings.use_request_negotiation = True self.browser.addHeader('Accept-Language', 'ca') a_ca = createContentInContainer( self.portal['ca'], 'Document', title=u"Test document") a_en = api.translate(a_ca, 'en') api.translate(a_ca, 'es') transaction.commit() self.browser.open(a_en.absolute_url()) self.browser.getLink("Universal link").click() self.assertEqual(self.browser.url, a_ca.absolute_url())
class PAMFuncTestHelperViews(unittest.TestCase): layer = PAM_FUNCTIONAL_TESTING def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] self.browser = Browser(self.layer['app']) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD)) def test_universal_link_view(self): self.browser.addHeader('Accept-Language', 'ca') a_ca = createContentInContainer(self.portal['ca'], 'Document', title=u"Test document") a_en = api.translate(a_ca, 'en') api.translate(a_ca, 'es') transaction.commit() self.browser.open(a_en.absolute_url()) self.browser.getLink("Universal Link").click() self.assertEqual(self.browser.url, a_ca.absolute_url())
class DocumentFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic {0}:{1}'.format(SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_add_document(self): self.browser.open(self.portal_url) self.browser.getLink(url='http://nohost/plone/++add++Document').click() widget = 'form.widgets.IDublinCore.title' self.browser.getControl(name=widget).value = 'My document' widget = 'form.widgets.IDublinCore.description' self.browser.getControl(name=widget).value = 'This is my document.' widget = 'form.widgets.IRichTextBehavior.text' self.browser.getControl(name=widget).value = 'Lorem Ipsum' widget = 'form.widgets.IShortName.id' self.browser.getControl(name=widget).value = 'my-special-document' self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('my-special-document/view')) self.assertTrue('My document' in self.browser.contents) self.assertTrue('This is my document' in self.browser.contents) self.assertTrue('Lorem Ipsum' in self.browser.contents)
def test_can_enter_changenote(self): browser = Browser(self.layer['app']) portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Member', 'Manager')) document = createObject(portal, "Document", "changenote_transition_doc", delete_first=True, title="Workflow note") transaction.commit() browser_login(portal, browser) browser.open(document.absolute_url()) browser.getLink("Manage page").click() browser.getLink("Public draft").click() workflow_actions = browser.getControl( name="form.widgets.workflow_action:list") workflow_actions.getControl(value="publish").click() # We set up a comment this time browser.getControl(name="form.widgets.comment").value = "wibble fkjwel" browser.getControl("Save").click() # and it shows up in the workflow history self.assertEqual( "publish", document.workflow_history['plone_workflow'][-1]['action']) self.assertEqual( "wibble fkjwel", document.workflow_history['plone_workflow'][-1]['comments'])
class ConflictTests(TestCase): layer = LEGACY_COLLECTIVE_SOLR_FUNCTIONAL_TESTING def setUp(self): activateAndReindex(self.layer['portal']) commit() self.browser = Browser(self.layer['app']) self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_retry_on_conflict(self): self.browser.open(self.layer['portal'].absolute_url()) self.browser.getLink('Page').click() self.browser.getControl('Title', index=0).value = 'Foo' component.provideHandler( raise_on_first_add, (Interface, IObjectCreatedEvent,)) self.browser.getControl('Save').click() self.assertEqual(len(UIDS), 2) self.assertEqual(len(solrSearchResults(SearchableText='Foo')), 1) sm = component.getSiteManager() sm.unregisterHandler( raise_on_first_add, (Interface, IObjectCreatedEvent,))
class FileFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_add_pyfile(self): self.browser.open(self.portal_url) self.browser.getLink('CodeFile').click() self.browser.getControl(name='form.widgets.title')\ .value = "My file" self.browser.getControl(name='form.widgets.description')\ .value = "This is my file." file_path = os.path.join(os.path.dirname(__file__), "temp.py") file_ctl = self.browser.getControl(name='form.widgets.file') file_ctl.add_file(open(file_path), 'image/png', 'temp.py') self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('temp.py/view')) self.assertTrue('My file' in self.browser.contents) self.assertTrue('This is my file' in self.browser.contents)
class PAMFuncTestHelperViews(unittest.TestCase): layer = PAM_FUNCTIONAL_TESTING def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] alsoProvides(self.layer['request'], IPloneAppMultilingualInstalled) self.browser = Browser(self.layer['app']) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD)) self.settings = getUtility(IRegistry).forInterface(ILanguageSchema, prefix='plone') def test_universal_link_view(self): self.settings.use_request_negotiation = True self.browser.addHeader('Accept-Language', 'ca') a_ca = createContentInContainer(self.portal['ca'], 'Document', title=u"Test document") a_en = api.translate(a_ca, 'en') api.translate(a_ca, 'es') transaction.commit() self.browser.open(a_en.absolute_url()) self.browser.getLink("Universal link").click() self.assertEqual(self.browser.url, a_ca.absolute_url())
class NewsItemFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_add_news_item(self): self.browser.open(self.portal_url) self.browser.getLink('News Item').click() self.assertTrue('Title' in self.browser.contents) self.assertTrue('Description' in self.browser.contents) self.assertTrue('Text' in self.browser.contents) self.browser.getControl(name='form.widgets.IDublinCore.title')\ .value = "My news item" self.browser.getControl(name='form.widgets.IDublinCore.description')\ .value = "This is my news item." self.browser.getControl(name='form.widgets.text')\ .value = "Lorem Ipsum" self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('my-news-item/view')) self.assertTrue('My news item' in self.browser.contents) self.assertTrue('This is my news item' in self.browser.contents) self.assertTrue('Lorem Ipsum' in self.browser.contents)
class FileFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_alternative_mime_icon_doc_for_file(self): provideAdapter(AssignRoles) self.browser.open(self.portal_url) self.browser.getLink('File').click() self.browser.getControl(name='form.widgets.title')\ .value = "My file" self.browser.getControl(name='form.widgets.description')\ .value = "This is my doc file." file_path = os.path.join(os.path.dirname(__file__), "file.doc") file_ctl = self.browser.getControl(name='form.widgets.file') file_ctl.add_file(open(file_path), 'application/msword', 'file.doc') self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('file.doc/view')) self.assertTrue('custom.png' in self.browser.contents)
class PAMFuncTestHelperViews(unittest.TestCase): layer = PLONEAPPMULTILINGUAL_FUNCTIONAL_TESTING def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] self.browser = Browser(self.layer['app']) self.browser.handleErrors = False self.portal_url = self.portal.absolute_url() language_tool = getToolByName(self.portal, 'portal_languages') language_tool.addSupportedLanguage('ca') language_tool.addSupportedLanguage('es') def test_universal_link_view(self): self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD)) self.browser.addHeader('Accept-Language', 'ca') setRoles(self.portal, TEST_USER_ID, ['Manager']) login(self.portal, TEST_USER_NAME) doc1 = makeContent(self.portal, 'Document', id='doc1') doc1.setLanguage('en') doc1_ca = makeTranslation(doc1, 'ca') doc1_ca.edit(title="Foo", language='ca') doc1_es = makeTranslation(doc1, 'es') doc1_es.edit(title="Foo", language='es') transaction.commit() self.browser.open(doc1.absolute_url()) self.browser.getLink("Universal Link").click() self.assertEqual(self.browser.url, 'http://nohost/plone/doc1-ca')
class AudioFunctionalTest(unittest.TestCase): layer = MEDIA_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_add_audio(self): self.browser.open(self.portal_url) self.browser.getLink('Audio').click() self.browser.getControl( name='form.widgets.IDublinCore.title').value = "My audio" self.browser.getControl( name='form.widgets.IDublinCore.description')\ .value = "This is my audio." file_path = os.path.join(test_file_dir, "test.mp3") file_ctl = self.browser.getControl( name='form.widgets.IAudio.audio_file') file_ctl.add_file(open(file_path), 'audio/mp3', 'test.mp3') self.browser.getControl('Save').click() self.assertTrue('My audio' in self.browser.contents) self.assertTrue('This is my audio' in self.browser.contents) self.assertTrue('<audio' in self.browser.contents) self.assertIn( '++widget++form.widgets.IAudio.audio_file/@@stream', self.browser.contents)
def test_available_workflow_transition_shown_in_workflow_panel(self): browser = Browser(self.layer['app']) portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Member', 'Manager')) document = createObject(portal, "Document", "transition_shown_in_workflow_panel_doc", delete_first=True, title="Workflow transitions") # Commit so the change in roles is visible to the browser transaction.commit() browser_login(portal, browser) browser.open(document.absolute_url()) browser.getLink("Manage page").click() browser.getLink("Public draft").click() # The submit button should be available transitions = portal.portal_workflow.getTransitionsFor(document) transition_ids = [transition['id'] for transition in transitions] # Ensure the workflow transition we are going to look for in the # workflow panel is actually available to save debugging headaches # later self.assertEqual(sorted(['submit', 'hide', 'publish']), sorted(transition_ids)) # Make sure we have both labels and values for all possible workflow actions workflow_actions = browser.getControl(name="form.widgets.workflow_action:list") self.assertEqual(len(workflow_actions.mech_control.items),3) self.assertEqual(workflow_actions.getControl(label='Submit for publication').optionValue, 'submit') self.assertEqual(workflow_actions.getControl(label='Make private').optionValue, 'hide') self.assertEqual(workflow_actions.getControl(label='Publish').optionValue, 'publish')
class VideoFunctionalTest(unittest.TestCase): layer = MEDIA_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] settings = GlobalSettings(self.portal) settings.additional_video_formats = [] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_add_video(self): self.browser.open(self.portal_url) self.browser.getLink('Video').click() self.browser.getControl( name='form.widgets.IDublinCore.title').value = "My video" self.browser.getControl( name='form.widgets.IDublinCore.description')\ .value = "This is my video." file_path = os.path.join(test_file_dir, "test.mp4") file_ctl = self.browser.getControl( name='form.widgets.IVideo.video_file') file_ctl.add_file(open(file_path, 'rb'), 'video/mp4', 'test.mp4') self.browser.getControl('Save').click() self.assertTrue('My video' in self.browser.contents) self.assertTrue('This is my video' in self.browser.contents) self.assertTrue('<video' in self.browser.contents) self.assertIn('++widget++form.widgets.IVideo.video_file/@@stream', self.browser.contents) @unittest.skip('Async conversion does not work in py3 yet') def test_add_video_creates_three_sources(self): self.browser.open(self.portal_url) self.browser.getLink('Video').click() self.browser.getControl( name='form.widgets.IDublinCore.title').value = "My video" self.browser.getControl( name='form.widgets.IDublinCore.description')\ .value = "This is my video." file_path = os.path.join(test_file_dir, "test.mp4") file_ctl = self.browser.getControl( name='form.widgets.IVideo.video_file') file_ctl.add_file(open(file_path, 'rb'), 'video/mp4', 'test.mp4') self.browser.getControl('Save').click() self.assertTrue('My video' in self.browser.contents) self.assertTrue('This is my video' in self.browser.contents) self.assertTrue('<video' in self.browser.contents) self.assertEqual(self.browser.contents.count('<source'), 3) self.assertIn('++widget++form.widgets.IVideo.video_file/@@stream', self.browser.contents)
class EditorTestCase(unittest.TestCase): layer = PLONE_APP_IMAGECROPPING_FUNCTIONAL def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] # setup testbrowser self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic {0:s}:{1:s}'.format(TEST_USER_NAME, TEST_USER_PASSWORD) ) self.createSingleImageType() def createSingleImageType(self): # create test image as testuser self.portal.invokeFactory('Image', 'testimage', title=u'I\'m a testing Image') self.img = self.portal['testimage'] self.img.reindexObject() transaction.commit() f = file(join(dirname(tests.__file__), 'plone-logo.png')) self.img.setImage(f) f.close() def test_singleimage_editorview(self): # is there the cropping action tab self.browser.open('{0:s}/view'.format(self.img.absolute_url())) self.assertIn('Cropping', self.browser.contents) self.browser.getLink('Cropping').click() self.assertIn(u'Image Cropping Editor', self.browser.contents) # check for non existing image field column self.assertNotIn(u'Available Image Fields', self.browser.contents) # check for scales column self.assertTrue(u'Available Image Scales' in self.browser.contents) # check for editor buttons self.assertIn(u'Save cropping information', self.browser.contents) self.assertIn(u'Remove cropping information', self.browser.contents) def test_editview_crop(self): request = self.layer['request'] request.form.update({'x1': 1.0, 'y1': 2.7, 'x2': 10.6, 'y2': 8.4, 'scalename': 'mini'}) cropview = self.img.restrictedTraverse('@@croppingeditor') cropview._crop() def tearDown(self): self.portal.manage_delObjects(['testimage', ])
def test_factory_menu_item(self): browser = Browser(self.app) portalURL = self.portal.absolute_url() browser.addHeader("Authorization", "Basic {0}:{1}".format(SITE_OWNER_NAME, SITE_OWNER_PASSWORD)) browser.open(portalURL + "/upload-folder") self.assertIn("Multiple Files", browser.contents) self.assertIn("@@media_uploader", browser.contents) browser.getLink("Multiple Files").click() self.assertIn("@@media_uploader", browser.url) self.assertIn("Add files or images…", browser.contents)
def test_factory_menu_item(self): browser = Browser(self.app) portalURL = self.portal.absolute_url() browser.addHeader('Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD)) browser.open(portalURL + '/upload-folder') self.assertIn('Multiple Files', browser.contents) self.assertIn('@@media_uploader', browser.contents) browser.getLink('Multiple Files').click() self.assertIn('@@media_uploader', browser.url) self.assertIn('Add files or images…', browser.contents)
class EditorTestCase(unittest.TestCase): layer = PLONE_APP_IMAGECROPPING_FUNCTIONAL def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] # setup testbrowser self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( TEST_USER_NAME, TEST_USER_PASSWORD, )) def createSingleImageType(self): # create test image as testuser _createObjectByType('Image', self.portal, 'testimage', title=u"I'm a testing Image") transaction.commit() self.img = self.portal.testimage f = file(join(dirname(tests.__file__), 'plone-logo.png')) self.img.setImage(f) f.close() def test_singleimage_editorview(self): """ """ self.createSingleImageType() # is there the cropping action tab self.browser.open("%s/view" % self.img.absolute_url()) self.assertIn("Cropping", self.browser.contents) self.browser.getLink('Cropping').click() self.assertIn(u"Image Cropping Editor", self.browser.contents) # check for non existing image field column self.assertNotIn(u"Available Image Fields", self.browser.contents) # check for scales column self.assertTrue(u"Available Image Scales" in self.browser.contents) # check for editor buttons self.assertIn(u"Save cropping information", self.browser.contents) self.assertIn(u"Remove cropping information", self.browser.contents) def tearDown(self): self.portal.manage_delObjects([ 'testimage', ])
class EventFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_add_event(self): self.browser.open(self.portal_url) self.browser.getLink('Event').click() self.browser.getControl( name='form.widgets.IDublinCore.title' ).value = "My event" self.browser.getControl( name='form.widgets.IDublinCore.description' ).value = "This is my event." self.browser.getControl( name='form.widgets.IEventSummary.text' ).value = "Lorem Ipsum" self.browser.getControl( name='form.widgets.IEventBasic.start-day' ).value = ['1'] self.browser.getControl( name='form.widgets.IEventBasic.start-month' ).value = ['1'] self.browser.getControl( name='form.widgets.IEventBasic.start-year' ).value = ['2013'] self.browser.getControl( name='form.widgets.IEventBasic.end-day' ).value = ['12'] self.browser.getControl( name='form.widgets.IEventBasic.end-month' ).value = ['1'] self.browser.getControl( name='form.widgets.IEventBasic.end-year' ).value = ['2013'] self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('my-event/view')) self.assertTrue('My event' in self.browser.contents) self.assertTrue('This is my event' in self.browser.contents) self.assertTrue('Lorem Ipsum' in self.browser.contents) self.assertTrue('2013-01-01' in self.browser.contents) self.assertTrue('2013-01-12' in self.browser.contents)
class TestManageUpgrades(TestCase): layer = FTW_UPGRADE_FUNCTIONAL_TESTING def setUp(self): super(TestManageUpgrades, self).setUp() self.portal_url = self.layer['portal'].portal_url() self.browser = Browser(self.layer['app']) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( TEST_USER_NAME, TEST_USER_PASSWORD, )) def test_registered_in_controlpanel(self): self.browser.open(self.portal_url + '/@@overview-controlpanel') link = self.browser.getLink('Upgrades') self.assertEqual(link.url, self.portal_url + '/@@manage-upgrades') def test_manage_view_renders(self): self.browser.open(self.portal_url + '/@@manage-upgrades') link = self.browser.getLink('Up to Site Setup') self.assertEqual(link.url, self.portal_url + '/@@overview-controlpanel') self.assertIn('plone.app.discussion:default', self.browser.contents) def test_install(self): profileid = 'ftw.upgrade.tests.profiles:navigation-index' portal_setup = getToolByName(self.layer['portal'], 'portal_setup') portal_setup.runAllImportStepsFromProfile('profile-%s' % profileid, purge_old=False) transaction.commit() catalog = getToolByName(self.layer['portal'], 'portal_catalog') self.assertEqual( type(catalog.Indexes.get('excludeFromNav')).__name__, 'KeywordIndex') self.browser.open(self.portal_url + '/@@manage-upgrades') self.assertIn('ftw.upgrade.tests.profiles:navigation-index', self.browser.contents) # This upgrade changes KeywordIndex -> FieldIndex self.browser.getControl(name='submitted').click() self.assertEqual( type(catalog.Indexes.get('excludeFromNav')).__name__, 'FieldIndex')
def setUpEnvironment(self, portal): super(BrowserIntegrationTesting, self).setUpEnvironment(portal) #portal = self['portal'] browser = Browser(portal) browser.addHeader('Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD)) browser.open(portal.absolute_url()+'/@@listingviews_controlpanel') #browser.getControl(name='__ac_name').value = SITE_OWNER_NAME #browser.getControl(name='__ac_password').value = SITE_OWNER_PASSWORD #browser.getControl(name='submit').click() self['manager'] = browser # create dummy content # browser.getLink('Home').click() # browser.getLink('Folder').click() # browser.getControl('Title').value = 'folder1' # browser.getControl('Save').click() # # #Add an item # browser.getLink('Page').click() # browser.getControl('Title').value = 'item1' # browser.getControl('Save').click() # browser.getLink('Publish').click() # # # browser.getLink('folder1').click() # # self.createATTopic(portal) # browser.getLink('Collection').click() # browser.getControl('Title', index=0).value = "collection1" # browser.getControl('Location', index=0).click() # form = browser.getControl('Location', index=0).mech_form # form.new_control('text','query.i:records', {'value':'path'}) # form.new_control('text','query.o:records', {'value':'plone.app.querystring.operation.string.relativePath'}) # form.new_control('text','query.v:records', {'value':'..'}) # browser.getControl('Save').click() browser.getLink('Home').click() browser.handleErrors = False 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
class TestManageUpgrades(TestCase): layer = FTW_UPGRADE_FUNCTIONAL_TESTING def setUp(self): super(TestManageUpgrades, self).setUp() self.portal_url = self.layer['portal'].portal_url() self.browser = Browser(self.layer['app']) self.browser.handleErrors = False self.browser.addHeader('Authorization', 'Basic %s:%s' % ( TEST_USER_NAME, TEST_USER_PASSWORD,)) def test_registered_in_controlpanel(self): self.browser.open(self.portal_url + '/@@overview-controlpanel') link = self.browser.getLink('Upgrades') self.assertEqual(link.url, self.portal_url + '/@@manage-upgrades') def test_manage_view_renders(self): self.browser.open(self.portal_url + '/@@manage-upgrades') link = self.browser.getLink('Up to Site Setup') self.assertEqual(link.url, self.portal_url + '/@@overview-controlpanel') self.assertIn('plone.app.discussion:default', self.browser.contents) def test_install(self): profileid = 'ftw.upgrade.tests.profiles:navigation-index' portal_setup = getToolByName(self.layer['portal'], 'portal_setup') portal_setup.runAllImportStepsFromProfile( 'profile-%s' % profileid, purge_old=False) transaction.commit() catalog = getToolByName(self.layer['portal'], 'portal_catalog') self.assertEqual( type(catalog.Indexes.get('excludeFromNav')).__name__, 'KeywordIndex') self.browser.open(self.portal_url + '/@@manage-upgrades') self.assertIn('ftw.upgrade.tests.profiles:navigation-index', self.browser.contents) # This upgrade changes KeywordIndex -> FieldIndex self.browser.getControl(name='submitted').click() self.assertEqual( type(catalog.Indexes.get('excludeFromNav')).__name__, 'FieldIndex')
def test_factory_menu_item(self): browser = Browser(self.app) portalURL = self.portal.absolute_url() browser.addHeader( 'Authorization', 'Basic {0}:{1}'.format(SITE_OWNER_NAME, SITE_OWNER_PASSWORD), ) browser.open(portalURL + '/upload-folder') self.assertIn('Multiple Files', browser.contents) self.assertIn('@@media_uploader', browser.contents) browser.getLink('Multiple Files').click() self.assertIn('@@media_uploader', browser.url) self.assertIn('Add files…', browser.contents)
def setUpPloneSite(self, portal): applyProfile(portal, 'jarn.xmpp.collaboration:default') registry = getUtility(IRegistry) registry['jarn.xmpp.collaborationJID'] = 'collaboration.localhost' if HAS_DEXTERITY: self.applyProfile(portal, 'plone.app.dexterity:default') # Surely there are better ways of doing this than TTW, feel free to # replace. import transaction from plone.testing.z2 import Browser from plone.app.testing import TEST_USER_ID, TEST_USER_PASSWORD from plone.app.testing import setRoles from plone.testing import z2 setRoles(portal, TEST_USER_ID, ['Manager']) transaction.commit() with z2.zopeApp() as app: browser = Browser(app) browser.handleErrors = False browser.addHeader('Authorization', 'Basic %s:%s' % (TEST_USER_ID, TEST_USER_PASSWORD, )) # Create a type browser.open('http://nohost/plone/@@dexterity-types') browser.getControl('Add New Content Type').click() browser.getControl('Type Name').value = 'MyType' browser.getControl('Short Name').value = 'mytype' browser.getControl('Add').click() #Add fields browser.getLink('MyType').click() fields = [('textline', 'Text line (String)'), ('text', 'Text'), ('richtext', 'Rich Text')] for field_id, field_type in fields: browser.getControl('Add new field').click() browser.getControl('Title').value = field_id browser.getControl('Short Name').value = field_id browser.getControl('Field type').getControl( value=field_type).selected = True browser.getControl('Add').click() # Setup behaviors portal.portal_types.mytype.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IDublinCore', 'plone.app.content.interfaces.INameFromTitle', 'jarn.xmpp.collaboration.interfaces.ICollaborativelyEditable') setRoles(portal, TEST_USER_ID, ['Member'])
class TestIDFromTitle(FunctionalTestCase): """Browsertests to make sure ATImages derive default IDs from titles. TODO: Merge into TestATImageFunctional, below. """ def afterSetUp(self): self.userId = 'fred' self.password = '******' self.portal.acl_users.userFolderAddUser( self.userId, self.password, ['Manager'], []) commit() self.browser = Browser(self.layer['app']) self._log_in() def _log_in(self): """Log in as someone who can add new Images.""" self.browser.open(self.portal.absolute_url()) self.browser.getLink('Log in').click() self.browser.getControl('Login Name').value = self.userId self.browser.getControl('Password').value = self.password self.browser.getControl('Log in').click() def _make_image(self, title, filename='canoneye.jpg'): """Add a new Image at the root of the Plone site.""" self.browser.open(self.portal.absolute_url() + '/createObject?type_name=Image') self.browser.getControl('Title').value = title image = self.browser.getControl(name='image_file') image.filename = filename TEST_JPEG_FILE.seek(0) image.value = TEST_JPEG_FILE self.browser.getControl('Save').click() def test_image_id_from_filename_and_title(self): # Get ID from filename: self._make_image('') self.assertTrue('canoneye.jpg' in self.browser.url) # Get ID from title. # As a side effect, make sure the ID validator doesn't overzealously # deny our upload of something else called canoneye.jpg, even though # we're not going to compute its ID from its filename. self._make_image('Wonderful Image') self.assertTrue('/wonderful-image' in self.browser.url) def test_image_id_from_unicode_title(self): self._make_image('', filename=u'Pictüre 1.png'.encode('utf-8')) normalized = 'Picture%201.png' self.assertTrue(normalized in self.browser.url)
class ATWidgetTestCase(IntegrationTestCase): def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) self.portal.invokeFactory('Folder', 'test-folder') setRoles(self.portal, TEST_USER_ID, ['Member']) self.folder = self.portal['test-folder'] self.obj = makeContent( self.folder, portal_type='RecurrenceType', id='testobj' ) self.field = self.obj.getField('rec') self.widget = self.field.widget login(self.portal, TEST_USER_NAME) self.browser = Browser(self.layer['app']) self.browser.handleErrors = False transaction.commit() def tearDown(self): super(ATWidgetTestCase, self).tearDown() self.portal.manage_delObjects(['test-folder']) transaction.commit() def test_widget_properties(self): widget = self.widget self.assertEqual(widget.macro_edit, 'recurrence_widget') self.assertTrue(widget.startField == 'test_start_field') self.assertTrue(widget.startYear == 'test_start_year') self.assertTrue(widget.startMonth == 'test_start_month') self.assertTrue(widget.startDay == 'test_start_day') self.assertTrue(widget.first_day == 4) def test_widget_process(self): self.assertFalse(self.widget.process_form(self.obj, self.field, {})) self.assertEqual( self.widget.process_form(self.obj, self.field, {'rec': TESTVALUE}), (TESTVALUE, {}) ) def test_widget_rendering(self): self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD,) ) self.browser.open(self.obj.absolute_url()) self.browser.getLink('Edit').click() self.assertIn('Recurrence', self.browser.contents)
def test_panel_linked_to_in_menu(self): browser = Browser(self.layer['app']) portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Member', 'Manager')) # Commit so the change in roles is visible to the browser transaction.commit() browser_login(portal, browser) browser.open(portal.absolute_url()) browser.getLink("Manage page").click() # raises exception if not present browser.getLink("Workflow actions").click() self.assertIn("form.widgets.workflow_action", browser.contents) #TODO: Should have something less magical to check for
class ATWidgetTestCase(FunctionalTestCase): def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) self.portal.invokeFactory('Folder', 'test-folder') setRoles(self.portal, TEST_USER_ID, ['Member']) self.folder = self.portal['test-folder'] self.obj = makeContent( self.folder, portal_type='RecurrenceType', id='testobj' ) self.field = self.obj.getField('rec') self.widget = self.field.widget login(self.portal, TEST_USER_NAME) self.browser = Browser(self.layer['app']) self.browser.handleErrors = False transaction.commit() def tearDown(self): super(ATWidgetTestCase, self).tearDown() self.portal.manage_delObjects(['test-folder']) transaction.commit() def test_widget_properties(self): widget = self.widget self.assertEqual(widget.macro_edit, 'recurrence_widget') self.assertTrue(widget.startField == 'test_start_field') self.assertTrue(widget.startYear == 'test_start_year') self.assertTrue(widget.startMonth == 'test_start_month') self.assertTrue(widget.startDay == 'test_start_day') self.assertTrue(widget.first_day == 4) def test_widget_process(self): self.assertFalse(self.widget.process_form(self.obj, self.field, {})) self.assertEqual( self.widget.process_form(self.obj, self.field, {'rec': TESTVALUE}), (TESTVALUE, {}) ) def test_widget_rendering(self): self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD,) ) self.browser.open(self.obj.absolute_url()) self.browser.getLink('Edit').click() self.assertIn('Recurrence', self.browser.contents)
def test_create_personal_campaign(self): # create the parent campaign portal = self.layer['portal'] sfbc = portal.portal_salesforcebaseconnector res = sfbc.create({'type': 'Campaign', 'Name': 'Test Campaign'}) campaign_id = res[0]['id'] self.ids_to_remove.append(campaign_id) campaign = createContentInContainer(portal, 'collective.salesforce.fundraising.fundraisingcampaign', checkConstraints=False, title=u'Test Campaign', allow_personal=True, sf_object_id=campaign_id) transaction.commit() # Now as a normal user, go through the steps in the browser browser = Browser(portal) browser.open('http://nohost/plone/test-campaign') browser.getLink('Create My Campaign').click() # We are redirected to log in self.assertEqual('http://nohost/plone/acl_users/credentials_cookie_auth/require_login?came_from=http%3A//nohost/plone/test-campaign/%40%40create-or-view-personal-campaign', browser.url) # Now we need to create a user browser.getControl('Full Name').value = 'Harvey Frank' browser.getControl('User Name').value = 'harvey' browser.getControl('E-mail').value = '*****@*****.**' browser.getControl(name='form.password').value = 'foobar' browser.getControl('Confirm password').value = 'foobar' browser.getControl('Register').click() # We should now be on the personal campaign add form, and logged in. self.assertEqual('http://nohost/plone/test-campaign/@@create-personal-campaign-page', browser.url) self.assertTrue('Log out' in browser.contents) # A contact should have been created in Salesforce, and its id recorded as a member property. sf_id = portal.portal_membership.getMemberById('harvey').getProperty('sf_object_id') self.assertTrue(sf_id) self.ids_to_remove.append(sf_id) # Create the personal campaign browser.getControl('Title').value = 'My campaign' browser.getControl('Goal').value = '42' browser.getControl(name='form.widgets.description').value = 'pitch' browser.getControl(name='form.widgets.personal_appeal').value = 'Please contribute.' browser.getControl(name='form.widgets.thank_you_message').value = 'Thank you' browser.handleErrors = False browser.getControl('Create').click() # Now we should be at the campaign self.assertEqual('http://nohost/plone/test-campaign/my-campaign', browser.url) # And it should have been created in Salesforce personal_campaign_id = getattr(campaign, 'my-campaign').sf_object_id self.assertTrue(personal_campaign_id) self.ids_to_remove.append(personal_campaign_id)
def test_can_enter_expiry_date(self): browser = Browser(self.layer['app']) portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Member', 'Manager')) document = createObject(portal, "Document", "effective_date_transition_doc", delete_first=True, title="Workflow note") transaction.commit() browser_login(portal, browser) browser.open(document.absolute_url()) browser.getLink("Manage page").click() browser.getLink("Public draft").click() workflow_actions = browser.getControl( name="form.widgets.workflow_action:list") workflow_actions.getControl(value="publish").click() # We set up a comment this time next_year = datetime.now() + timedelta(365) next_year = next_year - timedelta(seconds=next_year.second, microseconds=next_year.microsecond) browser.getControl( name="form.widgets.expiration_date-day").value = str(next_year.day) browser.getControl(name="form.widgets.expiration_date-month").value = [ str(next_year.month) ] browser.getControl( name="form.widgets.expiration_date-year").value = str( next_year.year) browser.getControl( name="form.widgets.expiration_date-hour").value = str( next_year.hour) browser.getControl( name="form.widgets.expiration_date-min").value = str( next_year.minute) browser.getControl("Save").click() # and it shows up in the workflow history self.assertEqual( "publish", document.workflow_history['plone_workflow'][-1]['action']) self.assertEqual( "published", portal.portal_workflow.getInfoFor(document, "review_state")) self.assertEqual(DateTime(next_year), document.getRawExpirationDate()) portal.manage_delObjects(['effective_date_transition_doc'])
def test_panel_linked_to_in_menu(self): browser = Browser(self.layer['app']) portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Member', 'Manager')) document = createObject(portal, "Document", "panel_linked_to_in_menu_doc", delete_first=True, title="Workflow transitions") # Commit so the change in roles is visible to the browser transaction.commit() browser_login(portal, browser) browser.open(document.absolute_url()) browser.getLink("Manage page").click() # raises exception if not present browser.getLink("Public draft").click() self.assertIn("form.widgets.workflow_action", browser.contents)
def test_browse_posts(self): """A minimal functional test for posts.""" setRoles(self.portal, TEST_USER_ID, ('Manager',)) # create, publish and join a workspace: ws = helpers.create_workspace(self.portal, 'ws1', title=u"Workspace 1") ws.addMember(SITE_MEMBER) import transaction transaction.commit() browser = Browser(self.app) browser.handleErrors = False # Log in as a user browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_MEMBER, PASSWORD,)) # go to conversation: browser.open("%s/conversation" % ws.absolute_url()) # create another post: browser.getLink(text='Post').click() title = browser.getControl(name='form.widgets.title') title.value = "The Post" text = browser.getControl(name='form.widgets.text') text.value = "<p>Blah, blah, test.</p>" browser.getControl(name='form.buttons.save').click() self.assertIn('the-post', ws) post = ws['the-post'] # publish the post: # TODO: we cheat because there is no publishing interface available to # normal users. helpers.publish_post(post) # the post should be published: pw = getToolByName(self.portal, 'portal_workflow') self.assertEqual(pw.getInfoFor(post, 'review_state'), 'published') # we should be send to the posts view now: self.assertTrue("The Post" in browser.contents) self.assertTrue("Blah, blah, test." in browser.contents) # TODO: edit the post: browser.getLink(text='Edit')
class EditorTestCase(unittest.TestCase): layer = PLONE_APP_IMAGECROPPING_FUNCTIONAL def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] # setup testbrowser self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader('Authorization', 'Basic %s:%s' % ( TEST_USER_NAME, TEST_USER_PASSWORD,)) def createSingleImageType(self): # create test image as testuser _createObjectByType('Image', self.portal, 'testimage', title=u"I'm a testing Image") transaction.commit() self.img = self.portal.testimage f = file(join(dirname(tests.__file__), 'plone-logo.png')) self.img.setImage(f) f.close() def test_singleimage_editorview(self): """ """ self.createSingleImageType() # is there the cropping action tab self.browser.open("%s/view" % self.img.absolute_url()) self.assertIn("Cropping", self.browser.contents) self.browser.getLink('Cropping').click() self.assertIn(u"Image Cropping Editor", self.browser.contents) # check for non existing image field column self.assertNotIn(u"Available Image Fields", self.browser.contents) # check for scales column self.assertTrue(u"Available Image Scales" in self.browser.contents) # check for editor buttons self.assertIn(u"Save", self.browser.contents) self.assertIn(u"Delete", self.browser.contents) self.assertIn(u"Cancel", self.browser.contents) def tearDown(self): self.portal.manage_delObjects(['testimage', ])
def test_delete_existence(self): setRoles(self.layer['portal'], TEST_USER_ID, ['Owner']) browser = Browser(self.layer['app']) browser_login(self.portal, browser) browser.open('http://nohost/plone/key-party/he/@@cmsui-menu') self.assertTrue( browser.getLink('Delete').url.endswith('he/delete_confirmation'))
def test_choosing_transition_transitions_content(self): browser = Browser(self.layer['app']) portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Member', 'Manager')) document = createObject(portal, "Document", "do_workflow_transition_doc", delete_first=True, title="Workflow transitioning") transaction.commit() browser_login(portal, browser) browser.open(document.absolute_url()) browser.getLink("Manage page").click() browser.getLink("Public draft").click() workflow_actions = browser.getControl(name="form.widgets.workflow_action:list") workflow_actions.getControl(value="publish").click() browser.getControl("Save").click() self.assertEqual("published", portal.portal_workflow.getInfoFor(document, "review_state"))
def test_view_films_at_cinema(self): app = self.layer['app'] portal = self.layer['portal'] browser = Browser(app) browser.handleErrors = False browser.open(portal['cinemas']['cinema1'].absolute_url()) self.assertEqual( browser.getLink('Film 1').url, portal['films']['film1'].absolute_url()) self.assertEqual( browser.getLink('Film 2').url, portal['films']['film2'].absolute_url())
class EventFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_add_event(self): self.browser.open(self.portal_url) self.browser.getLink('Event').click() self.browser.getControl( name='form.widgets.IDublinCore.title').value = "My event" self.browser.getControl(name='form.widgets.IDublinCore.description' ).value = "This is my event." self.browser.getControl( name='form.widgets.IRichText.text').value = "Lorem Ipsum" self.browser.getControl( name='form.widgets.IEventBasic.start-day').value = ['1'] self.browser.getControl( name='form.widgets.IEventBasic.start-month').value = ['1'] self.browser.getControl( name='form.widgets.IEventBasic.start-year').value = ['2013'] self.browser.getControl( name='form.widgets.IEventBasic.end-day').value = ['12'] self.browser.getControl( name='form.widgets.IEventBasic.end-month').value = ['1'] self.browser.getControl( name='form.widgets.IEventBasic.end-year').value = ['2013'] self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('my-event/view')) self.assertTrue('My event' in self.browser.contents) self.assertTrue('This is my event' in self.browser.contents) self.assertTrue('Lorem Ipsum' in self.browser.contents) self.assertTrue('2013-01-01' in self.browser.contents) self.assertTrue('2013-01-12' in self.browser.contents)
class TestEventhandlersFunctional(TestCase): layer = FTW_BOOK_FUNCTIONAL_TESTING def setUp(self): self.portal = self.layer['portal'] self.browser = Browser(self.layer['app']) self.browser.handleErrors = False self.portal.invokeFactory('Folder', 'folder-1') self.portal.invokeFactory('Folder', 'folder-2') transaction.commit() def create_book(self): self.browser.open(self.portal.absolute_url()+'/folder-1/createObject?type_name=Book') self.browser.getControl(name="title").value = "Hans Peter" self.browser.getControl(name="form.button.save").click() def _auth(self): self.browser.addHeader('Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD,)) def get_portlet(self, obj): manager = getUtility(IPortletManager, name='plone.leftcolumn') mapping = getMultiAdapter((obj, manager), IPortletAssignmentMapping).__of__(obj) return mapping['navigation'] def test_move_book(self): self._auth() self.create_book() self.browser.getLink("Cut").click() self.browser.open(self.portal.absolute_url()+'/folder-2') self.browser.getLink("Paste").click() self.browser.open(self.browser.url+'/hans-peter') obj = self.portal['folder-2']['hans-peter'] portlet = self.get_portlet(obj) self.assertEqual(portlet.root, '/folder-2/hans-peter') def test_copy_book(self): self._auth() self.create_book() self.browser.getLink("Copy").click() self.browser.open(self.portal.absolute_url()+'/folder-2') self.browser.getLink("Paste").click() self.browser.open(self.browser.url+'/hans-peter') obj = self.portal['folder-2']['hans-peter'] portlet = self.get_portlet(obj) self.assertEqual(portlet.root, '/folder-2/hans-peter') def test_after_creation(self): self._auth() self.create_book() obj = self.portal['folder-1']['hans-peter'] portlet = self.get_portlet(obj) self.assertEqual(portlet.root, '/folder-1/hans-peter')
class NewsItemFunctionalTest(unittest.TestCase): layer = PLONE_APP_CONTENTTYPES_FUNCTIONAL_TESTING def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_add_news_item(self): self.browser.open(self.portal_url) self.browser.getLink('News Item').click() self.browser.getControl(name='form.widgets.IDublinCore.title')\ .value = "My news item" self.browser.getControl(name='form.widgets.IDublinCore.description')\ .value = "This is my news item." # self.browser.getControl(name='form.widgets.IShortName.id')\ # .value = "" self.browser.getControl(name='form.widgets.IRichText.text')\ .value = "Lorem Ipsum" self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('my-news-item/view')) self.assertTrue('My news item' in self.browser.contents) self.assertTrue('This is my news item' in self.browser.contents) self.assertTrue('Lorem Ipsum' in self.browser.contents) @unittest.skip("IShortName not available") def test_add_news_item_with_shortname(self): self.browser.open(self.portal_url) self.browser.getLink('News Item').click() self.browser.getControl(name='form.widgets.IDublinCore.title')\ .value = "My news item" self.browser.getControl(name='form.widgets.IShortName.id')\ .value = "my-special-news" self.browser.getControl('Save').click() self.assertTrue(self.browser.url.endswith('my-special-news/view'))
def test_cancel_config(self): """ Validate the default values """ browser = Browser(self.app) portalURL = self.portal.absolute_url() browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD)) browser.open(portalURL + '/@@overview-controlpanel') browser.getLink('Image WatchDog settings').click() browser.getControl('Optimize PNG').selected = True browser.getControl('Enabled').selected = True browser.getControl('Cancel').click() registry = getUtility(IRegistry) settings = registry.forInterface(IImageWatchDogSettings) self.assertFalse(settings.optimize) self.assertFalse(settings.enabled)
def test_panel_linked_to_in_menu(self): browser = Browser(self.layer['app']) portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Member', 'Manager')) document = createObject(portal, "Document", "panel_linked_to_in_menu_doc", delete_first=True, title="Workflow transitions") # Commit so the change in roles is visible to the browser transaction.commit() browser_login(portal, browser) browser.open(document.absolute_url()) browser.getLink("Manage page").click() # raises exception if not present browser.getLink("Public draft").click() self.assertIn("form.widgets.workflow_action", browser.contents)
def test_cancel_reservation(self): from z3c.saconfig import Session from optilux.cinemacontent.model import Screening from Products.CMFCore.utils import getToolByName app = self.layer['app'] portal = self.layer['portal'] browser = Browser(app) browser.handleErrors = False browser.addHeader( 'Authorization', 'Basic %s:%s' % ( TEST_USER_NAME, TEST_USER_PASSWORD, )) browser.open(portal['cinemas']['cinema1'].absolute_url()) browser.getLink('(show times)', index=0).click() translation_service = getToolByName(portal, 'translation_service') stamp = translation_service.ulocalized_time( self.checkDate.isoformat(), long_format=True, context=portal, domain='plonelocales', ) # Go to the reservations page browser.getLink(stamp, index=0).click() browser.getControl('Number of tickets').value = u"2" browser.getControl('Customer name').value = u"John Smith" browser.getControl('Cancel').click() # No tickets should have been reserved model = Session.query(Screening) \ .filter(Screening.cinemaCode == "ABC1") \ .filter(Screening.filmCode == "DEF1") \ .first() self.assertEqual(model.remainingTickets, 10)
class ControlPanelFunctionalTestCase(unittest.TestCase): """Testes funcionais da configuração do Portal Padrão.""" layer = FUNCTIONAL_TESTING def setUp(self): """Configura testes funcionais antes de cada teste.""" self.portal = self.layer['portal'] self.portal_url = self.portal.absolute_url() self.browser = Browser(self.layer['app']) self.login_browser() import transaction transaction.commit() def login_browser(self): """Autentica usuário de teste no browser""" setRoles(self.portal, TEST_USER_ID, ['Site Administrator']) self.browser.handleErrors = False basic_auth = 'Basic {0}'.format( '{0}:{1}'.format(TEST_USER_NAME, TEST_USER_PASSWORD) ) self.browser.addHeader('Authorization', basic_auth) def test_configuracao_portal(self): """Testa a configuração do Portal Padrão.""" label_autor = u'Esconde autor' label_data = u'Esconde data de publicação'.encode('utf8') self.browser.open('{0}/{1}'.format(self.portal.absolute_url(), '@@overview-controlpanel')) self.browser.getLink('.gov.br: Portal Padrão').click() self.assertFalse(self.browser.getControl(label_autor).selected, 'Campo Esconde autor com valor default errado.') self.assertFalse(self.browser.getControl(label_data).selected, 'Campo Esconde data com valor default errado.') self.browser.getControl(label_autor).selected = True self.browser.getControl(label_data).selected = True self.browser.getControl(name='form.buttons.save').click() self.assertTrue(self.browser.getControl(label_autor).selected, 'Esconde autor não foi salvo.') self.assertTrue(self.browser.getControl(label_data).selected, 'Esconde data não foi salvo.')
def test_can_enter_expiration_date_without_transaction(self): browser = Browser(self.layer['app']) portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ('Member', 'Manager')) document = createObject(portal, "Document", "expiration_date_without_transition_doc", delete_first=True, title="Workflow note") transaction.commit() browser_login(portal, browser) browser.open(document.absolute_url()) browser.getLink("Manage page").click() browser.getLink("Public draft").click() # Don't select any workflow action, but set date next_year = datetime.now() + timedelta(365) next_year = next_year - timedelta(seconds=next_year.second, microseconds=next_year.microsecond) browser.getControl( name="form.widgets.expiration_date-day").value = str(next_year.day) browser.getControl(name="form.widgets.expiration_date-month").value = [ str(next_year.month) ] browser.getControl( name="form.widgets.expiration_date-year").value = str( next_year.year) browser.getControl( name="form.widgets.expiration_date-hour").value = str( next_year.hour) browser.getControl( name="form.widgets.expiration_date-min").value = str( next_year.minute) browser.getControl("Save").click() # Still draft, but expiration date set self.assertEqual( "visible", portal.portal_workflow.getInfoFor(document, "review_state")) self.assertEqual(DateTime(next_year), document.getRawExpirationDate())
class AllowedFieldsControlPanelFuncionalTest(base.EasyFormTestCase): """Test that changes in the easyform control panel are actually stored in the registry. """ def setUpPloneSite(self): pass def setUp(self): self.app = self.layer["app"] self.portal = self.layer["portal"] self.portal_url = self.portal.absolute_url() self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( "Authorization", "Basic " + SITE_OWNER_NAME + ":" + SITE_OWNER_PASSWORD) def test_easyform_control_panel_link(self): self.browser.open(self.portal_url + "/@@overview-controlpanel") self.browser.getLink("easyform").click() self.assertTrue("easyform Settings" in self.browser.contents) def test_easyform_control_panel_backlink(self): self.browser.open(self.portal_url + "/@@easyform-controlpanel") self.assertTrue("General" in self.browser.contents) def test_easyform_control_panel_sidebar(self): self.browser.open(self.portal_url + "/@@navigation-controlpanel") self.browser.getLink("Site Setup").click() self.assertEqual(self.browser.url, "http://nohost/plone/@@overview-controlpanel") def test_easyform_control_panel_checkbox(self): self.browser.open(self.portal_url + "/@@easyform-controlpanel") self.browser.getControl("Rich Text").selected = False self.browser.getControl("Save").click() registry = getUtility(IRegistry) self.assertNotIn( "plone.app.textfield.RichText", registry.records["easyform.allowedFields"].value, )