Example #1
0
 def testVocabularyQueryString(self):
     """Test querying a class based vocabulary with a search string.
     """
     view = VocabularyView(self.portal, self.request)
     self.request.form.update({'name': 'vocab_class', 'query': 'three'})
     data = json.loads(view())
     self.assertEqual(len(data['results']), 1)
Example #2
0
 def testVocabularyFunctionQueryString(self):
     """Test querying a function based vocabulary with a search string.
     """
     view = VocabularyView(self.portal, self.request)
     self.request.form.update({'name': 'vocab_function', 'query': 'third'})
     data = json.loads(view())
     self.assertEquals(len(data['results']), 1)
Example #3
0
 def testVocabularyMissing(self):
     view = VocabularyView(self.portal, self.request)
     self.request.form.update({
         'name': 'vocabulary.that.does.not.exist',
     })
     data = json.loads(view())
     self.assertEquals(data['error'], 'Vocabulary lookup not allowed')
Example #4
0
 def testVocabularyCatalogUnsafeMetadataDisallowed(self):
     """Users without permission "Modify portal content" are not allowed to
     see ``_unsafe_metadata``.
     """
     self.portal.invokeFactory('Document', id="page", title="page")
     self.portal.page.reindexObject()
     # Downgrade permissions
     setRoles(self.portal, TEST_USER_ID, [])
     view = VocabularyView(self.portal, self.request)
     query = {
         'criteria': [{
             'i': 'path',
             'o': 'plone.app.querystring.operation.string.path',
             'v': '/plone/page'
         }]
     }
     self.request.form.update({
         'name':
         'plone.app.vocabularies.Catalog',
         'query':
         json.dumps(query),
         'attributes': [
             'id',
             'commentors',
             'Creator',
             'listCreators',
         ]
     })
     data = json.loads(view())
     # Only one result key should be returned, as ``commentors``,
     # ``Creator`` and ``listCreators`` is considered unsafe and thus
     # skipped.
     self.assertEqual(len(list(data['results'][0].keys())), 1)
Example #5
0
    def testUntranslatableMetadata(self):
        """Test translation of ``@@getVocabulary`` view results.
        From the standard metadata columns, only ``Type`` is translated.
        """
        # Language is set via language negotiaton patch.

        self.portal.invokeFactory('Document', id="page", title="page")
        self.portal.page.reindexObject()
        view = VocabularyView(self.portal, self.request)
        query = {
            'criteria': [{
                'i': 'path',
                'o': 'plone.app.querystring.operation.string.path',
                'v': '/plone/page'
            }]
        }
        self.request.form.update({
            'name': 'plone.app.vocabularies.Catalog',
            'query': json.dumps(query),
            'attributes': [
                'id',
                'portal_type',
                'Type',
            ]
        })

        # data['results'] should return one item, which represents the document
        # created before.
        data = json.loads(view())

        # Type is translated
        self.assertEqual(data['results'][0]['Type'], 'Seite')

        # portal_type is never translated
        self.assertEqual(data['results'][0]['portal_type'], 'Document')
Example #6
0
 def testVocabularyBatching(self):
     amount = 30
     for i in xrange(amount):
         self.portal.invokeFactory('Document',
                                   id="page" + str(i),
                                   title="Page" + str(i))
         self.portal['page' + str(i)].reindexObject()
     view = VocabularyView(self.portal, self.request)
     query = {
         'criteria': [{
             'i': 'path',
             'o': 'plone.app.querystring.operation.string.path',
             'v': '/plone'
         }]
     }
     # batch pages are 1-based
     self.request.form.update({
         'name': 'plone.app.vocabularies.Catalog',
         'query': json.dumps(query),
         'attributes': ['UID', 'id', 'title', 'path'],
         'batch': {
             'page': '1',
             'size': '10'
         }
     })
     data = json.loads(view())
     self.assertEquals(len(data['results']), 10)
     self.assertEquals(data['total'], amount)
Example #7
0
 def testVocabularyCatalogUnsafeMetadataAllowed(self):
     """Users with permission "Modify portal content" are allowed to see
     ``_unsafe_metadata``.
     """
     self.portal.invokeFactory('Document', id="page", title="page")
     self.portal.page.reindexObject()
     view = VocabularyView(self.portal, self.request)
     query = {
         'criteria': [{
             'i': 'path',
             'o': 'plone.app.querystring.operation.string.path',
             'v': '/plone/page'
         }]
     }
     self.request.form.update({
         'name':
         'plone.app.vocabularies.Catalog',
         'query':
         json.dumps(query),
         'attributes': [
             'id',
             'commentors',
             'Creator',
             'listCreators',
         ]
     })
     data = json.loads(view())
     self.assertEqual(len(list(data['results'][0].keys())), 4)
Example #8
0
 def test_vocabulary_field_disallowed(self):
     view = VocabularyView(self.portal.test_at, self.request)
     self.request.form.update({
         'name': 'plone.app.vocabularies.PortalTypes',
         'field': 'disallowed_field',
     })
     data = json.loads(view())
     self.assertEquals(data['error'], 'Vocabulary lookup not allowed')
Example #9
0
 def testVocabularyUnauthorized(self):
     setRoles(self.portal, TEST_USER_ID, [])
     view = VocabularyView(self.portal, self.request)
     self.request.form.update({
         'name': 'plone.app.vocabularies.Users',
         'query': TEST_USER_NAME
     })
     data = json.loads(view())
     self.assertEquals(data['error'], 'Vocabulary lookup not allowed')
Example #10
0
 def test_vocabulary_missing_field(self):
     view = VocabularyView(self.portal.test_at, self.request)
     self.request.form.update({
         'name': 'plone.app.vocabularies.PortalTypes',
         'field': 'missing_field',
     })
     setRoles(self.portal, TEST_USER_ID, ['Member'])
     with self.assertRaises(AttributeError):
         view()
Example #11
0
 def test_vocabulary_widget_vocab_allowed(self):
     view = VocabularyView(self.portal.test_at, self.request)
     self.request.form.update({
         'name': 'plone.app.vocabularies.PortalTypes',
         'field': 'allowed_widget_vocab',
     })
     data = json.loads(view())
     self.assertEquals(len(data['results']),
                       len(self.portal.portal_types.objectIds()))
Example #12
0
 def test_vocabulary_field_default_permission_wrong_vocab(self):
     view = VocabularyView(self.portal.test_at, self.request)
     self.request.form.update({
         'name': 'plone.app.vocabularies.Fake',
         'field': 'default_field',
     })
     setRoles(self.portal, TEST_USER_ID, ['Editor'])
     # Now access should be allowed, but the vocabulary does not exist
     data = json.loads(view())
     self.assertEquals(data['error'], 'Vocabulary lookup not allowed')
Example #13
0
 def test_vocabulary_field_allowed_from_add_form(self):
     add_form = DefaultAddForm(self.portal, self.request)
     add_form.portal_type = 'dx_mock'
     view = VocabularyView(add_form, self.request)
     self.request.form.update({
         'name': 'plone.app.vocabularies.PortalTypes',
         'field': 'allowed_field',
     })
     data = json.loads(view())
     self.assertEquals(len(data['results']),
                       len(self.portal.portal_types.objectIds()))
Example #14
0
 def testPermissionCheckerUnknownField(self):
     _enable_permission_checker(self.portal)
     view = VocabularyView(self.portal, self.request)
     # Unknown field is raises error
     self.request.form.update({
         'name': 'plone.app.vocabularies.PortalTypes',
         'field': 'missing_field',
     })
     with self.assertRaises(AttributeError):
         view()
     _disable_permission_checker(self.portal)
Example #15
0
 def test_vocabulary_on_widget(self):
     view = VocabularyView(self.portal.test_dx, self.request)
     self.request.form.update({
         'name': 'plone.app.vocabularies.PortalTypes',
         'field': 'custom_widget_field',
     })
     data = json.loads(view())
     self.assertEquals(len(data['results']),
                       len(self.portal.portal_types.objectIds()))
     self.request.form['name'] = 'plone.app.vocabularies.Fake'
     data = json.loads(view())
     self.assertEquals(data['error'], 'Vocabulary lookup not allowed')
Example #16
0
 def testPermissionCheckerDisallowed(self):
     _enable_permission_checker(self.portal)
     view = VocabularyView(self.portal, self.request)
     # Disallowed field is not allowed
     # Allowed field is allowed
     self.request.form.update({
         'name': 'plone.app.vocabularies.PortalTypes',
         'field': 'disallowed_field',
     })
     data = json.loads(view())
     self.assertEquals(data['error'], 'Vocabulary lookup not allowed')
     _disable_permission_checker(self.portal)
Example #17
0
 def testPermissionCheckerShortCircuit(self):
     _enable_permission_checker(self.portal)
     view = VocabularyView(self.portal, self.request)
     # Known vocabulary name short-circuits field permission check
     # global permission
     self.request.form['name'] = 'plone.app.vocabularies.Users'
     self.request.form.update({
         'name': 'plone.app.vocabularies.Users',
         'field': 'disallowed_field',
     })
     data = json.loads(view())
     self.assertEquals(data['results'], [])
     _disable_permission_checker(self.portal)
Example #18
0
 def testPermissionCheckerUnknownVocab(self):
     _enable_permission_checker(self.portal)
     view = VocabularyView(self.portal, self.request)
     # Unknown vocabulary gives error
     self.request.form.update({
         'name': 'vocab.does.not.exist',
         'field': 'allowed_field',
     })
     data = json.loads(view())
     self.assertEquals(
         data['error'],
         'No factory with name "{}" exists.'.format('vocab.does.not.exist'))
     _disable_permission_checker(self.portal)
Example #19
0
    def testPermissionCheckerAllowed(self):
        # Setup a custom permission checker on the portal
        _enable_permission_checker(self.portal)
        view = VocabularyView(self.portal, self.request)

        # Allowed field is allowed
        self.request.form.update({
            'name': 'plone.app.vocabularies.PortalTypes',
            'field': 'allowed_field',
        })
        data = json.loads(view())
        self.assertEquals(len(data['results']),
                          len(self.portal.portal_types.objectIds()))
        _disable_permission_checker(self.portal)
Example #20
0
 def testVocabularyUsers(self):
     acl_users = self.portal.acl_users
     membership = self.portal.portal_membership
     amount = 10
     for i in range(amount):
         id = 'user' + str(i)
         acl_users.userFolderAddUser(id, 'secret', ['Member'], [])
         member = membership.getMemberById(id)
         member.setMemberProperties(mapping={"fullname": id})
     view = VocabularyView(self.portal, self.request)
     self.request.form.update({
         'name': 'plone.app.vocabularies.Users',
         'query': 'user'
     })
     data = json.loads(view())
     self.assertEqual(len(data['results']), amount)
Example #21
0
 def testVocabularyNoResults(self):
     """Tests that the widgets displays correctly
     """
     view = VocabularyView(self.portal, self.request)
     query = {
         'criteria': [{
             'i': 'path',
             'o': 'plone.app.querystring.operation.string.path',
             'v': '/foo'
         }]
     }
     self.request.form.update({
         'name': 'plone.app.vocabularies.Catalog',
         'query': json.dumps(query)
     })
     data = json.loads(view())
     self.assertEquals(len(data['results']), 0)
Example #22
0
    def test_vocabulary_field_default_permission(self):
        view = VocabularyView(self.portal.test_at, self.request)
        self.request.form.update({
            'name': 'plone.app.vocabularies.PortalTypes',
            'field': 'default_field',
        })
        # If the field is does not have a security declaration, the
        # default edit permission is tested (Modify portal content)
        setRoles(self.portal, TEST_USER_ID, ['Member'])
        data = json.loads(view())
        self.assertEquals(data['error'], 'Vocabulary lookup not allowed')

        setRoles(self.portal, TEST_USER_ID, ['Editor'])
        # Now access should be allowed, but the vocabulary does not exist
        data = json.loads(view())
        self.assertEquals(len(data['results']),
                          len(self.portal.portal_types.objectIds()))
Example #23
0
 def testVocabularyCatalogResults(self):
     self.portal.invokeFactory('Document', id="page", title="page")
     self.portal.page.reindexObject()
     view = VocabularyView(self.portal, self.request)
     query = {
         'criteria': [{
             'i': 'path',
             'o': 'plone.app.querystring.operation.string.path',
             'v': '/plone'
         }]
     }
     self.request.form.update({
         'name': 'plone.app.vocabularies.Catalog',
         'query': json.dumps(query),
         'attributes': ['UID', 'id', 'title', 'path']
     })
     data = json.loads(view())
     self.assertEqual(len(data['results']), 1)
Example #24
0
    def testGetMimeIcon(self):
        """ Check if the returned icon is correct
        """
        self.request.form.update({
            "name": "plone.app.vocabularies.Catalog",
            "attributes": ["getMimeIcon"],
        })
        view = VocabularyView(self.portal, self.request)

        # Check an empty file
        self.portal.invokeFactory("File", id="my-file", title="My file")
        obj = self.portal["my-file"]
        obj.reindexObject()

        self.assertListEqual(
            json.loads(view())["results"], [{
                "getMimeIcon": None
            }])

        # mock a pdf
        obj.file = mock.Mock(contentType="application/pdf")
        obj.reindexObject()
        self.assertListEqual(
            json.loads(view())["results"],
            [{
                "getMimeIcon": "/plone/++resource++mimetype.icons/pdf.png"
            }],
        )

        # mock something unknown
        obj.file = mock.Mock(contentType="x-foo/x-bar")
        obj.reindexObject()
        self.assertListEqual(
            json.loads(view())["results"],
            [{
                "getMimeIcon": "/plone/++resource++mimetype.icons/unknown.png"
            }],
        )