def test_disable_for_anonymous(self, browser): subsite = create(Builder('folder') .titled('The Subsite') .providing(INavigationRoot)) browser.login().visit(view='global_statusmessage_config') browser.fill( {'Active': True, 'Type': 'information', 'Title': 'Maintenance', 'Message': 'Scheduled Maintenance'}).submit() browser.logout().visit(self.portal) self.assertTrue( statusmessage(), 'Status should be visible for anonymous by default.') browser.login().visit(view='global_statusmessage_config') browser.fill( {'Show to anonymous users?': False}).submit() browser.visit(self.portal) self.assertTrue( statusmessage(), 'Status should still visible for logged in users.') browser.logout().reload() self.assertFalse( statusmessage(), 'Status should no longer be visible for anonymous in users.')
def api_request(self, method, action, data=(), authenticate=True, context=None): if context is None: context = self.layer['portal'] if authenticate: browser.login(SITE_OWNER_NAME) else: browser.logout() with verbose_logging(): if method.lower() == 'get': browser.visit(context, view='upgrades-api/{0}?{1}'.format( action, urllib.urlencode(data))) elif method.lower() == 'post': if not data: data = {'enforce': 'post'} browser.visit(context, view='upgrades-api/{0}'.format(action), data=data) else: raise Exception( 'Unsupported request method {0}'.format(method))
def test_disable_listing_siblings_with_current_folder_only(self, browser): create(Builder('navigation portlet').having(currentFolderOnly=True)) create(Builder('folder').titled('Foo')) bar = create(Builder('folder').titled('Bar')) create(Builder('folder').titled('Baz')) browser.visit(bar) self.assertEquals(['Plone site', 'Bar'], portlet().css('li').text)
def test_siblings_not_shown_when_excluded_from_navigation(self, browser): create(Builder('navigation portlet').having(currentFolderOnly=False)) folder = create(Builder('folder').titled('The Folder')) create(Builder('folder').titled('excluded').having(excludeFromNav=True)) browser.visit(folder) self.assertEquals(['Plone site', 'The Folder'], portlet().css('li').text)
def test_limit_activity_stream(self, browser): create(Builder('page')) create(Builder('page')) create(Builder('page')) create(Builder('activity portlet').having(count=2)) browser.visit() self.assertEqual(2, len(portlet().css('.event')))
def test_lists_children(self, browser): create(Builder('navigation portlet')) folder = create(Builder('folder').titled('The Folder')) create(Builder('page').titled('Foo').within(folder)) create(Builder('page').titled('bar').within(folder)) create(Builder('page').titled('Baz').within(folder)) browser.visit(folder) self.assertEquals(['Foo', 'bar', 'Baz'], portlet().css('.child').text)
def test_siblings_not_shown_when_excluded_from_navigation(self, browser): create(Builder('navigation portlet').having(currentFolderOnly=False)) folder = create(Builder('folder').titled('The Folder')) create( Builder('folder').titled('excluded').having(excludeFromNav=True)) browser.visit(folder) self.assertEquals(['Plone site', 'The Folder'], portlet().css('li').text)
def test_lists_siblings_when_configured(self, browser): create(Builder('navigation portlet').having(currentFolderOnly=False)) create(Builder('folder').titled('Foo')) bar = create(Builder('folder').titled('Bar')) create(Builder('folder').titled('Baz')) browser.visit(bar) self.assertEquals(['Plone site', 'Foo', 'Bar', 'Baz'], portlet().css('li').text)
def test_does_not_list_content_excluded_from_navigation(self, browser): create(Builder('navigation portlet')) folder = create(Builder('folder').titled('The Folder')) create(Builder('page').titled('Foo').within(folder)) create(Builder('page').titled('Bar').within(folder).having( excludeFromNav=True)) browser.visit(folder) self.assertEquals(['Foo'], portlet().css('.child').text)
def test_scaling_is_changed_when_image_changes(self, browser): browser.visit(self.portrait_url + '?s=100') hash_before = image_hash() self.regenerate_portrait() browser.visit(self.portrait_url + '?s=100') hash_after = image_hash() self.assertNotEquals( hash_before, hash_after, 'Image scaling cache is not cleared when changing portrait.')
def test_pdata_portrait_scaling(self, browser): """Some files are stored as Pdata objects instead of strings. """ getToolByName(self.layer['portal'], 'portal_memberdata')._setPortrait( Pdata(self.generate_portrait().getvalue()), self.hugo.getId()) transaction.commit() browser.visit(self.portrait_url + '?s=100') self.assertTrue(image_hash())
def test_does_not_list_content_excluded_from_navigation(self, browser): create(Builder('navigation portlet')) folder = create(Builder('folder').titled('The Folder')) create(Builder('page').titled('Foo').within(folder)) create( Builder('page').titled('Bar').within(folder).having( excludeFromNav=True)) browser.visit(folder) self.assertEquals(['Foo'], portlet().css('.child').text)
def test_append_view_to_link_if_type_in_property(self, browser): create(Builder('navigation portlet')) folder = create(Builder('folder').titled('The Folder')) properties = getToolByName(self.portal, 'portal_properties') properties.site_properties.typesUseViewActionInListings=('Image') create(Builder('image').titled('my-image').within(folder)) browser.visit(folder) self.assertEqual('http://nohost/plone/the-folder/my-image/view', portlet().css('li.child > a').first.attrib.get('href'))
def test_does_not_list_types_excluded_from_navigation(self, browser): properties = getToolByName(self.layer['portal'], 'portal_properties') navtree_properties = properties.navtree_properties navtree_properties.metaTypesNotToList += ('Document', ) create(Builder('navigation portlet')) folder = create(Builder('folder').titled('The Folder')) create(Builder('page').titled('Foo').within(folder)) browser.visit(folder) self.assertEquals([], portlet().css('.child').text)
def test_append_view_to_link_if_type_in_property(self, browser): create(Builder('navigation portlet')) folder = create(Builder('folder').titled('The Folder')) properties = getToolByName(self.portal, 'portal_properties') properties.site_properties.typesUseViewActionInListings = ('Image') create(Builder('image').titled('my-image').within(folder)) browser.visit(folder) self.assertEqual( 'http://nohost/plone/the-folder/my-image/view', portlet().css('li.child > a').first.attrib.get('href'))
def test_siblings_not_shown_when_type_excluded_from_navigation(self, browser): properties = getToolByName(self.layer['portal'], 'portal_properties') navtree_properties = properties.navtree_properties navtree_properties.metaTypesNotToList += ('Document', ) create(Builder('navigation portlet').having(currentFolderOnly=False)) folder = create(Builder('folder').titled('The Folder')) create(Builder('page').titled('excluded').having(excludeFromNav=True)) browser.visit(folder) self.assertEquals(['Plone site', 'The Folder'], portlet().css('li').text)
def test_siblings_not_shown_when_type_excluded_from_navigation( self, browser): properties = getToolByName(self.layer['portal'], 'portal_properties') navtree_properties = properties.navtree_properties navtree_properties.metaTypesNotToList += ('Document', ) create(Builder('navigation portlet').having(currentFolderOnly=False)) folder = create(Builder('folder').titled('The Folder')) create(Builder('page').titled('excluded').having(excludeFromNav=True)) browser.visit(folder) self.assertEquals(['Plone site', 'The Folder'], portlet().css('li').text)
def test_exclude_subsite(self, browser): subsite = create(Builder('folder') .titled('The Subsite') .providing(INavigationRoot)) browser.login().visit(view='global_statusmessage_config') browser.fill( {'Active': True, 'Type': 'information', 'Title': 'Maintenance', 'Message': 'Scheduled Maintenance', 'Exclude sites': ['The Subsite']}).submit() browser.visit(self.portal) self.assertTrue( statusmessage(), 'Status message should be visible on site root.') page_on_site_root = create(Builder('page')) browser.visit(page_on_site_root) self.assertTrue( statusmessage(), 'Status message should be visible on pages within site root.') browser.visit(subsite) self.assertFalse( statusmessage(), 'Status message should not be visible on subsite.') page_on_subsite = create(Builder('page').within(subsite)) browser.visit(page_on_subsite) self.assertFalse( statusmessage(), 'Status message should not be visible on pages within subsite.')
def test_show_all_activities_from_navigation_root(self, browser): page = create(Builder('page')) create(Builder('page')) create(Builder('activity portlet')) browser.visit() self.assertEqual(2, len(portlet().css('.event'))) browser.visit(page) self.assertEqual( 2, len(portlet().css('.event')), 'Both activites should be visible from the page')
def test_disabling_status_message(self, browser): browser.login(SITE_OWNER_NAME).visit( view='global_statusmessage_config') browser.fill( {'Active': True, 'Type': 'information', 'Title': 'Maintenance', 'Message': 'Scheduled maintenance 20PM-22PM'}).submit() self.assertTrue(statusmessage(), 'Expected a message to be configured.') browser.visit(view='global_statusmessage_config') browser.fill({'Active': False}).submit() self.assertFalse(statusmessage(), 'Expected message to be no longer visible.')
def test_toggling_edit_mode(self, browser): self.grant('Manager') # The plone site should be "editable" by default for the site owner. browser.login().visit() self.assertTrue( self.is_editable(), 'No ".documentEditable" found on site root. Markup changed?') # When we hit the "switch-editmode" view we are redirected back # to the context's default view: browser.visit(view='@@switch-editmode') self.assertEqual( self.portal.absolute_url(), browser.url, 'Expected to be redirected to the context\'s default view but' ' (site root in this case) but was not.') # and now the document is no longer editable: self.assertFalse(self.is_editable(), 'Site root still editable.') # even when reloading: browser.visit() self.assertFalse(self.is_editable(), 'Editable switch not persistent?') # when switching back on we are redirected to the default view again: browser.visit(view='@@switch-editmode') self.assertEqual( self.portal.absolute_url(), browser.url, 'Redirect seems to be wrong when re-enabling edit mode.') # and it is now editable again: self.assertTrue(self.is_editable(), 'Re-enabling the edit mode is not working.')
def api_request(self, method, action, data=(), authenticate=True, context=None): if context is None: context = self.layer['portal'] if authenticate: browser.login(SITE_OWNER_NAME) else: browser.logout() with verbose_logging(): if method.lower() == 'get': browser.visit(context, view='upgrades-api/{0}?{1}'.format( action, urllib.urlencode(data))) elif method.lower() == 'post': if not data: data = {'enforce': 'post'} browser.visit(context, view='upgrades-api/{0}'.format(action), data=data) else: raise Exception('Unsupported request method {0}'.format(method))
def test_get_state_returns_disabled_after_switching(self, browser): browser.login() browser.visit(view='@@switch-editmode') self.assertEquals( 'disabled', browser.visit(view='@@switch-editmode/get_state').contents) browser.visit(view='@@switch-editmode') self.assertEquals( 'enabled', browser.visit(view='@@switch-editmode/get_state').contents)
def visit(self, obj): browser.visit(obj) return self
def test_do_not_show_link_to_full_activity(self, browser): create(Builder('activity portlet').having(show_more=False)) browser.visit() self.assertEqual(0, len(portlet().css('.showMoreLink')))
def test_get_state_returns_enabled_by_default(self, browser): browser.login() self.assertEquals( 'enabled', browser.visit(view='@@switch-editmode/get_state').contents)
def test_has_parent_link(self, browser): create(Builder('navigation portlet')) folder = create(Builder('folder')) browser.visit(folder) self.assertEquals('Plone site', portlet().css('.parent').first.text)
def test_shows_current_context_title(self, browser): create(Builder('navigation portlet')) folder = create(Builder('folder').titled('The Folder')) browser.visit(folder) self.assertEquals('The Folder', portlet().css('.current').first.text)
def test_default_scaling_is_original_size(self, browser): browser.visit(self.portrait_url) self.assertEquals((220, 220), image_size())
def add_item_to_cart(item, amount=1): browser.visit(item) shopitem.add_to_cart(amount=amount)
def test_max_scaling_returns_original(self, browser): browser.visit(self.portrait_url + '?s=9999') self.assertEquals((220, 220), image_size())
def test_scaling_with_size_parameter(self, browser): browser.visit(self.portrait_url + '?size=150') self.assertEquals((150, 150), image_size())
def visit_edit_categories(item=None): if item is None: item = create(Builder('shop item')) browser.visit(item) shopitem.edit_categories_link().click()
def visit_portal(self): browser.visit() return self