Beispiel #1
0
    def test_import_dict_field(self):
        xml = """\
<registry>
    <record name="test.registry.field">
        <field type="plone.registry.field.Dict">
          <title>Simple record</title>
          <default>
            <element key="a">1</element>
            <element key="b">3</element>
          </default>
          <key_type type="plone.registry.field.ASCIILine">
            <title>Key</title>
          </key_type>
          <value_type type="plone.registry.field.Int">
            <title>Value</title>
          </value_type>
        </field>
    </record>
</registry>
"""

        self.registry.records['test.registry.field'] = \
            Record(field.TextLine(title=u"Simple record", default=u"N/A"),
                   value=u"Old value")

        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.failUnless(isinstance(self.registry.records['test.registry.field'].field, field.Dict))
        self.assertEquals(u"Simple record", self.registry.records['test.registry.field'].field.title)
        self.assertEquals({'a': 1, 'b': 3}, self.registry['test.registry.field'])
Beispiel #2
0
    def test_import_records_remove_with_value(self):
        xml = """\
<registry>
    <records interface="plone.app.registry.tests.data.ITestSettings" />
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(2, len(self.registry.records))
        delete_xml = """\
<registry>
    <records interface="plone.app.registry.tests.data.ITestSettings" remove="true">
      <value key="name">Spam</value>
    </records>
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': delete_xml}

        self.assertRaises(ValueError, importRegistry, context)

        self.assertEquals(2, len(self.registry.records))
    def test_remove_one(self):

        xml = """\
<sharing>
    <role id='CopyEditor'
          title='Can copyedit'
          permission='Delegate edit copy' />
</sharing>
"""
        context = DummyImportContext(self.sm, purge=False)
        context._files = {'sharing.xml': xml}

        import_sharing(context)
        roles = self.roles()

        self.assertEqual(1, len(roles))
        self.assertEqual('Can copyedit', roles['CopyEditor'].title)

        xml = """\
<sharing>
    <role remove="True"
          id='CopyEditor' />
</sharing>
"""
        context = DummyImportContext(self.sm, purge=False)
        context._files = {'sharing.xml': xml}

        import_sharing(context)
        roles = self.roles()

        self.assertEqual(0, len(roles))
    def test_import_override_global(self):

        provideUtility(PersistentSharingPageRole("Do stuff", "A permission"), ISharingPageRole, name="DoerOfStuff")

        xml = """\
<sharing>
    <role id='CopyEditor'
          title='Can copyedit'
          permission='Delegate edit copy' />
    <role id='DoerOfStuff'
          title='Can do stuff'
          permission='Delegate doing stuff' />
</sharing>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'sharing.xml': xml}

        import_sharing(context)
        roles = self.roles()

        self.assertEqual(2, len(roles))
        self.assertEqual('Can copyedit', roles['CopyEditor'].title)
        self.assertEqual('Delegate edit copy', roles['CopyEditor'].required_permission)
        self.assertEqual(None, roles['CopyEditor'].required_interface)
        self.assertEqual('Can do stuff', roles['DoerOfStuff'].title)
        self.assertEqual('Delegate doing stuff', roles['DoerOfStuff'].required_permission)
    def test_remove_multiple(self):
        xml = """\
<sharing>
    <role id='CopyEditor'
          title='Can copyedit'
          permission='Delegate edit copy' />
    <role id='DoerOfStuff'
          title='Can do stuff'
          permission='Delegate doing stuff' />
</sharing>
"""
        context = DummyImportContext(self.sm, purge=False)
        context._files = {'sharing.xml': xml}
        import_sharing(context)

        xml = """\
<sharing>
    <role id='Hacker'
          title='Can hack'
          permission='Hack the system' />
    <role remove="True"
          id='CopyEditor'
          title='Can copyedit'
          permission='Delegate edit copy' />
</sharing>
"""
        context = DummyImportContext(self.sm, purge=False)
        context._files = {'sharing.xml': xml}

        import_sharing(context)
        roles = self.roles()

        self.assertEqual(2, len(roles))
        self.assertEqual('Can do stuff', roles['DoerOfStuff'].title)
        self.assertEqual('Can hack', roles['Hacker'].title)
    def test_import_multiple_times_no_purge(self):

        xml = """\
<sharing>
    <role id='CopyEditor' title='Can copyedit' permission='Delegate edit copy'/>
</sharing>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'sharing.xml': xml}

        import_sharing(context)
        roles = self.roles()

        self.assertEquals(1, len(roles))
        self.assertEquals('Can copyedit', roles['CopyEditor'].title)
        self.assertEquals('Delegate edit copy', roles['CopyEditor'].required_permission)

        xml = """\
<sharing>
    <role id='Controller' title='Can control' />
</sharing>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'sharing.xml': xml}

        import_sharing(context)
        roles = self.roles()

        self.assertEquals(2, len(roles))
        self.assertEquals('Can copyedit', roles['CopyEditor'].title)
        self.assertEquals('Delegate edit copy', roles['CopyEditor'].required_permission)
        self.assertEquals('Can control', roles['Controller'].title)
        self.assertEquals(None, roles['Controller'].required_permission)
Beispiel #7
0
    def test_import_collection_nopurge(self):
        xml = """\
<registry>
    <record name="test.registry.field">
        <value purge="false">
            <element>4</element>
            <element>6</element>
        </value>
    </record>
</registry>
"""

        self.registry.records['test.registry.field'] = \
            Record(field.Set(title=u"Simple record", value_type=field.Int(title=u"Val")),
                   value=set([1]))

        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.failUnless(isinstance(self.registry.records['test.registry.field'].field, field.Set))
        self.assertEquals(u"Simple record", self.registry.records['test.registry.field'].field.title)
        self.assertEquals(frozenset([1, 4, 6]), self.registry['test.registry.field'])
    def test_import_value_only(self):
        xml = """\
<registry>
    <record name="test.export.simple">
        <value>Imported value</value>
    </record>
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        self.registry.records['test.export.simple'] = \
            Record(field.TextLine(title=u"Simple record", default=u"N/A"),
                   value=u"Sample value")
        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.assertEquals(
            u"Simple record",
            self.registry.records['test.export.simple'].field.title
        )
        self.assertEquals(
            u"Imported value",
            self.registry['test.export.simple']
        )
    def test_import_field_ref(self):
        xml = """\
<registry>
    <record name="test.registry.field.override">
        <field ref="test.registry.field" />
        <value>Another value</value>
    </record>
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        self.registry.records['test.registry.field'] = Record(
                field.TextLine(title=u"Simple record", default=u"N/A"),
                value=u"Sample value")

        importRegistry(context)

        self.assertEquals(2, len(self.registry.records))
        self.failUnless(
            IFieldRef.providedBy(
                self.registry.records['test.registry.field.override'].field)
            )
        self.assertEquals(
            u"Simple record",
            self.registry.records['test.registry.field.override'].field.title
        )
        self.assertEquals(
            u"value",
            self.registry.records['test.registry.field.override'].field.__name__  # noqa
        )
        self.assertEquals(
            u"Another value",
            self.registry['test.registry.field.override']
        )
    def test_import_field_and_interface(self):
        xml = """\
<registry>
    <record name="test.registry.field" interface="plone.app.registry.tests.data.ITestSettingsDisallowed" field="age">
        <field type="plone.registry.field.ASCIILine">
          <default>N/A</default>
          <title>Simple record</title>
        </field>
    </record>
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.failUnless(
            isinstance(
                self.registry.records['test.registry.field'].field,
                field.ASCIILine
            )
        )
        self.assertEquals(
            u"Simple record",
            self.registry.records['test.registry.field'].field.title
        )
        self.assertEquals(
            "N/A",
            self.registry['test.registry.field']
        )
Beispiel #11
0
    def test_import_overwrite_field_with_field(self):
        xml = """\
<registry>
    <record name="test.registry.field">
        <field type="plone.registry.field.ASCIILine">
          <default>Nada</default>
          <title>Simple record</title>
        </field>
    </record>
</registry>
"""

        self.registry.records['test.registry.field'] = \
            Record(field.TextLine(title=u"Simple record", default=u"N/A"),
                   value=u"Old value")

        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.failUnless(isinstance(self.registry.records['test.registry.field'].field, field.ASCIILine))
        self.assertEquals(u"Simple record", self.registry.records['test.registry.field'].field.title)
        self.assertEquals("Nada", self.registry['test.registry.field'])
    def test_import_field_only(self):
        xml = """\
<registry>
    <record name="test.registry.field">
        <field type="plone.registry.field.TextLine">
          <default>N/A</default>
          <title>Simple record</title>
        </field>
    </record>
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.failUnless(
            isinstance(
                self.registry.records['test.registry.field'].field,
                field.TextLine)
        )
        self.assertEquals(
            u"Simple record",
            self.registry.records['test.registry.field'].field.title
        )
        self.assertEquals(
            u"value",
            self.registry.records['test.registry.field'].field.__name__
        )
        self.assertEquals(
            u"N/A",
            self.registry['test.registry.field']
        )
    def test_import_records_omit(self):
        xml = """\
<registry>
    <records interface="plone.app.registry.tests.data.ITestSettingsDisallowed">
        <omit>blob</omit>
    </records>
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        self.registry.records['test.export.simple'] = \
            Record(field.TextLine(title=u"Simple record", default=u"N/A"),
                   value=u"Sample value")
        importRegistry(context)

        self.assertEquals(3, len(self.registry.records))

        self.failUnless(
            'plone.app.registry.tests.data.ITestSettingsDisallowed.name' in
            self.registry
        )
        self.failUnless(
            'plone.app.registry.tests.data.ITestSettingsDisallowed.age' in
            self.registry
        )
Beispiel #14
0
    def test_import_with_comments(self):
        xml = """\
<registry>
    <records interface="plone.app.registry.tests.data.ITestSettings" prefix="plone.app.registry.tests.data.SomethingElse">
        <!-- set values in this interface -->
        <value key="name">Magic</value>
        <value key="age">42</value>
    </records>
    <record name="test.registry.field">
        <!-- comment on this field or value -->
        <field type="plone.registry.field.TextLine">
          <default>N/A</default>
          <!-- comment here too -->
          <title>Simple record</title>
        </field>
    </record>
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(3, len(self.registry.records))

        self.failUnless(isinstance(self.registry.records['test.registry.field'].field, field.TextLine))
        self.assertEquals(u"Simple record", self.registry.records['test.registry.field'].field.title)
        self.assertEquals(u"value", self.registry.records['test.registry.field'].field.__name__)
        self.assertEquals(u"N/A", self.registry['test.registry.field'])

        self.failUnless('plone.app.registry.tests.data.SomethingElse.name' in self.registry)
        self.failUnless('plone.app.registry.tests.data.SomethingElse.age' in self.registry)
        self.assertEqual(self.registry['plone.app.registry.tests.data.SomethingElse.name'], 'Magic')
        self.assertEqual(self.registry['plone.app.registry.tests.data.SomethingElse.age'], 42)
    def test_export_multiple(self):
        sm = self.site.getSiteManager()

        # Will not be exported, as it's global
        provideUtility(PersistentSharingPageRole("Do stuff", "A permission"), ISharingPageRole, name="DoerOfStuff")

        # Will not be exported, as it wasn't imported with this handler
        sm.registerUtility(PersistentSharingPageRole("Do other Stuff"), ISharingPageRole, "DoerOfOtherStuff")

        import_xml = """\
<sharing>
    <role id='CopyEditor' title='Can copyedit' permission='Delegate edit copy'/>
    <role id='Controller' title='Can control' />
</sharing>
"""

        export_xml = """\
<?xml version="1.0"?>
<sharing>
 <role title="Can control" id="Controller"/>
 <role title="Can copyedit" id="CopyEditor" permission="Delegate edit copy"/>
</sharing>
"""

        import_context = DummyImportContext(self.site, purge=False)
        import_context._files = {'sharing.xml': import_xml}

        import_sharing(import_context)

        export_context = DummyExportContext(self.site)
        export_sharing(export_context)

        self.assertEquals('sharing.xml', export_context._wrote[0][0])
        self.assertEquals(export_xml, export_context._wrote[0][1])
Beispiel #16
0
    def test_import_collection_field(self):
        xml = """\
<registry>
    <record name="test.registry.field">
        <field type="plone.registry.field.FrozenSet">
          <title>Simple record</title>
          <default>
            <element>1</element>
            <element>3</element>
          </default>
          <value_type type="plone.registry.field.Int">
            <title>Value</title>
          </value_type>
        </field>
    </record>
</registry>
"""

        self.registry.records['test.registry.field'] = \
            Record(field.TextLine(title=u"Simple record", default=u"N/A"),
                   value=u"Old value")

        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.failUnless(isinstance(self.registry.records['test.registry.field'].field, field.FrozenSet))
        self.assertEquals(u"Simple record", self.registry.records['test.registry.field'].field.title)
        self.assertEquals(frozenset([1, 3]), self.registry['test.registry.field'])
    def test_import_collection_frozenset_append(self):
        xml = """\
<registry>
    <record name="test.registry.field">
        <value purge="false">
            <element>4</element>
            <element>6</element>
        </value>
    </record>
</registry>
"""

        self.registry.records['test.registry.field'] = Record(
            field.FrozenSet(
                title=u"Simple record",
                value_type=field.Int(title=u"Val")
            ),
            value=frozenset([2, 4])
        )

        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.assertEquals(
            frozenset([2, 4, 6]),
            self.registry['test.registry.field']
        )
    def test_import_collection_tuple_append(self):
        xml = """\
<registry>
    <record name="test.registry.field">
        <value purge="false">
            <element>b</element>
            <element>c</element>
        </value>
    </record>
</registry>
"""

        self.registry.records['test.registry.field'] = Record(
            field.Tuple(
                title=u"Simple record",
                value_type=field.TextLine(title=u"Val")
            ),
            value=(u"a", u"b", )
        )

        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.assertEquals(
            (u"a", u"b", u"c", ),
            self.registry['test.registry.field']
        )
Beispiel #19
0
    def test_import_dict_nopurge(self):
        xml = """\
<registry>
    <record name="test.registry.field">
        <value purge="false">
            <element key="x">4</element>
            <element key="y">6</element>
        </value>
    </record>
</registry>
"""

        self.registry.records['test.registry.field'] = \
            Record(field.Dict(title=u"Simple record",
                              key_type=field.ASCIILine(title=u"Key"),
                              value_type=field.Int(title=u"Val")),
                   value={'a': 1})

        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.failUnless(isinstance(self.registry.records['test.registry.field'].field, field.Dict))
        self.assertEquals(u"Simple record", self.registry.records['test.registry.field'].field.title)
        self.assertEquals({'a': 1, 'x': 4, 'y': 6}, self.registry['test.registry.field'])
Beispiel #20
0
    def test_import_choice_field(self):
        xml = """\
<registry>
    <record name="test.registry.field">
        <field type="plone.registry.field.Choice">
          <title>Simple record</title>
          <values>
            <element>One</element>
            <element>Two</element>
          </values>
        </field>
    </record>
</registry>
"""

        self.registry.records['test.registry.field'] = \
            Record(field.TextLine(title=u"Simple record", default=u"N/A"),
                   value=u"Old value")

        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.failUnless(isinstance(self.registry.records['test.registry.field'].field, field.Choice))
        self.assertEquals(u"Simple record", self.registry.records['test.registry.field'].field.title)
        self.assertEquals([u'One', u'Two'], [t.value for t in self.registry.records['test.registry.field'].field.vocabulary])
        self.assertEquals(None, self.registry['test.registry.field'])
Beispiel #21
0
    def test_import_records_remove_with_omit(self):
        xml = """\
<registry>
    <records interface="plone.app.registry.tests.data.ITestSettings" />
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(2, len(self.registry.records))
        delete_xml = """\
<registry>
    <records interface="plone.app.registry.tests.data.ITestSettings" remove="true">
      <omit>name</omit>
    </records>
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': delete_xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))

        self.failUnless('plone.app.registry.tests.data.ITestSettings.name' in self.registry)
        self.failIf('plone.app.registry.tests.data.ITestSettings.age' in self.registry)
    def test_import_overwrite_field_with_interface(self):
        xml = """\
<registry>
    <record name="test.registry.field"  interface="plone.app.registry.tests.data.ITestSettingsDisallowed" field="age" />
</registry>
"""

        self.registry.records['test.registry.field'] = \
            Record(field.TextLine(title=u"Simple record", default=u"N/A"),
                   value=u"Old value")

        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.failUnless(
            isinstance(
                self.registry.records['test.registry.field'].field,
                field.Int
            )
        )
        self.assertEquals(
            u"Age",
            self.registry.records['test.registry.field'].field.title
        )
        self.assertEquals(
            None,
            self.registry['test.registry.field']
        )
    def test_import_records_with_values(self):
        xml = """\
<registry>
    <records interface="plone.app.registry.tests.data.ITestSettings" prefix="plone.app.registry.tests.data.SomethingElse">
        <value key="name">Magic</value>
        <value key="age">42</value>
    </records>
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(2, len(self.registry.records))

        self.failUnless(
            'plone.app.registry.tests.data.SomethingElse.name' in self.registry
        )
        self.failUnless(
            'plone.app.registry.tests.data.SomethingElse.age' in self.registry
        )

        self.assertEqual(
            self.registry['plone.app.registry.tests.data.SomethingElse.name'],
            'Magic'
        )
        self.assertEqual(
            self.registry['plone.app.registry.tests.data.SomethingElse.age'],
            42
        )
    def test_empty_import_no_purge(self):

        xml = "<sharing />"
        context = DummyImportContext(self.site, purge=False)
        context._files = {'sharing.xml': xml}

        import_sharing(context)

        self.assertEqual(0, len(self.roles()))
Beispiel #25
0
    def test_import_records_nonexistant_interface(self):
        xml = """\
<registry>
    <records interface="non.existant.ISchema" />
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        self.assertRaises(ImportError, importRegistry, context)
Beispiel #26
0
def import_mimetypes_registry(registry, xml_filecontent):
    """ Imports the given xml filecontent directly into the mimetypes registry
    """
    portal = registry.portal_url.getPortalObject()
    tool = portal.portal_setup
    imp = DummyImportContext(portal, purge=True, tool=tool)
    doc = parseString(xml_filecontent)
    node = doc.firstChild
    adapter = MimetypesRegistryNodeAdapter(registry, imp)
    adapter._importNode(node)
    return imp.getLogger(adapter._LOGGER_ID)._messages
Beispiel #27
0
    def test_import_purge(self):

        xml = "<registry/>"
        context = DummyImportContext(self.site, purge=True)
        context._files = {'registry.xml': xml}

        self.registry.records['test.export.simple'] = \
            Record(field.TextLine(title=u"Simple record", default=u"N/A"),
                   value=u"Sample value")
        importRegistry(context)

        self.assertEquals(0, len(self.registry.records))
    def test_importCatalogBlacklist(self):
        context = DummyImportContext(self.portal, self.portal.portal_setup)
        context._files[ CATALOGBLACKLIST_XML ] = _TEST1_XML

        importCatalogBlacklist(context)

        self.assertEqual(
            self.catalogblacklist.getBlackListedIndexesForObject(
                self.folder.doc),
            [u'object_provides', u'Description'])
        self.assertEqual(
            self.catalogblacklist.getBlackListedIndexesForObject(
                self.folder),
            [u'object_provides'])
Beispiel #29
0
    def test_import_interface_no_value(self):
        xml = """\
<registry>
    <record interface="plone.app.registry.tests.data.ITestSettingsDisallowed" field="name" />
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(1, len(self.registry.records))
        self.assertEquals(u"Name", self.registry.records['plone.app.registry.tests.data.ITestSettingsDisallowed.name'].field.title)
        self.assertEquals(u"Mr. Registry", self.registry['plone.app.registry.tests.data.ITestSettingsDisallowed.name'])
Beispiel #30
0
    def test_delete_deprecated(self):
        xml = """\
<registry>
    <record name="test.export.simple" delete="true" />
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        self.registry.records['test.export.simple'] = \
            Record(field.TextLine(title=u"Simple record", default=u"N/A"),
                   value=u"Sample value")
        importRegistry(context)

        self.assertEquals(0, len(self.registry.records))
Beispiel #31
0
    def test_import_site_with_subitems_and_blanklines_dotobjects(self):
        self._setUpAdapters()
        ITEM_IDS = ('foo', 'bar', 'baz')

        site = _makeFolder('site', site_folder=True)

        context = DummyImportContext(site)
        # We want to add 'baz' to 'foo', without losing 'bar'
        correct = '\n'.join(['%s,%s' % (x, TEST_INI_AWARE) for x in ITEM_IDS])
        broken = correct + '\n\n'
        context._files['structure/.objects'] = broken
        for index in range(len(ITEM_IDS)):
            id = ITEM_IDS[index]
            context._files['structure/%s.ini' % id] = KNOWN_INI % (
                'Title: %s' % id,
                'xyzzy',
            )
        importer = self._getImporter()
        importer(context)

        after = site.objectIds()
        self.assertEqual(len(after), len(ITEM_IDS))
        for found_id, expected_id in zip(after, ITEM_IDS):
            self.assertEqual(found_id, expected_id)
Beispiel #32
0
    def test_empty_skip_purge(self):
        from Products.CMFCore.exportimport.skins import importSkinsTool

        _IDS = ('one', 'two', 'three')
        _PATHS = {'basic': 'one', 'fancy': 'three, two, one'}

        site = self._initSite(selections=_PATHS, ids=_IDS)
        skins_tool = site.portal_skins

        self.failIf(site._skin_setup_called)
        self.assertEqual(len(skins_tool.getSkinPaths()), 2)
        self.assertEqual(len(skins_tool.objectItems()), 3)

        context = DummyImportContext(site, False)
        context._files['skins.xml'] = self._EMPTY_EXPORT
        importSkinsTool(context)

        self.assertEqual(skins_tool.default_skin, "default_skin")
        self.assertEqual(skins_tool.request_varname, "request_varname")
        self.failIf(skins_tool.allow_any)
        self.failIf(skins_tool.cookie_persistence)
        self.failUnless(site._skin_setup_called)
        self.assertEqual(len(skins_tool.getSkinPaths()), 2)
        self.assertEqual(len(skins_tool.objectItems()), 3)
Beispiel #33
0
    def test_import_site_with_subfolders_and_preserve(self):
        self._setUpAdapters()

        site = _makeFolder('site', site_folder=True)
        site._setObject('foo', _makeFolder('foo'))
        site.foo._setObject('bar', _makeFolder('bar'))

        context = DummyImportContext(site)
        # We want to add 'baz' to 'foo', without losing 'bar'
        context._files['structure/.objects'] = 'foo,%s' % TEST_FOLDER
        context._files['structure/.preserve'] = '*'
        context._files['structure/foo/.objects'] = 'baz,%s' % TEST_FOLDER
        context._files['structure/foo/.preserve'] = '*'
        context._files['structure/foo/baz/.objects'] = ''

        importer = self._getImporter()
        importer(context)

        self.assertEqual(len(site.objectIds()), 1)
        self.assertEqual(site.objectIds()[0], 'foo')

        self.assertEqual(len(site.foo.objectIds()), 2, site.foo.objectIds())
        self.assertEqual(site.foo.objectIds()[0], 'bar')
        self.assertEqual(site.foo.objectIds()[1], 'baz')
Beispiel #34
0
    def test_import_multiple_times_no_purge(self):

        xml = """\
<sharing>
    <role id='CopyEditor'
          title='Can copyedit'
          permission='Delegate edit copy'
          interface='zope.interface.Interface' />
</sharing>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'sharing.xml': xml}

        import_sharing(context)
        roles = self.roles()

        self.assertEquals(1, len(roles))
        self.assertEquals('Can copyedit', roles['CopyEditor'].title)
        self.assertEquals('Delegate edit copy',
                          roles['CopyEditor'].required_permission)
        self.assertEquals(Interface, roles['CopyEditor'].required_interface)

        xml = """\
<sharing>
    <role id='Controller'
          title='Can control' />
</sharing>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'sharing.xml': xml}

        import_sharing(context)
        roles = self.roles()

        self.assertEquals(2, len(roles))
        self.assertEquals('Can copyedit', roles['CopyEditor'].title)
        self.assertEquals('Delegate edit copy',
                          roles['CopyEditor'].required_permission)
        self.assertEquals(Interface, roles['CopyEditor'].required_interface)
        self.assertEquals('Can control', roles['Controller'].title)
        self.assertEquals(None, roles['Controller'].required_permission)
Beispiel #35
0
    def test_import_records_delete_deprecated(self):
        xml = """\
<registry>
    <records interface="plone.app.registry.tests.data.ITestSettings" />
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': xml}

        importRegistry(context)

        self.assertEquals(2, len(self.registry.records))
        delete_xml = """\
<registry>
    <records interface="plone.app.registry.tests.data.ITestSettings" delete="true"/>
</registry>
"""
        context = DummyImportContext(self.site, purge=False)
        context._files = {'registry.xml': delete_xml}

        importRegistry(context)

        self.assertEquals(0, len(self.registry.records))
Beispiel #36
0
 def test_syntax_error_reporting(self):
     site = self.site
     context = DummyImportContext(site, False)
     context._files['viewlets.xml'] = """<?xml version="1.0"?>\n<"""
     self.assertRaises(ExpatError, importViewletSettingsStorage, context)
    def setUp(self):
        super(TestSchema, self).setUp()
        xml = """<model xmlns:lingua="http://namespaces.plone.org/supermodel/lingua" xmlns:users="http://namespaces.plone.org/supermodel/users" xmlns:form="http://namespaces.plone.org/supermodel/form" xmlns:i18n="http://xml.zope.org/namespaces/i18n" xmlns:security="http://namespaces.plone.org/supermodel/security" xmlns:marshal="http://namespaces.plone.org/supermodel/marshal" xmlns="http://namespaces.plone.org/supermodel/schema" i18n:domain="plone">
  <schema name="member-fields">
    <field name="home_page" type="zope.schema.URI" users:forms="In User Profile">
      <description i18n:translate="help_homepage">
          The URL for your external home page, if you have one.
      </description>
      <required>False</required>
      <title i18n:translate="label_homepage">Home Page</title>
    </field>
    <field name="description" type="zope.schema.Text" users:forms="In User Profile">
      <description i18n:translate="help_biography">
          A short overview of who you are and what you do. Will be displayed
          on your author page, linked from the items you create.
      </description>
      <required>False</required>
      <title i18n:translate="label_biography">Biography</title>
    </field>
    <field name="location" type="zope.schema.TextLine" users:forms="In User Profile">
      <description i18n:translate="help_location">
          Your location - either city and country - or in
          a company setting, where your office is located.
      </description>
      <required>False</required>
      <title i18n:translate="label_biography">Location</title>
    </field>
    <field name="portrait" type="plone.namedfile.field.NamedBlobImage" users:forms="In User Profile">
      <description i18n:translate="help_portrait">
          To add or change the portrait: click the "Browse" button; select a
          picture of yourself. Recommended image size is 75 pixels wide by
          100 pixels tall.
      </description>
      <required>False</required>
      <title i18n:translate="label_portrait">Portrait</title>
    </field>
    <field name="birthdate" type="zope.schema.Date" users:forms="In User Profile">
      <description/>
      <required>False</required>
      <title>Birthdate</title>
    </field>
    <field name="another_date" type="zope.schema.Datetime" users:forms="In User Profile">
      <description/>
      <required>False</required>
      <title>Another date</title>
    </field>
    <field name="age" type="zope.schema.Int" users:forms="In User Profile">
      <description/>
      <required>False</required>
      <title>Age</title>
    </field>
    <field name="department" type="zope.schema.Choice" users:forms="In User Profile">
      <description/>
      <required>False</required>
      <title>Department</title>
      <values>
        <element>Marketing</element>
        <element>Production</element>
        <element>HR</element>
      </values>
    </field>
    <field name="skills" type="zope.schema.Set" users:forms="In User Profile">
      <description/>
      <required>False</required>
      <title>Skills</title>
      <value_type type="zope.schema.Choice">
        <values>
          <element>Programming</element>
          <element>Management</element>
        </values>
      </value_type>
    </field>
    <field name="pi" type="zope.schema.Float" users:forms="In User Profile">
      <description/>
      <required>False</required>
      <title>Pi</title>
    </field>
    <field name="vegetarian" type="zope.schema.Bool" users:forms="In User Profile">
      <description/>
      <required>False</required>
      <title>Vegetarian</title>
    </field>
  </schema>
</model>
"""
        context = DummyImportContext(self.portal, purge=False)
        context._files = {'userschema.xml': xml}
        import_schema(context)
        transaction.commit()

        self.browser = Browser(self.layer['app'])
        self.request = self.layer['request']
    def test_normal(self):
        from Products.GenericSetup.tests.common import DummyImportContext
        from Products.LDAPUserFolder.exportimport import \
            importLDAPUserFolder

        site = self._initSite()
        acl = site.acl_users

        context = DummyImportContext(site)
        context._files['ldapuserfolder.xml'] = _CHANGED_EXPORT
        importLDAPUserFolder(context)

        self.assertEqual(acl.title, 'changed title')
        self.assertEqual(acl._login_attr, 'uid')
        self.assertEqual(acl._uid_attr, 'cn')
        self.assertEqual(acl.users_base, 'ou=users,dc=localhost')
        self.assertEqual(acl.users_scope, 1)
        self.assertEqual(acl._roles, ['Anonymous', 'Member'])
        self.assertEqual(acl.groups_base, 'ou=groups,dc=localhost')
        self.assertEqual(acl.groups_scope, 1)
        self.assertEqual(acl._binduid, 'cn=Manager,dc=localhost')
        self.assertEqual(acl._bindpwd, 'secret')
        self.assertEqual(acl._binduid_usage, 2)
        self.assertEqual(acl._rdnattr, 'uid')
        self.assertEqual(acl._user_objclasses, ['top', 'inetOrgPerson'])
        self.assertTrue(acl._local_groups)
        self.assertTrue(acl._implicit_mapping)
        self.assertEqual(acl._pwd_encryption, 'SSHA')
        self.assertTrue(acl.read_only)
        self.assertEqual(acl._extra_user_filter, '(usertype=privileged)')

        group_mappings = acl.getGroupMappings()
        self.assertEqual(len(group_mappings), 1)
        self.assertEqual(group_mappings[0], ('posixAdmin', 'Manager'))

        schema = acl.getSchemaConfig()
        self.assertEqual(len(schema), 4)
        self.assertEqual(
            schema.get('mail'), {
                'ldap_name': 'mail',
                'friendly_name': 'Email Address',
                'public_name': 'publicmail',
                'multivalued': True,
                'binary': True
            })

        servers = acl.getServers()
        self.assertEqual(len(servers), 2)
        svr1 = {
            'host': 'localhost',
            'port': 636,
            'protocol': 'ldaps',
            'conn_timeout': 10,
            'op_timeout': 10
        }
        svr2 = {
            'host': '/var/spool/ldapi',
            'port': 0,
            'protocol': 'ldapi',
            'conn_timeout': 2,
            'op_timeout': 2
        }
        self.assertTrue(svr1 in servers)
        self.assertTrue(svr2 in servers)

        local_groups = list(acl._groups_store.items())
        self.assertEqual(len(local_groups), 2)
        self.assertTrue(('user1', ['posixAdmin', 'foobar']) in local_groups)
        self.assertTrue(('user2', ['baz']) in local_groups)
Beispiel #39
0
    def testAssignmentPurging(self):
        # initially there should be 3 assignments on the root
        mapping = assignment_mapping_from_key(self.portal,
            manager_name=u"test.testcolumn", category=CONTEXT_CATEGORY, key="/")
        self.assertEqual(3, len(mapping))

        context = DummyImportContext(self.portal, purge=False)
        context._files['portlets.xml'] = """<?xml version="1.0"?>
            <portlets>
                <assignment
                    manager="test.testcolumn"
                    category="context"
                    key="/"
                    purge="True"
                    />
            </portlets>
        """
        importPortlets(context)

        # now they should be gone
        mapping = assignment_mapping_from_key(self.portal,
            manager_name=u"test.testcolumn", category=CONTEXT_CATEGORY, key="/")
        self.assertEqual(0, len(mapping))

        # group assignments should still be there
        mapping = assignment_mapping_from_key(self.portal,
            manager_name=u"test.testcolumn", category=GROUP_CATEGORY, key="Reviewers")
        self.assertEqual(1, len(mapping))

        # and be purgable
        context = DummyImportContext(self.portal, purge=False)
        context._files['portlets.xml'] = """<?xml version="1.0"?>
            <portlets>
                <assignment
                    manager="test.testcolumn"
                    category="group"
                    key="Reviewers"
                    purge="True"
                    />
            </portlets>
        """
        importPortlets(context)

        # now they should be gone
        mapping = assignment_mapping_from_key(self.portal,
            manager_name=u"test.testcolumn", category=GROUP_CATEGORY, key="Reviewers")
        self.assertEqual(0, len(mapping))

        # also content type assignments should still be there
        mapping = assignment_mapping_from_key(self.portal,
            manager_name=u"test.testcolumn", category=CONTENT_TYPE_CATEGORY, key="Folder")
        self.assertEqual(2, len(mapping))

        # and be purgable
        context = DummyImportContext(self.portal, purge=False)
        context._files['portlets.xml'] = """<?xml version="1.0"?>
            <portlets>
                <assignment
                    manager="test.testcolumn"
                    category="content_type"
                    key="Folder"
                    purge="True"
                    />
            </portlets>
        """
        importPortlets(context)

        # now they should be gone
        mapping = assignment_mapping_from_key(self.portal,
            manager_name=u"test.testcolumn", category=CONTENT_TYPE_CATEGORY, key="Folder")
        self.assertEqual(0, len(mapping))