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"))
示例#2
0
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'))
示例#6
0
 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)
示例#7
0
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())
示例#13
0
 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())
示例#14
0
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())
示例#16
0
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'])
示例#19
0
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,))
示例#20
0
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)
示例#21
0
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)
示例#23
0
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)
示例#24
0
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')
示例#25
0
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)
示例#26
0
 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')
示例#27
0
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', ])
示例#29
0
 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&hellip;", browser.contents)
示例#30
0
 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&hellip;', 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)
示例#33
0
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
示例#35
0
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')
示例#36
0
 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&hellip;', browser.contents)
示例#37
0
    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'])
示例#38
0
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)
示例#39
0
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'])
示例#44
0
 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', ])
示例#47
0
 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'))
示例#48
0
 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"))
示例#49
0
    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())
示例#50
0
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)
示例#51
0
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')
示例#52
0
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'))
示例#53
0
    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)
示例#55
0
    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,
        )