def test_05_checksum_conversion(self):
     """
   Test Conversion Cache return expected value with checksum
 """
     filename = 'TEST-en-002.doc'
     file_ = makeFileUpload(filename)
     document = self.portal.portal_contributions.newContent(file=file_)
     self.tic()
     document_url = document.getRelativeUrl()
     document = self.portal.restrictedTraverse(document_url)
     kw = {'format': 'html'}
     #Generate one conversion
     document.convert(**kw)
     cache_id = document._getCacheKey(**kw)
     cache_factory = document._getCacheFactory()
     data_dict = cache_factory.get(cache_id)
     #get data from cache
     self.assertTrue(data_dict['content_md5'])
     self.assertTrue(data_dict['conversion_md5'])
     self.assertTrue(data_dict['mime'])
     self.assertTrue(data_dict['data'])
     self.assertTrue(data_dict['date'])
     self.assertTrue(data_dict['size'])
     #Change md5 manualy
     data_dict['content_md5'] = 'Anything which is not md5'
     cache_factory.set(cache_id, data_dict)
     self.commit()
     self.assertRaises(KeyError, document.getConversion, format='html')
  def test_Base_isConvertible(self):
    """
      Test pre converion only happens on proper documents.
    """
    image = self.portal.image_module.newContent(portal_type='Image',
                                               reference='Embedded-XXX',
                                               version='001',
                                               language='en')

    # draft image is not convertible
    upload_file = makeFileUpload('cmyk_sample.jpg')
    image.edit(file=upload_file)
    self.tic()
    self.assertEqual(False, image.Base_isConvertible())

    # published image with data is convertible
    image.publish()
    self.tic()
    self.assertEqual(True, image.Base_isConvertible())

    image = self.portal.image_module.newContent(portal_type='Image',
                                               reference='Embedded-YYY',
                                               version='001',
                                               language='en')
    image.publish()
    self.tic()

    # published empty image is not convertible
    self.assertEqual(False, image.Base_isConvertible())
  def test_preConvertedReferencedImageInWebPageContent(self):
    # create an image
    upload_file = makeFileUpload('cmyk_sample.jpg')
    image = self.portal.image_module.newContent(portal_type='Image',
                                               reference='Embedded-XXX',
                                               version='001',
                                               language='en')
    image.edit(file=upload_file)
    image.publish()
    self.tic()

    # after a web page creation, the referenced images are found and should be pre converted
    # with the parameters given in their src URL
    web_page = self.portal.web_page_module.newContent(portal_type="Web Page")
    web_page.setTextContent('''<b> test </b>
<img src="Embedded-XXX?format=png&display=large&quality=64"/>
<img src="Embedded-XXX?format=jpeg&display=large&quality=64"/>''')
    web_page.publish()
    self.tic()

    # check that referenced in Web Page's content image(s) is well converted
    self.assertTrue(image.hasConversion(**{'format':'jpeg', 'display':'large', 'quality':64}))
    self.assertTrue(image.hasConversion(**{'format':'png', 'display':'large', 'quality':64}))
    self.assertSameSet(['Embedded-XXX?format=png&display=large&quality=64', \
                        'Embedded-XXX?format=jpeg&display=large&quality=64'],
                        web_page.Base_extractImageUrlList())
示例#4
0
 def test_erp5_merge_pdf(self):
     document = self.portal.portal_contributions.newContent(
         file=makeFileUpload('REF-en-001.pdf'))
     merged_pdf_data = self.portal.ERP5Site_mergePDFList(
         [document.getData(), document.getData()])
     merged_document = self.portal.document_module.newContent(
         portal_type='PDF', data=merged_pdf_data)
     self.assertEqual('2', merged_document.getContentInformation()['Pages'])
 def test_06_check_md5_is_updated(self):
     """
 Check that md5 checksum is well updated when upload a file
 """
     filename = 'TEST-en-002.doc'
     file_ = makeFileUpload(filename)
     document = self.portal.portal_contributions.newContent(file=file_)
     self.tic()
     document_url = document.getRelativeUrl()
     document = self.portal.restrictedTraverse(document_url)
     md5sum = document.getContentMd5()
     self.assertTrue(md5sum)
     filename2 = 'TEST-en-002.odt'
     file2 = makeFileUpload(filename2)
     document.edit(file=file2)
     self.assertNotEqual(md5sum, document.getContentMd5())
     self.tic()
示例#6
0
 def test_erp5_merge_pdf_start_on_recto(self):
     document = self.portal.portal_contributions.newContent(
         file=makeFileUpload('REF-en-001.pdf'))
     merged_pdf_data = self.portal.ERP5Site_mergePDFList(
         [document.getData(), document.getData()], start_on_recto=True)
     merged_document = self.portal.document_module.newContent(
         portal_type='PDF', data=merged_pdf_data)
     # there are four pages, because blank pages has been added so that the
     # second time, our document starts on a recto page.
     self.assertEqual('4', merged_document.getContentInformation()['Pages'])
 def test_03_CacheConversionOfTempObjectIsNotMixed(self):
     filename1 = 'TEST-en-002.doc'
     filename2 = 'TEST-en-002.odt'
     file1 = makeFileUpload(filename1)
     file2 = makeFileUpload(filename2)
     document1 = self.portal.portal_contributions.newContent(file=file1,
                                                             temp_object=1)
     document1.uploadFile()
     document1.processFile()
     document1.convertToBaseFormat()
     document2 = self.portal.portal_contributions.newContent(file=file2,
                                                             temp_object=1)
     document2.uploadFile()
     document2.processFile()
     document2.convertToBaseFormat()
     format_ = 'pdf'
     document1.convert(format=format_)
     document2.convert(format=format_)
     self.assertNotEqual(document1.getConversion(format=format_),
                         document2.getConversion(format=format_))
     self.tic()
示例#8
0
    def test_01_no_retry_for_no_network_issue(self):
        system_pref = self.getDefaultSystemPreference()
        system_pref.setPreferredDocumentConversionServerRetry(self.retry_count)
        self.tic()

        filename = 'monochrome_sample.tiff'
        file_ = makeFileUpload(filename)
        document = self.portal.document_module.newContent(portal_type='Text')
        document.edit(file=file_)
        message = document.Document_tryToConvertToBaseFormat()
        self.assertEqual(
            message.count('Error converting document to base format'), 1)
示例#9
0
    def test_03_retry_for_socket_issue(self):
        system_pref = self.getDefaultSystemPreference()
        server_list = system_pref.getPreferredDocumentConversionServerUrlList()
        system_pref.setPreferredDocumentConversionServerRetry(self.retry_count)
        system_pref.setPreferredOoodocServerTimeout(1)
        self.tic()
        filename = 'TEST-en-002.doc'
        file_ = makeFileUpload(filename)
        document = self.portal.portal_contributions.newContent(file=file_)

        message = document.Document_tryToConvertToBaseFormat()
        if 'Socket Error: SSLError' in message:
            self.assertEqual(message.count('Socket Error: SSLError'),
                             (self.retry_count + 1) * len(server_list))
示例#10
0
 def test_showwarning_issue(self):
     """
 We should not let PdfFileReader overwrite warnings.showwarning method because we already do it in ERP5
 https://github.com/mstamy2/PyPDF2/blob/18a2627adac13124d4122c8b92aaa863ccfb8c29/PyPDF2/pdf.py#L1129
 """
     self.assertEquals(Utils._showwarning, warnings.showwarning)
     document = self.portal.portal_contributions.newContent(
         file=makeFileUpload('REF-en-001.pdf'))
     merged_pdf_data = self.portal.ERP5Site_mergePDFList(
         [document.getData(), document.getData()])
     self.portal.document_module.newContent(portal_type='PDF',
                                            data=merged_pdf_data)
     self.tic()
     self.assertEquals(Utils._showwarning, warnings.showwarning)
示例#11
0
  def test_Zuite_uploadScreenShot(self):
    """
      Test Screeshot upload script used by Zelenium to
      update screenshots of the documents.
    """
    image_upload = makeFileUpload('TEST-en-002.png')
    self.assertNotEquals(None, image_upload)

    # Create a web page, and check if the content is not overwriten
    web_page_reference = "WEB-PAGE-REFERENCE"
    web_page = self.portal.web_page_module.newContent(
                                     reference=web_page_reference,
                                     language="en", version="001")
    web_page.publishAlive()
    self.tic()

    image_reference = "IMAGE-REFERENCE-%s" % str(time())
    image_page = self.portal.image_module.newContent(
                                   reference=image_reference,
                                   language="en", version="001")
    image_page.publishAlive()
    self.tic()
    image_page_2 = self.portal.image_module.newContent(
                                   reference=image_reference,
                                   language="en", version="002")
    image_page_2.publishAlive()
    self.tic()

    self.portal.REQUEST.form['data_uri'] = image_upload
    fake_image_reference = "DO-NOT-EXISTANT-IMAGE"
    self.assertNotEquals(None,
                   self.portal.Zuite_uploadScreenshot(image_upload, fake_image_reference))

    self.assertNotEquals(None,
                   self.portal.Zuite_uploadScreenshot(image_upload, web_page_reference))

    self.assertEqual(None,
                   self.portal.Zuite_uploadScreenshot(image_upload, image_reference))

    self.tic()
    # The right image were updated.
    image_upload.seek(0)
    self.assertEqual(image_page_2.getData(), image_upload.read().decode("base64"))
    self.assertEqual(image_page_2.getFilename(), image_reference + '.png')
    self.assertEqual(image_page.getData(), '')
示例#12
0
    def test_02_retry_for_network_issue(self):
        system_pref = self.getDefaultSystemPreference()
        saved_server_list = system_pref.getPreferredDocumentConversionServerUrlList(
        )
        system_pref.setPreferredDocumentConversionServerRetry(self.retry_count)
        system_pref.setPreferredDocumentConversionServerUrlList(
            ['https://broken.url'])
        self.tic()
        filename = 'TEST-en-002.doc'
        file_ = makeFileUpload(filename)
        document = self.portal.portal_contributions.newContent(file=file_)

        message = document.Document_tryToConvertToBaseFormat()
        self.assertEqual(message.count('broken.url: Connection refused'),
                         self.retry_count + 1)
        system_pref.setPreferredDocumentConversionServerUrlList(
            saved_server_list)
        self.commit()
 def test_01_PersistentCacheConversion(self):
     """
   Test Conversion Cache mechanism
 """
     filename = 'TEST-en-002.doc'
     file_ = makeFileUpload(filename)
     document = self.portal.portal_contributions.newContent(file=file_)
     self.tic()
     document_url = document.getRelativeUrl()
     document = self.portal.restrictedTraverse(document_url)
     format_list = [
         format_ for format_ in document.getTargetFormatList()
         if format_ not in self.failed_format_list
     ]
     if not format_list:
         self.fail('Target format list is empty')
     #Test Conversion Cache
     for format_ in format_list:
         document.convert(format=format_)
         self.commit()
         self.assertTrue(document.hasConversion(format=format_),
                         'Cache Storage failed for %s' % (format_))
         self.assertEqual(DateTime().Date(),
                          document.getConversionDate(format=format_).Date())
         self.assertTrue(document.getConversionMd5(format=format_))
         self.assertTrue(document.getConversionSize(format=format_))
     document.edit(title='Foo')
     self.commit()
     #Test Cache is cleared
     for format_ in format_list:
         self.assertFalse(document.hasConversion(format=format_),
                          'Cache Storage failed for %s' % (format_))
         self.assertRaises(KeyError,
                           document.getConversionSize,
                           format=format_)
     document.edit(title='Bar')
     self.tic()
     #Test Conversion Cache after editing
     for format_ in format_list:
         document.convert(format=format_)
         self.commit()
         self.assertTrue(document.hasConversion(format=format_),
                         'Cache Storage failed for %s' % (format_))
         self.assertTrue(document.getConversionSize(format=format_))
示例#14
0
    def test_AttachmentIngestion(self):
        """
    Test the attachment of a CSV file, from both newDiscussionPost and newDiscussionThread
    use cases.
    CSV wasn't chosen randomly, as it may be subjected to a portal type migration through
    discover metadata, which used to cause a bug.
    """
        discussion_thread_id_set = set(
            self.portal.discussion_thread_module.objectIds())

        web_site_value = self.portal.web_site_module.newContent(
            portal_type='Web Site')
        web_section_value = web_site_value.newContent(
            portal_type='Web Section')
        file_ = makeFileUpload('simple.csv')
        web_section_value.WebSection_createNewDiscussionThread("Thread Title",
                                                               "Post Content",
                                                               file=file_)
        self.tic()
        thread_value, = [
            x for x in self.portal.discussion_thread_module.objectValues()
            if x.getId() not in discussion_thread_id_set
        ]

        post_value, = thread_value.objectValues(portal_type='Discussion Post')
        tested_post_value_set = {
            post_value,
        }
        attachment_list = post_value.DiscussionPost_getAttachmentList()
        self.assertEqual(1, len(attachment_list))

        thread_value.DiscussionThread_createNewDiscussionPost(
            title="Post Title",
            text_content="Post Content",
            file=file_,
        )
        self.tic()
        post_value, = [
            x for x in thread_value.objectValues()
            if x not in tested_post_value_set
        ]
        attachment_list = post_value.DiscussionPost_getAttachmentList()
        self.assertEqual(1, len(attachment_list))
 def test_02_VolatileCacheConversionOfTempObject(self):
     filename = 'TEST-en-002.doc'
     file_ = makeFileUpload(filename)
     document = self.portal.portal_contributions.newContent(file=file_,
                                                            temp_object=1)
     document.uploadFile()
     document.processFile()
     document.convertToBaseFormat()
     format_list = [
         format_ for format_ in document.getTargetFormatList()
         if format_ not in self.failed_format_list
     ]
     if not format_list:
         self.fail('Target format list is empty')
     #Test Conversion Cache
     for format_ in format_list:
         document.convert(format=format_)
         self.commit()
         self.assertTrue(document.hasConversion(format=format_),
                         'Cache Storage failed for %s' % (format_))
         self.assertEqual(DateTime().Date(),
                          document.getConversionDate(format=format_).Date())
         self.assertTrue(document.getConversionMd5(format=format_))
         self.assertTrue(document.getConversionSize(format=format_))
     document.edit(title='Foo')
     self.commit()
     #Test Cache is cleared
     for format_ in format_list:
         self.assertFalse(document.hasConversion(format=format_),
                          'Cache Storage failed for %s' % (format_))
         self.assertRaises(KeyError,
                           document.getConversionSize,
                           format=format_)
     document.edit(title='Bar')
     self.tic()
     #Test Conversion Cache after editing
     for format_ in format_list:
         document.convert(format=format_)
         self.commit()
         self.assertTrue(document.hasConversion(format=format_),
                         'Cache Storage failed for %s' % (format_))
         self.assertTrue(document.getConversionSize(format=format_))
 def test_04_PersistentCacheConversionWithFlare(self):
     default_pref = self.portal.portal_preferences.default_site_preference
     default_pref.setPreferredConversionCacheFactory('dms_cache_factory')
     #old preferred value is still cached
     self.portal.portal_caches.clearAllCache()
     self.tic()
     filename = 'TEST-en-002.doc'
     file_ = makeFileUpload(filename)
     document = self.portal.portal_contributions.newContent(file=file_)
     self.tic()
     document_url = document.getRelativeUrl()
     document = self.portal.restrictedTraverse(document_url)
     format_list = [format_ for format_ in document.getTargetFormatList()\
                                       if format_ not in self.failed_format_list]
     if not format_list:
         self.fail('Target format list is empty')
     #Test Conversion Cache
     for format_ in format_list:
         document.convert(format=format_)
         self.assertTrue(document.hasConversion(format=format_),
                         'Cache Storage failed for %s' % (format_))
         self.assertTrue(document.getConversionSize(format=format_))
     document.edit(title='Foo')
     self.commit()
     #Test Cache is cleared
     for format_ in format_list:
         self.assertFalse(document.hasConversion(format=format_),
                          'Cache Storage failed for %s' % (format_))
         self.assertRaises(KeyError,
                           document.getConversionSize,
                           format=format_)
     document.edit(title='Bar')
     self.tic()
     #Test Conversion Cache after editing
     for format_ in format_list:
         document.convert(format=format_)
         self.assertTrue(document.hasConversion(format=format_),
                         'Cache Storage failed for %s' % (format_))
         self.assertTrue(document.getConversionSize(format=format_))
    def test_image_conversion(self):
        filename = 'TEST-en-002.doc'
        file_ = makeFileUpload(filename)
        document = self.portal.portal_contributions.newContent(file=file_)
        self.tic()
        format_ = 'png'

        self.assertFalse(document.hasConversion(format=format_))
        document.convert(format_)
        self.assertTrue(document.hasConversion(format=format_))

        self.assertFalse(
            document.hasConversion(format=format_, display='large'))
        document.convert(format_, display='large')
        self.assertTrue(document.hasConversion(format=format_,
                                               display='large'))

        self.assertFalse(
            document.hasConversion(format=format_, display='large',
                                   quality=40))
        document.convert(format_, display='large', quality=40)
        self.assertTrue(
            document.hasConversion(format=format_, display='large',
                                   quality=40))
        if magic is not None:
            mime_detector = magic.Magic(mime=True)
            self.assertEqual(
                mime_detector.from_buffer(
                    document.getConversion(format=format_)[1]), 'image/png')
            self.assertEqual(
                mime_detector.from_buffer(
                    document.getConversion(format=format_,
                                           display='large')[1]), 'image/png')
            self.assertEqual(
                mime_detector.from_buffer(
                    document.getConversion(format=format_,
                                           display='large',
                                           quality=40)[1]), 'image/png')
    def test_08_check_conversion_cache_with_portal_document_type_list(self):
        """Check cache conversion for all Portal Document Types
    """
        portal_type_list = list(self.portal.getPortalDocumentTypeList())

        if 'File' in portal_type_list:
            #File conversion is not implemented
            portal_type_list.remove('File')
        if 'Web Illustration' in portal_type_list:
            #Web Illustration conversion is not implemented
            portal_type_list.remove('Web Illustration')
        if 'Web Table' in portal_type_list:
            #Web Table conversion is not implemented
            portal_type_list.remove('Web Table')
        data_mapping = {
            'Drawing': 'TEST-en-002.sxd',
            'Text': 'TEST-en-002.doc',
            'Spreadsheet': 'TEST-en-002.sxc',
            'Presentation': 'TEST-en-002.sxi',
            'Web Page': 'TEST-en-002.html',
            'Image': 'TEST-en-002.gif',
            'File': 'TEST-en-002.rtf',
            'PDF': 'TEST-en-002.pdf'
        }
        #Check that all portal_types are handled by test
        self.assertEqual(
            len(portal_type_list),
            len([pt for pt in portal_type_list if pt in data_mapping]))
        for portal_type in portal_type_list:
            module = self.portal.getDefaultModule(portal_type=portal_type)
            upload_file = makeFileUpload(data_mapping[portal_type])
            document = module.newContent(portal_type=portal_type)
            document.edit(file=upload_file)
            self.tic()
            document.convert(format='txt')
            document.convert(format='html')
            self.assertTrue(document.getConversion(format='txt'))
            self.assertTrue(document.getConversion(format='html'))
 def test_07_check_cache_key_is_escaped(self):
     """
 Check that key (based on path of document) support unauthorised chars
 """
     default_pref = self.portal.portal_preferences.default_site_preference
     default_pref.setPreferredConversionCacheFactory('dms_cache_factory')
     #old preferred value is still cached
     self.portal.portal_caches.clearAllCache()
     self.tic()
     filename = 'TEST-en-002.doc'
     file_ = makeFileUpload(filename)
     document_id = 'an id with spaces'
     portal_type = 'Text'
     module = self.portal.getDefaultModule(portal_type)
     document = module.newContent(id=document_id,
                                  file=file_,
                                  portal_type=portal_type)
     self.tic()
     document_url = document.getRelativeUrl()
     document = self.portal.restrictedTraverse(document_url)
     self.assertEqual(document.getId(), document_id)
     document.convert(format='txt')
     self.assertTrue(document.getConversion(format='txt'))
示例#20
0
    def test_03_createDiscussionThread(self):
        """
      Create a disucssion thread
    """
        portal = self.portal
        discussion_thread_id_set = set(
            portal.discussion_thread_module.objectIds())

        # create web sections & set predicates
        group1 = portal.portal_categories.group.newContent(
            portal_type='Category', title='Group 1')
        web_site = portal.web_site_module.newContent(portal_type='Web Site')
        web_section1 = web_site.newContent(portal_type='Web Section')
        web_section1.setMultimembershipCriterionBaseCategoryList(['group'])
        web_section1.setMembershipCriterionCategoryList(
            [group1.getRelativeUrl()])
        self.tic()

        web_section1.WebSection_createNewDiscussionThread(
            'test1-new', 'test1 body')
        discussion_thread, = [x for x in self.portal.discussion_thread_module.objectValues() \
                              if x.getId() not in discussion_thread_id_set]
        discussion_thread_id_set.add(discussion_thread.getId())
        self.assertTrue(
            discussion_thread.getReference().startswith("test1-new-"))
        # not indexed yet
        self.assertSameSet([],
                           web_section1.WebSection_getDiscussionThreadList())

        # not indexed but its relative url is passed through REQUEST
        self.app.REQUEST.set('thread_relative_url',
                             discussion_thread.getRelativeUrl())
        self.assertSameSet([discussion_thread],
                           web_section1.WebSection_getDiscussionThreadList())

        self.tic()
        # indexed already
        self.assertSameSet([discussion_thread],
                           web_section1.WebSection_getDiscussionThreadList())
        discussion_post = discussion_thread.contentValues(
            filter={'portal_type': 'Discussion Post'})[0]
        attachment_list = discussion_post.DiscussionPost_getAttachmentList()
        self.assertEqual(discussion_thread.getValidationState(), 'published')
        self.assertEqual(0, len(attachment_list))

        # check attachment creation
        file_ = makeFileUpload('TEST-en-002.doc')
        web_section1.WebSection_createNewDiscussionThread(
            'test1-new-with-attachment', 'test1 body', file=file_)
        discussion_thread, = [x for x in self.portal.discussion_thread_module.objectValues() \
                              if x.getId() not in discussion_thread_id_set]
        discussion_thread_id_set.add(discussion_thread.getId())
        self.assertTrue(discussion_thread.getReference().startswith(
            "test1-new-with-attachment-"))
        self.tic()

        discussion_post = discussion_thread.contentValues(
            filter={'portal_type': 'Discussion Post'})[0]
        attachment_list = discussion_post.DiscussionPost_getAttachmentList()
        self.assertEqual(discussion_thread.getValidationState(), 'published')
        self.assertEqual(1, len(attachment_list))