[Erp5-report] r13242 - /erp5/trunk/products/ERP5OOo/tests/testIngestion.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Mar 6 18:50:59 CET 2007


Author: bartek
Date: Tue Mar  6 18:50:56 2007
New Revision: 13242

URL: http://svn.erp5.org?rev=13242&view=rev
Log:
added further tests; some tidying up;

Modified:
    erp5/trunk/products/ERP5OOo/tests/testIngestion.py

Modified: erp5/trunk/products/ERP5OOo/tests/testIngestion.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/tests/testIngestion.py?rev=13242&r1=13241&r2=13242&view=diff
==============================================================================
--- erp5/trunk/products/ERP5OOo/tests/testIngestion.py (original)
+++ erp5/trunk/products/ERP5OOo/tests/testIngestion.py Tue Mar  6 18:50:56 2007
@@ -246,7 +246,7 @@
       it has id as given and reference like document_[id]
       immediately catalogged and verified in two ways
     """
-    dm = self.portal.document_module
+    dm = self.portal.getDefaultModule(portal_type)
     doc = getattr(dm, id, None)
     if doc is not None:
       dm.manage_delObjects([id,])
@@ -257,6 +257,77 @@
     self.checkObjectCatalogged(portal_type, reference)
     self.assert_(hasattr(dm, id))
 
+  def ingestFormats(self, doc_id, formats_from, portal_type=None):
+    """
+      method for bulk ingesting files of various formats
+      we take them one by one based on naming convention
+      ingest, convert
+      check that a magic word is in every of them
+      (unless it is Image or File)
+    """
+    if portal_type is None:
+      dm = self.portal.document_module
+    else:
+      dm = self.portal.getDefaultModule(portal_type)
+    context = getattr(dm, doc_id)
+    for rev, format in enumerate(formats_from):
+      filename = 'TEST-en-002.' + format
+      f = makeFileUpload(filename)
+      context.edit(file=f)
+      context.convertToBase()
+      context.reindexObject(); get_transaction().commit(); self.tic()
+      self.failUnless(context.hasFile())
+      if context.getPortalType() in ('Image', 'File'): # these are not subject to conversion
+        self.assertEquals(context.getExternalProcessingState(), 'uploaded')
+      else:
+        self.assertEquals(context.getExternalProcessingState(), 'converted') # this is how we know if it was ok or not
+        self.assert_('magic' in context.SearchableText())
+
+  def checkDocumentExportList(self, doc_id, format, targets):
+    """
+      given the docs id
+      make sure targets are in
+      the objects target format list
+    """
+    dm = self.portal.document_module
+    context = getattr(dm, doc_id)
+    filename = 'TEST-en-002.' + format
+    f = makeFileUpload(filename)
+    context.edit(file=f)
+    context.convertToBase()
+    context.reindexObject(); get_transaction().commit(); self.tic()
+    clearCache()
+    target_list = [x[1] for x in context.getTargetFormatItemList()]
+    for target in targets:
+      self.assert_(target in target_list)
+
+  def contributeFiles(self, with_portal_type=False):
+    ext2type = (
+      ('ppt' , 'Presentation')
+      ,('doc' , 'Text')
+      ,('sdc' , 'Spreadsheet')
+      ,('sxc' , 'Drawing')
+      ,('pdf' , 'PDF')
+      ,('jpg' , 'Image')
+      ,('py'  , 'File')
+      )
+    for ext, typ in ext2type:
+      shout(ext)
+      filename = 'TEST-en-002.' + ext
+      file = makeFileUpload(filename)
+      if with_portal_type:
+        ob = self.portal.portal_contributions.newContent(portal_type=typ, file=file)
+      else:
+        ob = self.portal.portal_contributions.newContent(file=file)
+      self.assertEquals(ob.getPortalType(), typ)
+      self.assertEquals(ob.getReference(), 'TEST')
+      ob.reindexObject(); get_transaction().commit(); self.tic()
+      if ob.getPortalType() in ('Image', 'File'): # these are not subject to conversion
+        self.assertEquals(ob.getExternalProcessingState(), 'uploaded')
+      else:
+        self.assertEquals(ob.getExternalProcessingState(), 'converted') # this is how we know if it was ok or not
+        self.assert_('magic' in ob.SearchableText())
+    
 
   ##################################
   ##  Basic steps
@@ -301,18 +372,19 @@
 
   def stepCreatePerson(self, sequence=None, sequence_list=None, **kw):
     """
-      Create a person.
+      Create a person (if not exists).
     """
     portal_type = 'Person'
+    id = 'john'
     reference = 'john_doe'
-    person_module = self.portal.getDefaultModule(portal_type)
-    person = person_module.newContent( portal_type=portal_type
-                                     , id='john'
+    person_module = self.portal.person_module
+    if getattr(person_module, 'john', False): return 
+    person = person_module.newContent( portal_type='Person'
+                                     , id=id
                                      ,  reference = reference
                                      )
     person.reindexObject(); get_transaction().commit(); self.tic()
 
-
   def stepCreateTextDocument(self, sequence=None, sequence_list=None, **kw):
     """
       create an empty Text document 'one'
@@ -344,6 +416,22 @@
       (first delete if exists)
     """
     self.createDocument('Drawing', 'four')
+
+  def stepCreatePDFDocument(self, sequence=None, sequence_list=None, **kw):
+    """
+      create an empty PDF document 'five'
+      for further testing
+      (first delete if exists)
+    """
+    self.createDocument('PDF', 'five')
+
+  def stepCreateImageDocument(self, sequence=None, sequence_list=None, **kw):
+    """
+      create an empty Image document 'six'
+      for further testing
+      (first delete if exists)
+    """
+    self.createDocument('Image', 'six')
 
   def stepCheckEmptyState(self, sequence=None, sequence_list=None, **kw):
     """
@@ -494,23 +582,6 @@
     description = xmlob.getElementsByTagName('dc:description')[0].childNodes[0].data
     self.assertEquals(description, u'another description')
     
-  def ingestFormats(self, doc_id, formats_from):
-    """
-      method for bulk ingesting files of various formats
-      we take them one by one based on naming convention
-      ingest, convert
-      check that a magic word is in every of them
-    """
-    dm = self.portal.document_module
-    context = getattr(dm, doc_id)
-    for rev, format in enumerate(formats_from):
-      filename = 'TEST-en-002.' + format
-      f = makeFileUpload(filename)
-      context.edit(file=f)
-      context.convertToBase()
-      context.reindexObject(); get_transaction().commit(); self.tic()
-      self.assert_('magic' in context.SearchableText())
-
   def stepIngestTextFormats(self, sequence=None, sequence_list=None, **kw):
     """
       ingest all supported text formats
@@ -535,6 +606,14 @@
     formats_from = ['ppt', 'sxi', 'sdd']
     self.ingestFormats('three', formats_from)
 
+  def stepIngestPDFFormats(self, sequence=None, sequence_list=None, **kw):
+    """
+      ingest all supported PDF formats
+      make sure they are converted
+    """
+    formats_from = ['pdf']
+    self.ingestFormats('five', formats_from)
+
   def stepIngestDrawingFormats(self, sequence=None, sequence_list=None, **kw):
     """
       ingest all supported presentation formats
@@ -543,23 +622,20 @@
     formats_from = ['sxd', 'sda']
     self.ingestFormats('four', formats_from)
 
-  def checkDocumentExportList(self, doc_id, format, targets):
-    """
-      given the docs id
-      make sure targets are in
-      the objects target format list
-    """
-    dm = self.portal.document_module
-    context = getattr(dm, doc_id)
-    filename = 'TEST-en-002.' + format
-    f = makeFileUpload(filename)
-    context.edit(file=f)
-    context.convertToBase()
-    context.reindexObject(); get_transaction().commit(); self.tic()
-    clearCache()
-    target_list = [x[1] for x in context.getTargetFormatItemList()]
-    for target in targets:
-      self.assert_(target in target_list)
+  def stepIngestPDFFormats(self, sequence=None, sequence_list=None, **kw):
+    """
+      ingest all supported pdf formats
+      make sure they are converted
+    """
+    formats_from = ['pdf']
+    self.ingestFormats('five', formats_from)
+
+  def stepIngestImageFormats(self, sequence=None, sequence_list=None, **kw):
+    """
+      ingest all supported image formats
+    """
+    formats_from = ['jpg', 'gif', 'bmp', 'png']
+    self.ingestFormats('six', formats_from, 'Image')
 
   def stepCheckTextDocumentExportList(self, sequence=None, sequence_list=None, **kw):
     self.checkDocumentExportList('one', 'doc', ['pdf', 'doc', 'rtf', 'html-writer', 'txt'])
@@ -573,6 +649,12 @@
   def stepCheckDrawingDocumentExportList(self, sequence=None, sequence_list=None, **kw):
     self.checkDocumentExportList('four', 'sxd', ['jpg', 'draw.pdf', 'svg'])
 
+  def stepExportPDF(self, sequence=None, sequence_list=None, **kw):
+    shout('not yet implemented')
+
+  def stepExportImage(self, sequence=None, sequence_list=None, **kw):
+    shout('not yet implemented')
+
   def stepCheckHasSnapshot(self, sequence=None, sequence_list=None, **kw):
     dm = self.portal.document_module
     context = getattr(dm, 'one')
@@ -599,23 +681,29 @@
     context = getattr(dm, 'one')
     context.deleteSnapshot()
 
-  def stepContributeFiles(self, sequence=None, sequence_list=None, **kw):
-    ext2type = (
-      ('ppt' , 'Presentation')
-      ,('doc' , 'Text')
-      ,('sdc' , 'Spreadsheet')
-      ,('odg' , 'Drawing')
-      ,('pdf' , 'PDF')
-      ,('jpg' , 'Image')
-      ,('py'  , 'File')
-      )
-    for ext, typ in ext2type:
-      shout(ext)
-      filename = 'TEST-en-002.' + ext
-      file = makeFileUpload(filename)
-      ob = self.portal.portal_contributions.newContent(file=file)
-      self.assertEquals(ob.getPortalType(), typ)
-    
+  def stepContributeFilesWithType(self, sequence=None, sequence_list=None, **kw):
+    """
+      Contribute all kinds of files giving portal type explicitly
+      TODO: test situation whereby portal_type given explicitly is wrong
+    """
+    self.contributeFiles(with_portal_type=True)
+
+  def stepContributeFilesWithNoType(self, sequence=None, sequence_list=None, **kw):
+    """
+      Contribute all kinds of files
+      let the system figure out portal type by itself
+    """
+    self.contributeFiles(with_portal_type=False)
+
+  def stepReceiveEmailFromUnknown(self, sequence=None, sequence_list=None, **kw):
+    shout('not yet implemented')
+
+  def stepReceiveEmailFromJohn(self, sequence=None, sequence_list=None, **kw):
+    shout('not yet implemented')
+
+  def stepVerifyEmailedDocuments(self, sequence=None, sequence_list=None, **kw):
+    shout('not yet implemented')
+
 
   ##################################
   ##  Tests
@@ -713,12 +801,17 @@
       Ingest various formats (xls, doc, sxi, ppt etc)
       Verify that they are successfully converted
       - have ODF data and contain magic word in SearchableText
+      - or have text data and contain magic word in SearchableText
+        TODO:
+      - or were not moved in processing_status_workflow if the don't
+        implement _convertToBase (e.g. Image)
+      Verify that you can not upload file of the wrong format.
     """
     if testrun and 5 not in testrun:return
     if not run: return
     if not quiet: shout('test_05_FormatIngestion')
     sequence_list = SequenceList()
-    step_list = [ 'stepCreateTextDocument'
+    step_list = ['stepCreateTextDocument'
                  ,'stepIngestTextFormats'
                  ,'stepCreateSpreadsheetDocument'
                  ,'stepIngestSpreadsheetFormats'
@@ -726,6 +819,10 @@
                  ,'stepIngestPresentationFormats'
                  ,'stepCreateDrawingDocument'
                  ,'stepIngestDrawingFormats'
+                 ,'stepCreatePDFDocument'
+                 ,'stepIngestPDFFormats'
+                 ,'stepCreateImageDocument'
+                 ,'stepIngestImageFormats'
                 ]
     sequence_string = ' '.join(step_list)
     sequence_list.addSequenceString(sequence_string)
@@ -733,9 +830,10 @@
 
   def test_06_FormatGeneration(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
-      Test generationof files in all possible formats
+      T,est generationof files in all possible formats
       (do we need to test it here? it is tested
       in oood tests...)
+      XXX except PDF and Image which should be tested here
       - at least check if they have correct lists of available formats for export
     """
     if testrun and 6 not in testrun:return
@@ -750,6 +848,10 @@
                  ,'stepCheckPresentationDocumentExportList'
                  ,'stepCreateDrawingDocument'
                  ,'stepCheckDrawingDocumentExportList'
+                 ,'stepCreatePDFDocument'
+                 ,'stepExportPDF'
+                 ,'stepCreateImageDocument'
+                 ,'stepExportImage'
                 ]
     sequence_string = ' '.join(step_list)
     sequence_list.addSequenceString(sequence_string)
@@ -779,7 +881,6 @@
     sequence_list.addSequenceString(sequence_string)
     sequence_list.play(self, quiet=quiet)
 
-
   def test_08_Cache(self, quiet=QUIET, run=RUN_ALL_TEST):
     """
       I don't know how to verify how cache works - the only
@@ -797,11 +898,12 @@
         - the files were converted
         - metadata was read
     """
-    if testrun and 8 not in testrun:return
+    if testrun and 9 not in testrun:return
     if not run: return
     if not quiet: shout('test_09_Contribute')
     sequence_list = SequenceList()
-    step_list = [ 'stepContributeFiles'
+    step_list = ['stepContributeFilesWithNoType'
+                 ,'stepContributeFilesWithType'
                 ]
     sequence_string = ' '.join(step_list)
     sequence_list.addSequenceString(sequence_string)
@@ -813,6 +915,25 @@
       check that the right ones remained
       change preference order, check again
     """
+
+  def test_11_EmailIngestion(self, quiet=QUIET, run=RUN_ALL_TEST):
+    """
+      Simulate email piped to ERP5 by an MTA by uploading test email from file
+      Check that document objects are created and appropriate data are set
+      (owner, and anything discovered from user and mail body)
+    """
+    if testrun and 11 not in testrun:return
+    if not run: return
+    if not quiet: shout('test_09_Contribute')
+    sequence_list = SequenceList()
+    step_list = [ 'stepReceiveEmailFromUnknown'
+                 ,'stepCreatePerson'
+                 ,'stepReceiveEmailFromJohn'
+                 ,'stepVerifyEmailedDocuments'
+                ]
+    sequence_string = ' '.join(step_list)
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
 
 
 if __name__ == '__main__':




More information about the Erp5-report mailing list