Example #1
0
    def test_multiple_widgets(self):
        from zope.event import notify
        from Products.Archetypes.Widget import RelatedItemsWidget
        from zope.interface import implementer
        from zope.lifecycleevent import ObjectCreatedEvent
        from plone.uuid.interfaces import IUUID
        from plone.uuid.interfaces import IAttributeUUID

        @implementer(IAttributeUUID)
        class ExampleContent(object):
            pass

        obj1 = ExampleContent()
        obj2 = ExampleContent()
        notify(ObjectCreatedEvent(obj1))
        notify(ObjectCreatedEvent(obj2))

        self.context.fieldvalue = lambda: obj1

        field1 = ReferenceField(
            'fieldname1',
            relationship="A",
            multiValued=False,
            widget=RelatedItemsWidget(),
        )
        field1.accessor = "fieldvalue"
        base_args1 = field1.widget._base_args(self.context, field1,
                                              self.request)  # noqa

        self.assertDictContainsSubset(
            {
                'name': 'fieldname1',
                'value': '{}'.format(IUUID(obj1)),
                'pattern': 'relateditems',
            }, base_args1)
        self.assertDictContainsSubset(
            {
                'separator':
                ';',
                'orderable':
                True,
                'maximumSelectionSize':
                1,
                'vocabularyUrl':
                '/@@getVocabulary?name='
                'plone.app.vocabularies.Catalog'
                '&field=fieldname1',
                'basePath':
                '/Plone/doc',
                'contextPath':
                '/Plone/doc',
                'rootPath':
                '/',
                'rootUrl':
                '',
            }, base_args1.get('pattern_options', {}))

        field2 = ReferenceField(
            'fieldname2',
            relationship="A",
            multiValued=True,
            widget=RelatedItemsWidget(),
        )
        field2.accessor = "fieldvalue"
        self.context.fieldvalue = lambda: [obj1, obj2]
        base_args2 = field2.widget._base_args(self.context, field2,
                                              self.request)  # noqa

        self.assertDictContainsSubset(
            {
                'name': 'fieldname2',
                'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)),
                'pattern': 'relateditems',
            }, base_args2)

        self.assertDictContainsSubset(
            {
                'separator':
                ';',
                'orderable':
                True,
                'maximumSelectionSize':
                -1,
                'vocabularyUrl':
                '/@@getVocabulary?name='
                'plone.app.vocabularies.Catalog'
                '&field=fieldname2',
                'basePath':
                '/Plone/doc',
                'contextPath':
                '/Plone/doc',
                'rootPath':
                '/',
                'rootUrl':
                '',
            }, base_args2.get('pattern_options', {}))
Example #2
0
    def test_multiple_widgets(self):
        from zope.event import notify
        from Products.Archetypes.Widget import RelatedItemsWidget
        from zope.interface import implements
        from zope.lifecycleevent import ObjectCreatedEvent
        from plone.uuid.interfaces import IUUID
        from plone.uuid.interfaces import IAttributeUUID

        class ExampleContent(object):
            implements(IAttributeUUID)

        obj1 = ExampleContent()
        obj2 = ExampleContent()
        notify(ObjectCreatedEvent(obj1))
        notify(ObjectCreatedEvent(obj2))

        with mock.patch('plone.app.widgets.utils.getUtility') as mock_method:
            self.context.fieldvalue = lambda: obj1

            field1 = ReferenceField(
                'fieldname1',
                relationship="A",
                multiValued=False,
                widget=RelatedItemsWidget(),
            )
            field1.accessor = "fieldvalue"

            self.assertEqual(
                {
                    'name': 'fieldname1',
                    'value': '{}'.format(IUUID(obj1)),
                    'pattern': 'relateditems',
                    'pattern_options': {
                        'folderTypes': ['Folder'],
                        'homeText': u'Home',
                        'separator': ';',
                        'orderable': True,
                        'searchAllText': u'Entire site',
                        'searchText': u'Search',
                        'maximumSelectionSize': 1,
                        'vocabularyUrl': '/@@getVocabulary?name='
                                         'plone.app.vocabularies.Catalog'
                                         '&field=fieldname1',
                    },
                },
                field1.widget._base_args(self.context, field1, self.request),
            )

            field2 = ReferenceField(
                'fieldname2',
                relationship="A",
                multiValued=True,
                widget=RelatedItemsWidget(),
            )
            field2.accessor = "fieldvalue"
            self.context.fieldvalue = lambda: [obj1, obj2]

            self.assertEqual(
                {
                    'name': 'fieldname2',
                    'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)),
                    'pattern': 'relateditems',
                    'pattern_options': {
                        'folderTypes': ['Folder'],
                        'homeText': u'Home',
                        'separator': ';',
                        'orderable': True,
                        'searchAllText': u'Entire site',
                        'searchText': u'Search',
                        'maximumSelectionSize': -1,
                        'vocabularyUrl': '/@@getVocabulary?name='
                                         'plone.app.vocabularies.Catalog'
                                         '&field=fieldname2',
                    },
                },
                field2.widget._base_args(self.context, field2, self.request),
            )