コード例 #1
0
 def update(self):
     browser = self.context.getBrowser()
     if browser is not None:
         try:
             api = CMISZopeAPI(browser)
             self.results = api.query(self.context.query)
         except CMISConnectorError:
             self.feedback = u'Connector error.'
     else:
         self.feedback = u'Browser not configured.'
     return self.results
コード例 #2
0
 def update(self):
     browser = self.context.getBrowser()
     if browser is not None:
         try:
             api = CMISZopeAPI(browser)
             self.results = api.query(self.context.query)
         except CMISConnectorError:
             self.feedback = u'Connector error.'
     else:
         self.feedback = u'Browser not configured.'
     return self.results
コード例 #3
0
 def setUp(self):
     CMISBrowserTestCase.setUp(self)
     self.loginAsPortalOwner()
     self.browser = self.portal._getOb(
         self.portal.invokeFactory('CMIS Browser', 'browser'))
     settings = TestSettings(self.method)
     settings.configureBrowser(self.browser)
     self.api = CMISZopeAPI(self.browser)
コード例 #4
0
 def update(self):
     self.is_searching = 'SearchableText' in self.request.form
     self.results = []
     self.count = 0
     if self.is_searching:
         try:
             browser = self.context.getCMISBrowser()
         except:
             return
         if not ICMISBrowser.providedBy(browser):
             return
         text = self.request.form['SearchableText']
         settings = ICMISSearchConfiguration(browser)
         api = CMISZopeAPI(browser)
         batch_start = self.request.form.get('b_start', '0')
         try:
             batch_start = int(batch_start)
         except:
             batch_start = 0
         self.results = api.search(
             text, quotable=settings.quote, scorable=settings.score)
         self.count = len(self.results)
         self.batch = Batch(self.results, self.batch_size, batch_start)
コード例 #5
0
class APITestCase(CMISBrowserTestCase):
    method = None

    def setUp(self):
        CMISBrowserTestCase.setUp(self)
        self.loginAsPortalOwner()
        self.browser = self.portal._getOb(
            self.portal.invokeFactory('CMIS Browser', 'browser'))
        settings = TestSettings(self.method)
        settings.configureBrowser(self.browser)
        self.api = CMISZopeAPI(self.browser)

    def test_api(self):
        """Test interface and miscealous features.
        """
        self.assertTrue(verifyObject(ICMISZopeAPI, self.api))
        info = self.api.info()
        self.assertTrue('vendorName' in info)
        self.assertTrue('productName' in info)
        self.assertTrue('productVersion' in info)
        self.assertTrue('repositoryName' in info)
        self.assertTrue('repositoryDescription' in info)

    def test_root(self):
        """The API should have a root attribute that represent the
        root of the browser.
        """
        root = self.api.root

        self.assertTrue(verifyObject(ICMISRootFolder, root))
        self.assertEqual(aq_parent(root), self.browser)
        self.assertEqual(root.getId(),None)
        self.assertEqual(
            root.getPhysicalPath(),
            ('', 'plone', 'browser'))
        self.assertEqual(
            root.absolute_url(),
            'http://nohost/plone/browser')
        self.assertEqual(
            root.Identifier(),
            'http://nohost/plone/browser')
        self.assertEqual(root.Type(), 'CMIS Folder')
        self.assertEqual(root.Format(), 'text/html')

    def test_traverse_document(self):
        """Test traverse directly to a document.
        """
        content = self.api.traverse('documentation.txt')
        self.assertTrue(verifyObject(ICMISDocument, content))
        self.assertEqual(aq_parent(content), self.api.root)
        self.assertEqual(content.getId(), 'documentation.txt')
        self.assertEqual(
            content.getPhysicalPath(),
            ('', 'plone', 'browser', 'documentation.txt'))
        self.assertEqual(
            content.absolute_url(),
            'http://nohost/plone/browser/documentation.txt')
        self.assertEqual(
            content.Identifier(),
            'http://nohost/plone/browser/documentation.txt')
        self.assertEqual(content.Type(), 'CMIS Document')
        self.assertEqual(content.Format(), 'text/plain; charset=UTF-8')

    def test_traverse_folder(self):
        """Test traverse directly to a folder.
        """
        folder = self.api.traverse('soap')
        self.assertTrue(verifyObject(ICMISFolder, folder))
        self.assertEqual(aq_parent(folder), self.api.root)
        self.assertEqual(folder.getId(), 'soap')
        self.assertEqual(
            folder.getPhysicalPath(),
            ('', 'plone', 'browser', 'soap'))
        self.assertEqual(
            folder.absolute_url(),
            'http://nohost/plone/browser/soap')
        self.assertEqual(
            folder.Identifier(),
            'http://nohost/plone/browser/soap')
        self.assertEqual(folder.Type(), 'CMIS Folder')
        self.assertEqual(folder.Format(), 'text/html')

        # A Folder can list its own content
        contents = folder.getFolderContents()
        self.assertEqual(len(contents), 2)
        contents = sorted(contents, key=lambda c: c.getId())
        self.assertEqual(
            map(lambda c: c.getId(), contents),
            ['info', 'specs.txt'])
        self.assertEqual(
            map(lambda c: c.Type(), contents),
            ['CMIS Folder', 'CMIS Document'])
        self.assertEqual(
            map(lambda c: c.Format(), contents),
            ['text/html', 'text/plain'])
        self.assertEqual(
            map(lambda c: c.absolute_url(), contents),
            ['http://nohost/plone/browser/soap/info',
             'http://nohost/plone/browser/soap/specs.txt'])

    def test_traverse_notfound(self):
        """Test traverse to an item that doesn't exists.
        """
        content = self.api.traverse('nowhere')
        self.assertEqual(content, None)

    def test_traverse_folder_to_document(self):
        """Test traverse to a document from a container.
        """
        parent = self.api.traverse('soap')
        self.assertTrue(verifyObject(ICMISFolder, parent))

        content = self.api.traverse('specs.txt', parent)
        self.assertTrue(verifyObject(ICMISDocument, content))
        self.assertEqual(aq_parent(content), parent)
        self.assertEqual(content.getId(), 'specs.txt')
        self.assertEqual(
            content.getPhysicalPath(),
            (    '', 'plone', 'browser', 'soap', 'specs.txt'))
        self.assertEqual(
            content.absolute_url(),
            'http://nohost/plone/browser/soap/specs.txt')
        self.assertEqual(
            content.Identifier(),
            'http://nohost/plone/browser/soap/specs.txt')
        self.assertEqual(content.Type(), 'CMIS Document')
        self.assertEqual(content.Format(), 'text/plain')

    def test_traverse_folder_to_folder(self):
        """Test traverse to a container from a container.
        """
        parent = self.api.traverse('soap')
        self.assertTrue(verifyObject(ICMISFolder, parent))

        folder = self.api.traverse('info', parent)
        self.assertTrue(verifyObject(ICMISFolder, folder))
        self.assertEqual(aq_parent(folder), parent)
        self.assertEqual(folder.getId(), 'info')
        self.assertEqual(
            folder.getPhysicalPath(),
            ('', 'plone', 'browser', 'soap', 'info'))
        self.assertEqual(
            folder.absolute_url(),
            'http://nohost/plone/browser/soap/info')
        self.assertEqual(
            folder.Identifier(),
            'http://nohost/plone/browser/soap/info')
        self.assertEqual(folder.Type(), 'CMIS Folder')
        self.assertEqual(folder.Format(), 'text/html')

        # A Folder can list its own content
        contents = folder.getFolderContents()
        self.assertEqual(len(contents), 1)
        contents = sorted(contents, key=lambda c: c.getId())
        self.assertEqual(
            map(lambda c: c.getId(), contents),
            ['index.html'])
        self.assertEqual(
            map(lambda c: c.Type(), contents),
            ['CMIS Document'])
        self.assertEqual(
            map(lambda c: c.Format(), contents),
            ['text/html'])
        self.assertEqual(
            map(lambda c: c.absolute_url(), contents),
            ['http://nohost/plone/browser/soap/info/index.html'])

    def test_search_score_support(self):
        """Test search feature, with score feature on, quoting off.
        NOT EVERY CMIS REPOSITORY SUPPORTS IT.
        """
        results = self.api.search('soap')
        results = sorted(results, key=lambda c: c.getId())
        self.assertTrue(isinstance(results, list))
        self.assertEqual(len(results), 3)
        self.assertEqual(
            map(lambda c: c.getId(), results),
            ['documentation.txt', 'index.html', 'specs.txt', ])
        self.assertEqual(
            map(lambda c: c.Type(), results),
            ['CMIS Document', 'CMIS Document', 'CMIS Document'])
        self.assertEqual(
            map(lambda c: c.absolute_url(), results),
            ['http://nohost/plone/browser/documentation.txt',
             'http://nohost/plone/browser/soap/info/index.html',
             'http://nohost/plone/browser/soap/specs.txt'])

    def test_search_no_score_support(self):
        """Test search feature with score feature off.
        """
        results = self.api.search('soap', scorable=False)
        results = sorted(results, key=lambda c: c.getId())
        self.assertTrue(isinstance(results, list))
        self.assertEqual(len(results), 3)
        self.assertEqual(
            map(lambda c: c.getId(), results),
            ['documentation.txt', 'index.html', 'specs.txt', ])
        self.assertEqual(
            map(lambda c: c.Type(), results),
            ['CMIS Document', 'CMIS Document', 'CMIS Document'])
        self.assertEqual(
            map(lambda c: c.absolute_url(), results),
            ['http://nohost/plone/browser/documentation.txt',
             'http://nohost/plone/browser/soap/info/index.html',
             'http://nohost/plone/browser/soap/specs.txt'])

    def test_search_unicode_quotable_support(self):
        """Test search feature with an unicode entry.
        """
        results = self.api.search(u"Étonnant", quotable=True)
        self.assertTrue(isinstance(results, list))
        self.assertEqual(len(results), 1)
        self.assertEqual(
            map(lambda c: c.getId(), results),
            ['documentation.txt'])
        self.assertEqual(
            map(lambda c: c.Type(), results),
            ['CMIS Document'])
        self.assertEqual(
            map(lambda c: c.absolute_url(), results),
            ['http://nohost/plone/browser/documentation.txt'])

    def test_search_unicode_support(self):
        """Test search feature with an unicode entry.
        """
        results = self.api.search(u"Étonnant")
        self.assertTrue(isinstance(results, list))
        self.assertEqual(len(results), 1)
        self.assertEqual(
            map(lambda c: c.getId(), results),
            ['documentation.txt'])
        self.assertEqual(
            map(lambda c: c.Type(), results),
            ['CMIS Document'])
        self.assertEqual(
            map(lambda c: c.absolute_url(), results),
            ['http://nohost/plone/browser/documentation.txt'])

    def test_search_escape_quotable_support(self):
        """Test search feature with an entry that have an ', and
        quoting. NOT ALL CMIS REPOSITORY SUPPORTS IT.
        """
        results = self.api.search(r"specification's", quotable=True)
        self.assertTrue(isinstance(results, list))
        self.assertEqual(len(results), 2)
        self.assertEqual(
            map(lambda c: c.getId(), results),
            ['specs.txt', 'specs.txt'])
        self.assertEqual(
            map(lambda c: c.Type(), results),
            ['CMIS Document', 'CMIS Document'])
        self.assertEqual(
            map(lambda c: c.absolute_url(), results),
            ['http://nohost/plone/browser/soap/specs.txt',
             'http://nohost/plone/browser/rest/specs.txt'])

    def test_search_escape_hacker_quotable_support(self):
        """Test search feature with an entry that have an \', quoting
        on.
        """
        results = self.api.search(r"specification\'s", quotable=True)
        self.assertTrue(isinstance(results, list))
        self.assertEqual(len(results), 2)
        self.assertEqual(
            map(lambda c: c.getId(), results),
            ['specs.txt', 'specs.txt'])
        self.assertEqual(
            map(lambda c: c.Type(), results),
            ['CMIS Document', 'CMIS Document'])
        self.assertEqual(
            map(lambda c: c.absolute_url(), results),
            ['http://nohost/plone/browser/soap/specs.txt',
             'http://nohost/plone/browser/rest/specs.txt'])

    def test_search_escape_no_quotable_support(self):
        """Test search feature with an entry that have an ', and
        quoting. NOT ALL CMIS REPOSITORY SUPPORTS IT.
        """
        results = self.api.search(r"specification's")
        self.assertTrue(isinstance(results, list))
        self.assertEqual(len(results), 0)

    def test_search_escape_hacker_no_quotable_support(self):
        """Test search feature with an entry that have an \', quoting
        on.
        """
        results = self.api.search(r"specification\'s")
        self.assertTrue(isinstance(results, list))
        self.assertEqual(len(results), 0)