Esempio n. 1
0
 def setUp(self):
     self.portal = self.layer['portal']
     alsoProvides(self.layer['request'], IPloneAppMultilingualInstalled)
     # Setup test browser
     self.browser = Browser(self.layer['app'])
     self.browser.handleErrors = False
     self.browser.addHeader(
         'Authorization', 'Basic %s:%s' % (
             SITE_OWNER_NAME, SITE_OWNER_PASSWORD))
Esempio n. 2
0
    def setUp(self):
        self.portal = self.layer['portal']

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization',
            'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD))
 def test_search_replace_control_panel_anonymous_unauthorized(self):
     app = self.layer["app"]
     browser = Browser(app)
     browser.handleErrors = False
     with self.assertRaises(
             Unauthorized):  # Anonymous cannot access this page
         browser.open(
             "{}/@@collective.documentgenerator-searchreplacepanel".format(
                 self.portal.absolute_url()))
    def test_menu_is_not_visible_without_permission(self):
        # Add a new user without Owner, Editor or Manager role on
        # self.a_ca document
        self.portal.portal_registration.addMember(
            'a_user', 'a_password', ['Reader', 'Contributor', 'Reviewer', ])

        transaction.commit()

        browser = Browser(self.layer['app'])
        browser.addHeader('Authorization', 'Basic a_user:a_password')

        browser.open(self.a_ca.absolute_url())
        self.assertNotIn('plone-contentmenu-multilingual', browser.contents)
    def setUp(self):
        self.portal = self.layer['portal']
        alsoProvides(self.layer['request'], IPloneAppMultilingualInstalled)
        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic {0:s}:{1:s}'.format(
                SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

        # Create sample document in 'en' and index it into catalog
        self.a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u'Test document')

        transaction.commit()
    def setUp(self):
        self.portal = self.layer["portal"]

        # Setup test browser
        self.browser = Browser(self.layer["app"])
        self.browser.handleErrors = False
        self.browser.addHeader("Authorization", "Basic %s:%s" % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD))
Esempio n. 7
0
    def setUp(self):
        self.portal = self.layer['portal']

        # Setup multilingual site
        language_tool = getToolByName(self.portal, 'portal_languages')
        language_tool.addSupportedLanguage('it')
        language_tool.addSupportedLanguage('de')
        setupTool = SetupMultilingualSite()
        setupTool.setupSite(self.portal)

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic %s:%s' % (
                SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

        # Create sample document in 'en' and index it into catalog
        self.container = self.portal['en']
        self.content_id = self.container.invokeFactory(
            type_name="Document", id="sampledocument-form")
        self.content = self.container[self.content_id]
        self.content.setLanguage('en')
        notify(ObjectAddedEvent(self.content))

        import transaction
        transaction.commit()
Esempio n. 8
0
    def setUp(self):
        self.portal = self.layer['portal']

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic %s:%s' % (
                SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

        # Configure languages
        self.portal_url = self.portal.absolute_url()
        self.lang_tool = getToolByName(self.portal, 'portal_languages')
        self.lang_tool.supported_langs = ['en', 'it', 'de']

        # Create language root folder for 'en'
        self.portal.invokeFactory(type_name="Folder", id="en")
        self.container = self.portal['en']
        self.container.setLanguage('en')

        # Create sample document in 'en' and index it into catalog
        content_id = self.container.invokeFactory(
            type_name="Document", id="sampledocument-form")
        self.content = self.container[content_id]
        self.content.setLanguage('en')
        notify(ObjectAddedEvent(self.content))

        import transaction
        transaction.commit()
    def setUp(self):
        self.portal = self.layer['portal']

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic %s:%s' % (
                SITE_OWNER_NAME, SITE_OWNER_PASSWORD))
    def setUp(self):
        self.portal = self.layer['portal']

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic {0:s}:{1:s}'.format(
                SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

        # Create sample document in 'en' and index it into catalog
        self.a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u'Test document')

        transaction.commit()
Esempio n. 11
0
    def test_menu_is_not_visible_without_permission(self):
        # Add a new user without Owner, Editor or Manager role on
        # self.a_ca document
        self.portal.portal_registration.addMember(
            'a_user', 'a_password', ['Reader', 'Contributor', 'Reviewer', ])

        transaction.commit()

        browser = Browser(self.layer['app'])
        browser.addHeader('Authorization', 'Basic a_user:a_password')

        browser.open(self.a_ca.absolute_url())
        self.assertNotIn('plone-contentmenu-multilingual', browser.contents)
Esempio n. 12
0
class TestMenu(unittest.TestCase):
    layer = PAM_FUNCTIONAL_TESTING

    def setUp(self):
        self.portal = self.layer['portal']

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization',
            'Basic {0:s}:{1:s}'.format(SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

        # Create sample document in 'en' and index it into catalog
        self.a_ca = createContentInContainer(self.portal['ca'],
                                             'Document',
                                             title=u'Test document')

        transaction.commit()

    def test_menu_is_visible(self):
        self.browser.open(self.a_ca.absolute_url())
        self.assertIn('Translate', self.browser.contents)

    def test_menu_contains_translatable_entries(self):
        self.browser.open(self.a_ca.absolute_url())
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertIn('translate_into_en', self.browser.contents)

    def test_menu_does_not_contain_translated_entries(self):
        self.browser.open(self.a_ca.absolute_url())
        self.assertNotIn('translate_into_ca', self.browser.contents)

    def test_menu_does_not_appear_without_ITranslatable(self):
        self.browser.open(self.portal.absolute_url() + '/folder_listing')
        self.assertNotIn('Translate', self.browser.contents)

    def test_menu_is_visible_on_folder_default_page(self):
        createContentInContainer(self.portal['ca'],
                                 'Folder',
                                 title=u'Test folder')
        createContentInContainer(self.portal['ca']['test-folder'],
                                 'Document',
                                 title=u'Test document')
        self.portal['ca']['test-folder'].setDefaultPage('test-document')

        transaction.commit()

        self.browser.open(self.portal['ca']['test-folder'].absolute_url())
        self.assertIn('test-folder/@@create_translation',
                      self.browser.contents)
        self.assertIn('test-document/@@create_translation',
                      self.browser.contents)

    def test_menu_is_not_visible_without_permission(self):
        # Add a new user without Owner, Editor or Manager role on
        # self.a_ca document
        self.portal.portal_registration.addMember('a_user', 'a_password', [
            'Reader',
            'Contributor',
            'Reviewer',
        ])

        transaction.commit()

        browser = Browser(self.layer['app'])
        browser.addHeader('Authorization', 'Basic a_user:a_password')

        browser.open(self.a_ca.absolute_url())
        self.assertNotIn('plone-contentmenu-multilingual', browser.contents)
Esempio n. 13
0
class TestForm(unittest.TestCase):

    layer = PLONEAPPMULTILINGUAL_FUNCTIONAL_TESTING

    def setUp(self):
        self.portal = self.layer['portal']

        # Setup multilingual site
        language_tool = getToolByName(self.portal, 'portal_languages')
        language_tool.addSupportedLanguage('it')
        language_tool.addSupportedLanguage('de')
        setupTool = SetupMultilingualSite()
        setupTool.setupSite(self.portal)

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic %s:%s' % (
                SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

        # Create sample document in 'en' and index it into catalog
        self.container = self.portal['en']
        self.content_id = self.container.invokeFactory(
            type_name="Document", id="sampledocument-form")
        self.content = self.container[self.content_id]
        self.content.setLanguage('en')
        notify(ObjectAddedEvent(self.content))

        import transaction
        transaction.commit()

    def testAllTranslationLinksAreShown(self):
        self.browser.open(self.content.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_it', self.browser.contents)
        self.assertIn('translate_into_de', self.browser.contents)

    def testTranslationFormCreatesTranslation(self):
        # Translate content
        self.browser.open(
            self.content.absolute_url()
            + '/@@create_translation?language=de')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = "sample title de"
        self.browser.getControl(name="form.buttons.save").click()

        import transaction
        transaction.commit()

        self.assertIn("sample-title-de", self.portal['de'].objectIds())

        self.browser.open(self.content.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_it', self.browser.contents)
        self.assertNotIn('translate_into_de', self.browser.contents)

    def testTranslationCanBeUnregistered(self):
        # Create translation
        self.browser.open(
            self.content.absolute_url()
            + '/@@create_translation?language=de')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = "sample title de"
        self.browser.getControl(name="form.buttons.save").click()

        import transaction
        transaction.commit()

        # Unregister translation
        self.browser.open(self.content.absolute_url()
                          + '/remove_translations?set_language=en')
        self.assertEqual(
            self.browser.getControl(name="form.widgets.languages:list").value,
            ['de'])
        self.browser.getControl("unlink selected").click()
        self.assertEqual(
            self.browser.getControl(name="form.widgets.languages:list").value,
            [])

        # Translation is unregistered
        self.browser.open(self.content.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_it', self.browser.contents)
        self.assertIn('translate_into_de', self.browser.contents)

        transaction.commit()

        # Content is still available
        self.assertIn('sample-title-de', self.portal['de'].contentIds())


    def testRegisteringTranslation(self):
        # Create another page
        container = self.portal['de']
        content_id = container.invokeFactory(
            type_name="Document", id="sampleform-de")
        content = container[content_id]
        content.setLanguage('de')
        notify(ObjectAddedEvent(content))

        import transaction
        transaction.commit()

        # Register translation
        self.browser.open(
            self.content.absolute_url() + '/add_translations')
        self.assertEqual(self.browser.getControl(
            name="form.widgets.language:list").options, ['it', 'de'])

        # Fill in form
        form = self.browser.getForm(index=1)
        form.mech_form.new_control(
            type='radio',
            name='form.widgets.content:list',
            attrs=dict(checked='checked',
                       value='%s' %'/'.join(content.getPhysicalPath()),
                       id='form-widgets-content-0'))
        self.browser.getControl(
            name="form.widgets.language:list").value = ['de']
        self.browser.getControl(
            name='form.buttons.add_translations').click()

        # Language is removed from nontranslated languages
        self.assertEqual(self.browser.getControl(
            name="form.widgets.language:list").options, ['it'])

        # And translation can be unregistered
        self.browser.open(self.content.absolute_url() + '/remove_translations')
        self.assertEqual(self.browser.getControl(
            name="form.widgets.languages:list").value, ['de'])

    def testTranslationCanBeRemovedByDeleting(self):
        # Translate content
        self.browser.open(
            self.content.absolute_url()
            + '/@@create_translation?language=de')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = "sample title de"
        self.browser.getControl(name="form.buttons.save").click()

        # Remove translation
        self.browser.open(self.content.absolute_url() + '/remove_translations')
        self.browser.getControl("remove selected").click()

        self.assertEqual(self.browser.getControl(
            name="form.widgets.languages:list").value, [])

        self.portal._p_jar.sync()

        self.assertNotIn('sample-title-de', self.portal['de'].objectIds())

    def testFolderishContentCanBeTransalte(self):
        self.container.invokeFactory(type_name="Folder", id="samplefolder")
        notify(ObjectAddedEvent(self.container.samplefolder))

        import transaction
        transaction.commit()

        self.browser.open(
            self.portal.absolute_url()
            + '/en/samplefolder/@@create_translation?language=de')

        self.browser.getControl(name="form.widgets.IDublinCore.title").value =\
            "sample folder title de"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn('sample-folder-title-de', self.portal['de'].objectIds())

    def testContentInFoldersCanBeTranslated(self):
        self.container.invokeFactory(type_name="Folder", id="samplefolder")
        notify(ObjectAddedEvent(self.container.samplefolder))

        folder = self.container['samplefolder']
        content_id = folder.invokeFactory(
            type_name="Document", id="sampledocument_in_folder")
        notify(ObjectAddedEvent(folder[content_id]))

        import transaction
        transaction.commit()

        self.browser.open(
            folder.absolute_url() + '/' + content_id
            + '/@@create_translation?language=de')

        self.browser.getControl(name="form.widgets.IDublinCore.title").value =\
            "sample folder content title de"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn('sample-folder-content-title-de',
                      self.portal['de'].objectIds())
class TestForm(unittest.TestCase):
    layer = PAM_FUNCTIONAL_TESTING

    def setUp(self):
        self.portal = self.layer["portal"]

        # Setup test browser
        self.browser = Browser(self.layer["app"])
        self.browser.handleErrors = False
        self.browser.addHeader("Authorization", "Basic %s:%s" % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

    def test_all_translation_links_are_shown(self):
        a_ca = createContentInContainer(self.portal["ca"], "Document", title=u"Test document")

        transaction.commit()

        self.browser.open(a_ca.absolute_url())
        self.assertIn("plone-contentmenu-multilingual", self.browser.contents)
        self.assertIn("translate_into_es", self.browser.contents)
        self.assertIn("translate_into_en", self.browser.contents)

    def test_translation_form_creates_translation(self):
        a_ca = createContentInContainer(self.portal["ca"], "Document", title=u"Test document")

        transaction.commit()

        # Translate content
        self.browser.open(a_ca.absolute_url() + "/@@create_translation?language=en")

        # Fill in translation details
        self.browser.getControl(name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn("test-document", self.portal["en"].objectIds())

        self.browser.open(a_ca.absolute_url())
        self.assertIn("plone-contentmenu-multilingual", self.browser.contents)
        self.assertIn("translate_into_es", self.browser.contents)
        self.assertNotIn("translate_into_en", self.browser.contents)

    def test_translation_can_be_unregistered(self):
        a_ca = createContentInContainer(self.portal["ca"], "Document", title=u"Test document")

        transaction.commit()

        # Create translation
        self.browser.open(a_ca.absolute_url() + "/@@create_translation?language=en")

        # Fill in translation details
        self.browser.getControl(name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        # Unregister translation
        self.browser.open(a_ca.absolute_url() + "/remove_translations?set_language=en")

        self.portal._p_jar.sync()

        self.assertEqual(self.browser.getControl(name="form.widgets.languages:list").value, ["en"])
        self.browser.getControl(name="form.buttons.unlink").click()
        self.assertEqual(self.browser.getControl(name="form.widgets.languages:list").value, [])

        # Translation is unregistered
        self.browser.open(a_ca.absolute_url())
        self.assertIn("plone-contentmenu-multilingual", self.browser.contents)
        self.assertIn("translate_into_es", self.browser.contents)
        self.assertIn("translate_into_en", self.browser.contents)

        transaction.commit()

        # Content is still available
        self.assertIn("test-document", self.portal["en"].contentIds())

    def test_registering_translation(self):
        a_ca = createContentInContainer(self.portal["ca"], "Document", title=u"Test document")

        b_ca = createContentInContainer(self.portal["ca"], "Document", title=u"Test document")

        transaction.commit()

        # Register translation
        self.browser.open(a_ca.absolute_url() + "/add_translations")
        self.assertEqual(self.browser.getControl(name="form.widgets.language:list").options, ["en", "es"])

        # Fill in form
        form = self.browser.getForm(index=1)
        form.mech_form.new_control(
            type="radio",
            name="form.widgets.content:list",
            attrs=dict(checked="checked", value="%s" % "/".join(b_ca.getPhysicalPath()), id="form-widgets-content-0"),
        )
        self.browser.getControl(name="form.widgets.language:list").value = ["en"]
        self.browser.getControl(name="form.buttons.add_translations").click()

        # Language is removed from nontranslated languages
        self.assertEqual(self.browser.getControl(name="form.widgets.language:list").options, ["es"])

        # And translation can be unregistered
        self.browser.open(a_ca.absolute_url() + "/remove_translations")
        self.assertEqual(self.browser.getControl(name="form.widgets.languages:list").value, ["en"])

    def test_translation_can_be_removed_by_deleting(self):
        a_ca = createContentInContainer(self.portal["ca"], "Document", title=u"Test document")

        transaction.commit()

        # Translate content
        self.browser.open(a_ca.absolute_url() + "/@@create_translation?language=en")

        # Fill in translation details
        self.browser.getControl(name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        # Remove translation
        self.browser.open(a_ca.absolute_url() + "/remove_translations")
        self.browser.getControl(name="form.buttons.remove").click()

        self.assertEqual(self.browser.getControl(name="form.widgets.languages:list").value, [])

        self.portal._p_jar.sync()

        self.assertNotIn("test-document", self.portal["en"].objectIds())

    def test_folderish_content_can_be_translated(self):
        createContentInContainer(self.portal["ca"], "Folder", title=u"Test folder")

        transaction.commit()

        self.browser.open(self.portal.absolute_url() + "/ca/test-folder/@@create_translation?language=en")

        self.browser.getControl(name="form.widgets.IDublinCore.title").value = u"Test folder"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn("test-folder", self.portal["en"].objectIds())

    def test_content_in_folders_can_be_translated(self):
        af_ca = createContentInContainer(self.portal["ca"], "Folder", title=u"Test folder")

        b_ca = createContentInContainer(self.portal["ca"]["test-folder"], "Document", title=u"Test document")

        transaction.commit()

        self.browser.open(af_ca.absolute_url() + "/" + b_ca.id + "/@@create_translation?language=en")

        self.browser.getControl(name="form.widgets.IDublinCore.title").value = u"Test folder"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn("test-folder", self.portal["en"].objectIds())
Esempio n. 15
0
class TestForm(unittest.TestCase):
    layer = PAM_FUNCTIONAL_TESTING

    def setUp(self):
        self.portal = self.layer['portal']

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization',
            'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

    def test_all_translation_links_are_shown(self):
        a_ca = createContentInContainer(self.portal['ca'],
                                        'Document',
                                        title=u"Test document")

        transaction.commit()

        self.browser.open(a_ca.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertIn('translate_into_en', self.browser.contents)

    def test_translation_form_creates_translation(self):
        a_ca = createContentInContainer(self.portal['ca'],
                                        'Document',
                                        title=u"Test document")

        transaction.commit()

        # Translate content
        self.browser.open(a_ca.absolute_url() +
                          '/@@create_translation?language=en')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn("test-document", self.portal['en'].objectIds())

        self.browser.open(a_ca.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertNotIn('translate_into_en', self.browser.contents)

    def test_translation_form_prevents_translating_twice(self):
        a_ca = createContentInContainer(self.portal['ca'],
                                        'Document',
                                        title=u"Test document")

        transaction.commit()

        # Translate content
        self.browser.open(a_ca.absolute_url() +
                          '/@@create_translation?language=en')

        # Save ++add++translation... URL
        add_translation_url = self.browser.url

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        # Revisit the saved ++add++translation... URL
        self.browser.open(add_translation_url)

        # Which should now redirect to the created translation
        self.assertEqual(self.portal['en']['test-document'].absolute_url(),
                         self.browser.url)

    def test_translation_can_be_unregistered(self):
        a_ca = createContentInContainer(self.portal['ca'],
                                        'Document',
                                        title=u"Test document")

        transaction.commit()

        # Create translation
        self.browser.open(a_ca.absolute_url() +
                          '/@@create_translation?language=en')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        # Unregister translation
        self.browser.open(a_ca.absolute_url() +
                          '/remove_translations?set_language=en')

        self.portal._p_jar.sync()

        self.assertEqual(
            self.browser.getControl(name="form.widgets.languages:list").value,
            ['en'])
        self.browser.getControl(name='form.buttons.unlink').click()
        self.assertEqual(
            self.browser.getControl(name="form.widgets.languages:list").value,
            [])

        # Translation is unregistered
        self.browser.open(a_ca.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertIn('translate_into_en', self.browser.contents)

        transaction.commit()

        # Content is still available
        self.assertIn('test-document', self.portal['en'].contentIds())

    def test_registering_translation(self):
        a_ca = createContentInContainer(self.portal['ca'],
                                        'Document',
                                        title=u"Test document")

        b_ca = createContentInContainer(self.portal['ca'],
                                        'Document',
                                        title=u"Test document")

        transaction.commit()

        # Register translation
        self.browser.open(a_ca.absolute_url() + '/add_translations')
        self.assertEqual(
            self.browser.getControl(name="form.widgets.language:list").options,
            ['en', 'es'])

        # Fill in form
        form = self.browser.getForm(index=1)
        form.mech_form.new_control(type='radio',
                                   name='form.widgets.content:list',
                                   attrs=dict(checked='checked',
                                              value='%s' %
                                              '/'.join(b_ca.getPhysicalPath()),
                                              id='form-widgets-content-0'))
        self.browser.getControl(name="form.widgets.language:list").value = [
            'en'
        ]
        self.browser.getControl(name='form.buttons.add_translations').click()

        # Language is removed from nontranslated languages
        self.assertEqual(
            self.browser.getControl(name="form.widgets.language:list").options,
            ['es'])

        # And translation can be unregistered
        self.browser.open(a_ca.absolute_url() + '/remove_translations')
        self.assertEqual(
            self.browser.getControl(name="form.widgets.languages:list").value,
            ['en'])

    def test_translation_can_be_removed_by_deleting(self):
        a_ca = createContentInContainer(self.portal['ca'],
                                        'Document',
                                        title=u"Test document")

        transaction.commit()

        # Translate content
        self.browser.open(a_ca.absolute_url() +
                          '/@@create_translation?language=en')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        # Remove translation
        self.browser.open(a_ca.absolute_url() + '/remove_translations')
        self.browser.getControl(name='form.buttons.remove').click()

        self.assertEqual(
            self.browser.getControl(name="form.widgets.languages:list").value,
            [])

        self.portal._p_jar.sync()

        self.assertNotIn('test-document', self.portal['en'].objectIds())

    def test_folderish_content_can_be_translated(self):
        createContentInContainer(self.portal['ca'],
                                 'Folder',
                                 title=u"Test folder")

        transaction.commit()

        self.browser.open(self.portal.absolute_url() +
                          '/ca/test-folder/@@create_translation?language=en')

        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test folder"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn('test-folder', self.portal['en'].objectIds())

    def test_content_in_folders_can_be_translated(self):
        af_ca = createContentInContainer(self.portal['ca'],
                                         'Folder',
                                         title=u"Test folder")

        b_ca = createContentInContainer(self.portal['ca']['test-folder'],
                                        'Document',
                                        title=u"Test document")

        transaction.commit()

        self.browser.open(af_ca.absolute_url() + '/' + b_ca.id +
                          '/@@create_translation?language=en')

        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test folder"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn('test-folder', self.portal['en'].objectIds())
class TestMenu(unittest.TestCase):
    layer = PAM_FUNCTIONAL_TESTING

    def setUp(self):
        self.portal = self.layer['portal']

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic {0:s}:{1:s}'.format(
                SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

        # Create sample document in 'en' and index it into catalog
        self.a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u'Test document')

        transaction.commit()

    def test_menu_is_visible(self):
        self.browser.open(self.a_ca.absolute_url())
        self.assertIn('Translate', self.browser.contents)

    def test_menu_contains_translatable_entries(self):
        self.browser.open(self.a_ca.absolute_url())
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertIn('translate_into_en', self.browser.contents)

    def test_menu_does_not_contain_translated_entries(self):
        self.browser.open(self.a_ca.absolute_url())
        self.assertNotIn('translate_into_ca', self.browser.contents)

    def test_menu_does_not_appear_without_ITranslatable(self):
        self.browser.open(self.portal.absolute_url() + '/folder_listing')
        self.assertNotIn('Translate', self.browser.contents)

    def test_menu_is_visible_on_folder_default_page(self):
        createContentInContainer(
            self.portal['ca'], 'Folder', title=u'Test folder')
        createContentInContainer(
            self.portal['ca']['test-folder'], 'Document',
            title=u'Test document')
        self.portal['ca']['test-folder'].setDefaultPage('test-document')

        transaction.commit()

        self.browser.open(
            self.portal['ca']['test-folder'].absolute_url())
        self.assertIn(
            'test-folder/@@create_translation', self.browser.contents)
        self.assertIn(
            'test-document/@@create_translation', self.browser.contents)

    def test_menu_is_not_visible_without_permission(self):
        # Add a new user without Owner, Editor or Manager role on
        # self.a_ca document
        self.portal.portal_registration.addMember(
            'a_user', 'a_password', ['Reader', 'Contributor', 'Reviewer', ])

        transaction.commit()

        browser = Browser(self.layer['app'])
        browser.addHeader('Authorization', 'Basic a_user:a_password')

        browser.open(self.a_ca.absolute_url())
        self.assertNotIn('plone-contentmenu-multilingual', browser.contents)
Esempio n. 17
0
class TestForm(unittest.TestCase):
    layer = PAM_FUNCTIONAL_TESTING

    def setUp(self):
        self.portal = self.layer['portal']
        alsoProvides(self.layer['request'], IPloneAppMultilingualInstalled)
        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic %s:%s' % (
                SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

    def test_all_translation_links_are_shown(self):
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        transaction.commit()

        self.browser.open(a_ca.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertIn('translate_into_en', self.browser.contents)

    def test_translation_form_creates_translation(self):
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        transaction.commit()

        # Translate content
        self.browser.open(
            a_ca.absolute_url() + '/@@create_translation?language=en')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn("test-document", self.portal['en'].objectIds())

        self.browser.open(a_ca.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertNotIn('translate_into_en', self.browser.contents)

    def test_translation_form_prevents_translating_twice(self):
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        transaction.commit()

        # Translate content
        self.browser.open(
            a_ca.absolute_url() + '/@@create_translation?language=en')

        # Save ++add++translation... URL
        add_translation_url = self.browser.url

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        # Revisit the saved ++add++translation... URL
        self.browser.open(add_translation_url)

        # Which should now redirect to the created translation
        self.assertEqual(self.portal['en']['test-document'].absolute_url(),
                         self.browser.url)

    def test_translation_can_be_unregistered(self):
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        transaction.commit()

        # Create translation
        self.browser.open(a_ca.absolute_url() +
                          '/@@create_translation?language=en')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        # Unregister translation
        self.browser.open(a_ca.absolute_url() +
                          '/disconnect_translation?came_from={0}&language=en'
                          .format(a_ca.UID()))
        self.browser.getForm(index=1).submit()

        self.portal._p_jar.sync()

        self.assertNotIn('en', ITranslationManager(a_ca).get_translations())

        # self.assertEqual(
        #     self.browser.getControl(name="form.widgets.languages:list").value,
        #     ['en'])
        # self.browser.getControl(name='form.buttons.unlink').click()
        # self.assertEqual(
        #     self.browser.getControl(name="form.widgets.languages:list").value,
        #     [])

        # Translation is unregistered
        self.browser.open(a_ca.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertIn('translate_into_en', self.browser.contents)

        transaction.commit()

        # Content is still available
        self.assertIn('test-document', self.portal['en'].contentIds())

    # Removed because its testes on robot framework with the relation pattern
    # def test_registering_translation(self):
    #     a_ca = createContentInContainer(
    #         self.portal['ca'], 'Document', title=u"Test document")

    #     b_ca = createContentInContainer(
    #         self.portal['ca'], 'Document', title=u"Test document")

    #     transaction.commit()

    #     # Register translation
    #     self.browser.open(
    #         a_ca.absolute_url() + '/add_translations')
    #     self.assertEqual(self.browser.getControl(
    #         name="form.widgets.language:list").options, ['en', 'es'])

    #     # Fill in form
    #     form = self.browser.getForm(index=1)
    #     form.mech_form.new_control(
    #         type='radio',
    #         name='form.widgets.content:list',
    #         attrs=dict(checked='checked',
    #                    value='%s' % '/'.join(b_ca.getPhysicalPath()),
    #                    id='form-widgets-content-0'))
    #     self.browser.getControl(
    #         name="form.widgets.language:list").value = ['en']
    #     self.browser.getControl(
    #         name='form.buttons.add_translations').click()

    #     # Language is removed from nontranslated languages
    #     self.assertEqual(self.browser.getControl(
    #         name="form.widgets.language:list").options, ['es'])

    #     # And translation can be unregistered
    #     self.browser.open(a_ca.absolute_url() + '/remove_translations')
    #     self.assertEqual(self.browser.getControl(
    #         name="form.widgets.languages:list").value, ['en'])

    def test_translation_can_be_removed_by_deleting(self):
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        transaction.commit()

        # Translate content
        self.browser.open(a_ca.absolute_url() +
                          '/@@create_translation?language=en')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        # Remove translation
        self.browser.open(
            ITranslationManager(a_ca).get_translation('en').absolute_url() +
            '/delete_confirmation')
        self.browser.getControl(name='form.buttons.Delete').click()

        self.portal._p_jar.sync()
        self.assertNotIn('en', ITranslationManager(a_ca).get_translations())

    def test_folderish_content_can_be_translated(self):
        createContentInContainer(
            self.portal['ca'], 'Folder', title=u"Test folder")

        transaction.commit()

        self.browser.open(self.portal.absolute_url() +
                          '/ca/test-folder/@@create_translation?language=en')

        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test folder"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn('test-folder', self.portal['en'].objectIds())

    def test_content_in_folders_can_be_translated(self):
        af_ca = createContentInContainer(
            self.portal['ca'], 'Folder', title=u"Test folder")

        b_ca = createContentInContainer(
            self.portal['ca']['test-folder'],
            'Document', title=u"Test document")

        transaction.commit()

        self.browser.open(af_ca.absolute_url() + '/' + b_ca.id +
                          '/@@create_translation?language=en')

        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test folder"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn('test-folder', self.portal['en'].objectIds())
Esempio n. 18
0
class TestMenu(unittest.TestCase):

    layer = PLONEAPPMULTILINGUAL_FUNCTIONAL_TESTING

    def setUp(self):
        self.portal = self.layer['portal']

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic %s:%s' % (
                SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

        # Configure languages
        self.portal_url = self.portal.absolute_url()
        self.lang_tool = getToolByName(self.portal, 'portal_languages')
        self.lang_tool.supported_langs = ['en', 'it', 'de']

        # Create language root folder for 'en'
        self.portal.invokeFactory(type_name="Folder", id="en")
        self.container = self.portal['en']
        self.container.setLanguage('en')

        # Create sample document in 'en' and index it into catalog
        content_id = self.container.invokeFactory(
            type_name="Document", id="sampledocument-form")
        self.content = self.container[content_id]
        self.content.setLanguage('en')
        notify(ObjectAddedEvent(self.content))

        import transaction
        transaction.commit()

    def testMenuIsVisible(self):
        self.browser.open(self.content.absolute_url())
        self.assertIn('Translate', self.browser.contents)

    def testMenuContainsTranslatableEntries(self):
        self.browser.open(self.content.absolute_url())
        self.assertIn('translate_into_it', self.browser.contents)
        self.assertIn('translate_into_de', self.browser.contents)

    def testMenuDoesNotContainTranslatedEntries(self):
        self.browser.open(self.content.absolute_url())
        self.assertNotIn('translate_into_en', self.browser.contents)

    def testMenuDoesNotAppearWithoutITranslatable(self):
        self.browser.open(self.portal.absolute_url() + '/folder_listing')
        self.assertNotIn('Translate', self.browser.contents)

    def testMenuIsVisibleOnFolderDefaultPage(self):
        self.container.setDefaultPage('sampledocument-form')

        import transaction
        transaction.commit()

        self.browser.open(self.container.absolute_url())
        self.assertIn("en/@@create_translation", self.browser.contents)
        self.assertIn("sampledocument-form/@@create_translation",
                      self.browser.contents)
Esempio n. 19
0
class TestForm(unittest.TestCase):
    layer = PAM_FUNCTIONAL_TESTING

    def setUp(self):
        self.portal = self.layer['portal']

        # Setup test browser
        self.browser = Browser(self.layer['app'])
        self.browser.handleErrors = False
        self.browser.addHeader(
            'Authorization', 'Basic %s:%s' % (
                SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

    def test_all_translation_links_are_shown(self):
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        transaction.commit()

        self.browser.open(a_ca.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertIn('translate_into_en', self.browser.contents)

    def test_translation_form_creates_translation(self):
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        transaction.commit()

        # Translate content
        self.browser.open(
            a_ca.absolute_url() + '/@@create_translation?language=en')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn("test-document", self.portal['en'].objectIds())

        self.browser.open(a_ca.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertNotIn('translate_into_en', self.browser.contents)

    def test_translation_can_be_unregistered(self):
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        transaction.commit()

        # Create translation
        self.browser.open(
            a_ca.absolute_url()
            + '/@@create_translation?language=en')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        # Unregister translation
        self.browser.open(a_ca.absolute_url()
                          + '/remove_translations?set_language=en')

        self.portal._p_jar.sync()

        self.assertEqual(
            self.browser.getControl(name="form.widgets.languages:list").value,
            ['en'])
        self.browser.getControl(name='form.buttons.unlink').click()
        self.assertEqual(
            self.browser.getControl(name="form.widgets.languages:list").value,
            [])

        # Translation is unregistered
        self.browser.open(a_ca.absolute_url())
        self.assertIn('plone-contentmenu-multilingual', self.browser.contents)
        self.assertIn('translate_into_es', self.browser.contents)
        self.assertIn('translate_into_en', self.browser.contents)

        transaction.commit()

        # Content is still available
        self.assertIn('test-document', self.portal['en'].contentIds())

    def test_registering_translation(self):
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        b_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        transaction.commit()

        # Register translation
        self.browser.open(
            a_ca.absolute_url() + '/add_translations')
        self.assertEqual(self.browser.getControl(
            name="form.widgets.language:list").options, ['en', 'es'])

        # Fill in form
        form = self.browser.getForm(index=1)
        form.mech_form.new_control(
            type='radio',
            name='form.widgets.content:list',
            attrs=dict(checked='checked',
                       value='%s' % '/'.join(b_ca.getPhysicalPath()),
                       id='form-widgets-content-0'))
        self.browser.getControl(
            name="form.widgets.language:list").value = ['en']
        self.browser.getControl(
            name='form.buttons.add_translations').click()

        # Language is removed from nontranslated languages
        self.assertEqual(self.browser.getControl(
            name="form.widgets.language:list").options, ['es'])

        # And translation can be unregistered
        self.browser.open(a_ca.absolute_url() + '/remove_translations')
        self.assertEqual(self.browser.getControl(
            name="form.widgets.languages:list").value, ['en'])

    def test_translation_can_be_removed_by_deleting(self):
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        transaction.commit()

        # Translate content
        self.browser.open(
            a_ca.absolute_url()
            + '/@@create_translation?language=en')

        # Fill in translation details
        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test document"
        self.browser.getControl(name="form.buttons.save").click()

        # Remove translation
        self.browser.open(a_ca.absolute_url() + '/remove_translations')
        self.browser.getControl(name='form.buttons.remove').click()

        self.assertEqual(self.browser.getControl(
            name="form.widgets.languages:list").value, [])

        self.portal._p_jar.sync()

        self.assertNotIn('test-document', self.portal['en'].objectIds())

    def test_folderish_content_can_be_translated(self):
        createContentInContainer(
            self.portal['ca'], 'Folder', title=u"Test folder")

        transaction.commit()

        self.browser.open(
            self.portal.absolute_url()
            + '/ca/test-folder/@@create_translation?language=en')

        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test folder"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn('test-folder', self.portal['en'].objectIds())

    def test_content_in_folders_can_be_translated(self):
        af_ca = createContentInContainer(
            self.portal['ca'], 'Folder', title=u"Test folder")

        b_ca = createContentInContainer(
            self.portal['ca']['test-folder'],
            'Document', title=u"Test document")

        transaction.commit()

        self.browser.open(
            af_ca.absolute_url() + '/' + b_ca.id
            + '/@@create_translation?language=en')

        self.browser.getControl(
            name="form.widgets.IDublinCore.title").value = u"Test folder"
        self.browser.getControl(name="form.buttons.save").click()

        self.portal._p_jar.sync()

        self.assertIn('test-folder', self.portal['en'].objectIds())