def test_relation_list_gets_cleared(self):
        a_ca = api.translate(self.a_en, 'ca')

        adapted = IRelatedItems(self.a_en)
        dm = getMultiAdapter((adapted, IRelatedItems['relatedItems']),
                             IDataManager)
        dm.set([])

        notify(ObjectModifiedEvent(self.a_en))

        adapted = IRelatedItems(a_ca)
        dm = getMultiAdapter((adapted, IRelatedItems['relatedItems']),
                             IDataManager)
        self.assertEqual(dm.get(), [])
Example #2
0
    def related(self):
        context = aq_inner(self.context)
        res = ()
        if base_hasattr(context, 'relatedItems'):
            related = context.relatedItems
        else:
            try:
                behavior = IRelatedItems(context)
                related = behavior.relatedItems
            except TypeError:
                return res
        tools = context.restrictedTraverse('@@plone_tools')
        catalog = tools.catalog()
        if related:
            related = [item.to_path for item in related if item.to_path]
            brains = catalog(path=related)
            if brains:
                # build a position dict by iterating over the items once
                positions = dict([(v, i) for (i, v) in enumerate(related)])
                # We need to keep the ordering intact
                res = list(brains)

                def _key(brain):
                    return positions.get(brain.UID, -1)

                res.sort(key=_key)
        return res
    def test_has_relation_list(self):
        adapted = IRelatedItems(self.a_en)

        bound = IRelatedItems['relatedItems'].bind(adapted)
        self.assertEqual(len(bound.get(adapted)), 1)

        value = bound.get(adapted)
        self.assertEqual(type(value[0]), RelationValue)

        dm = getMultiAdapter((adapted, IRelatedItems['relatedItems']),
                             IDataManager)
        self.assertEqual(dm.get(), [self.b_en])
    def test_relation_list_gets_copied(self):
        a_ca = api.translate(self.a_en, 'ca')

        adapted = IRelatedItems(a_ca)

        bound = IRelatedItems['relatedItems'].bind(adapted)
        self.assertEqual(len(bound.get(adapted)), 1)

        value = bound.get(adapted)
        self.assertEqual(type(value[0]), RelationValue)

        dm = getMultiAdapter((adapted, IRelatedItems['relatedItems']),
                             IDataManager)
        self.assertEqual(dm.get(), [self.b_en])
Example #5
0
    def setUp(self):
        self.portal = self.layer['portal']
        self.request = self.layer['request']
        alsoProvides(self.request, IDefaultBrowserLayer)
        alsoProvides(self.request, IPloneAppMultilingualInstalled)

        self.a_en = createContentInContainer(
            self.portal['en'], 'Document', title=u'Test Document')

        self.b_en = createContentInContainer(
            self.portal['en'], 'Document', title=u'Another Document')

        adapted = IRelatedItems(self.a_en)
        dm = getMultiAdapter(
            (adapted, IRelatedItems['relatedItems']),
            IDataManager
        )
        dm.set([self.b_en])
    def test_copied_relation_list_gets_translated(self):
        a_ca = api.translate(self.a_en, 'ca')
        b_ca = api.translate(self.b_en, 'ca')

        # But only after self.a_en is modified (this is a feature, not a bug):
        notify(ObjectModifiedEvent(self.a_en))

        adapted = IRelatedItems(a_ca)

        bound = IRelatedItems['relatedItems'].bind(adapted)
        self.assertEqual(len(bound.get(adapted)), 1)

        value = bound.get(adapted)
        self.assertEqual(type(value[0]), RelationValue)

        dm = getMultiAdapter((adapted, IRelatedItems['relatedItems']),
                             IDataManager)
        self.assertEqual(dm.get(), [b_ca])
Example #7
0
    def test_migrate_relations(self):
        self.grant('Manager')

        foo = create(Builder('folder').titled(u'Foo'))
        bar = create(
            Builder('folder').titled(u'Bar').having(relatedItems=[foo]))

        self.assertEquals([foo], bar.getRelatedItems())
        self.assertEquals([bar], foo.getBackReferences())

        self.install_profile('plone.app.contenttypes:default')
        map(InplaceMigrator('Folder').migrate_object, (foo, bar))

        foo = self.portal.get('foo')
        bar = self.portal.get('bar')

        self.assertEquals([foo],
                          map(attrgetter('to_object'),
                              IRelatedItems(bar).relatedItems))