[Erp5-report] r22724 - /erp5/trunk/products/ERP5/tests/testICal.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Jul 29 16:34:46 CEST 2008


Author: ivan
Date: Tue Jul 29 16:34:46 2008
New Revision: 22724

URL: http://svn.erp5.org?rev=22724&view=rev
Log:
Follow up test update and extend after changes in iCal style in r22722. 

Modified:
    erp5/trunk/products/ERP5/tests/testICal.py

Modified: erp5/trunk/products/ERP5/tests/testICal.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testICal.py?rev=22724&r1=22723&r2=22724&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testICal.py (original)
+++ erp5/trunk/products/ERP5/tests/testICal.py Tue Jul 29 16:34:46 2008
@@ -43,6 +43,7 @@
 
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from AccessControl.SecurityManagement import newSecurityManager
+from Products.ERP5Form.Form import ERP5Form
 
 try:
   from transaction import get as get_transaction
@@ -64,6 +65,8 @@
 
   def afterSetUp(self):
     self.portal = self.getPortal()
+    self.request=self.app.REQUEST
+    self.makeDataObjects()
 
   def login(self, quiet=0, run=run_all_test):
     uf = self.getPortal().acl_users
@@ -75,24 +78,22 @@
   def makeDataObjects(self, quiet=0, run=run_all_test):
     """
       Create some Pesons so that we have something to feed.
-      (we create only one because we'd have sorting problems)
     """
     if hasattr(self.portal.person_module, 'one'):
       self.portal.person_module.manage_delObjects(['one'])
     one = self.portal.person_module.newContent(id="one", title="One", description="Person One")
     get_transaction().commit()
-    one.reindexObject()
-    self.tic()
-
-  def getICalFeed(self, module):
-    """
-      Get and parse the feed.
+    self.tic()
+    
+  def parseICalFeed(self,  feed_string):
+    """
+      Parse the feed.
       We always have one object in feed (in this test), so we can
       safely use dict to check what is inside.
     """
-    feed_string = module.Folder_viewContentListAsICal()
     feed = feed_string.split('\n')
-    feed = [s.split(':') for s in feed if s] 
+    # split once, because link like 'URL:http://myhost...' can exist in feed_string
+    feed = [s.split(':',  1) for s in feed if s] 
     feed_dict = {}
     for line in feed:
       if line[0] == 'BEGIN' or line[0] == 'END':
@@ -101,98 +102,189 @@
         feed_dict[line[0]] = line[1]
     return feed_dict
 
+  def getICalFeed(self, module):
+    """
+      Get the feed using form rendered by ical_view pt
+    """
+    self.request.set('portal_skin', 'iCal');
+    self.portal.portal_skins.changeSkin('iCal');
+    
+    feed_string = module.Folder_viewContentListAsICal()
+    return self.parseICalFeed(feed_string)
+    
   def test_01_renderEvent(self, quiet=0, run=run_all_test):
     """
       Events (like phone call) are rendered as events (not surprisingly).
-      Here we check if the dates are rendered correctly.
-    """
+      Here we check if the dates, categories and other properties are rendered correctly.
+    """
+    if not run: return    
     module = self.portal.event_module
     event = module.newContent(id='one', title='Event One', portal_type='Phone Call')
     get_transaction().commit()
-    event.reindexObject()
-    self.tic()
+    self.tic()
+    
     feed_dict = self.getICalFeed(module)
     self.assertTrue('BEGIN:VCALENDAR' in feed_dict.keys())
     self.assertTrue('END:VCALENDAR' in feed_dict.keys())
-    # it has no start_date so it shouldn't show up at all
-    self.assertFalse('BEGIN:VEVENT' in feed_dict.keys())
-    # set start date - should be present with end date calculated
+    self.assertTrue('BEGIN:VEVENT' in feed_dict.keys())
+    self.assertTrue('END:VEVENT' in feed_dict.keys())
+    self.assertEquals(feed_dict['SUMMARY'], 'Event One')
+    # if not set start date, it must be same as creation date
+    # if not set end date, it must be same as start date
+    self.assertEquals(feed_dict['DTSTART'], event.getCreationDate().HTML4().replace('-','').replace(':',''))
+    self.assertEquals(feed_dict['DTEND'], event.getCreationDate().HTML4().replace('-','').replace(':',''))
+    self.assertEquals(feed_dict['CREATED'], event.getCreationDate().HTML4().replace('-','').replace(':',''))
+    self.assertEquals(feed_dict['LAST-MODIFIED'], event.getModificationDate().HTML4().replace('-','').replace(':',''))
+    self.assertEquals(feed_dict['URL'],  event.absolute_url() + '/view')
+    self.assertEquals(feed_dict['UID'], 'uuid%s' % event.getUid())
+    # there is no description
+    self.assertFalse('DESCRIPTION' in feed_dict.keys())
+    # current workflow state - draft
+    self.assertEquals(feed_dict['STATUS'], 'TENTATIVE')
+    
+    # set start date, description and change workflow state - new
+    event.receive()
     event.setStartDate('2007/08/15 10:30')
-    event.reindexObject()
-    self.tic()
-    feed_dict = self.getICalFeed(module)
-    self.assertTrue('BEGIN:VEVENT' in feed_dict.keys())
-    self.assertEquals(feed_dict['SUMMARY'], 'Event One')
+    event.setDescription('Event One description')
+    get_transaction().commit()
+    self.tic()
+    
+    feed_dict = self.getICalFeed(module)
     self.assertEquals( # if this fail for you, try to set $TZ to Europe/Paris
         feed_dict['DTSTART'], '20070815T083000Z')
-    self.assertEquals(feed_dict['DTEND'], '20070815T093000Z')
-    self.assertEquals(feed_dict['CREATED'], event.getCreationDate().HTML4().replace('-','').replace(':',''))
-    self.assertEquals(feed_dict['UID'], 'uuid%s' % event.getUid())
-    # set stop date
-    event.setStopDate('2007/08/15 15:30')
-    event.reindexObject()
-    self.tic()
-    feed_dict = self.getICalFeed(module)
-    self.assertEquals(feed_dict['DTEND'], '20070815T133000Z')
+    # if not set end date, it must be same as start date
+    self.assertEquals(feed_dict['DTEND'], '20070815T083000Z')
+    self.assertEquals(feed_dict['STATUS'], 'TENTATIVE')
+    self.assertEquals(feed_dict['DESCRIPTION'],  'Event One description')
+    
     # check categorization
     sale_op = self.portal.sale_opportunity_module.newContent(portal_type='Sale Opportunity', title='New Opportunity', reference='NEWSALEOP')
     event.setFollowUp(sale_op.getRelativeUrl())
     get_transaction().commit()
-    event.reindexObject()
-    sale_op.reindexObject()
-    self.tic()
+    self.tic()
+    
     feed_dict = self.getICalFeed(module)
     self.assertTrue(feed_dict['CATEGORIES'] in ('NEWSALEOP', 'New Opportunity')) # forward compatibility
+    
+    # set stop date and change workflow state - assigned
+    event.assign()
+    event.setStopDate('2007/08/15 15:30')
+    get_transaction().commit()
+    self.tic()
+    
+    feed_dict = self.getICalFeed(module)
+    self.assertEquals(feed_dict['DTEND'], '20070815T133000Z')
+    self.assertEquals(feed_dict['STATUS'], 'CONFIRMED')
+    
+    # cancel event
+    event.cancel()
+    get_transaction().commit()
+    self.tic()
+    
+    feed_dict = self.getICalFeed(module)
+    self.assertEquals(feed_dict['STATUS'], 'CANCELLED')
 
   def test_02_renderTask(self, quiet=0, run=run_all_test):
     """
       Task - is rendered as "todo".
       Additionally, it has "status" and "percent-complete" fields which change
       when the task moves along task_workflow.
-    """
+      Dates work the same way, so we don't have to repeat it 
+    """
+    if not run: return    
     module = self.portal.task_module
     task = module.newContent(id='one', title='Task One', start_date='2007/08/15')
     get_transaction().commit()
-    task.reindexObject()
-    self.tic()
-    # dates work the same way, so we don't have to repeat it
-    # draft
+    self.tic()
+   
+   # current workflow state - draft
     feed_dict = self.getICalFeed(module)
     self.assertTrue('BEGIN:VCALENDAR' in feed_dict.keys())
     self.assertTrue('END:VCALENDAR' in feed_dict.keys())
+    self.assertTrue('BEGIN:VTODO' in feed_dict.keys())
+    self.assertTrue('END:VTODO' in feed_dict.keys())
     self.assertEquals(feed_dict['SUMMARY'], 'Task One')
-    self.assertTrue('BEGIN:VTODO' in feed_dict.keys())
     self.assertEquals(feed_dict['STATUS'], 'NEEDS-ACTION')
     self.assertEquals(feed_dict.get('PERCENT-COMPLETE', '0'), '0') # when it is zero it doesn't have to be there
     # now we check categorization (while we can edit the object)
-    project = self.portal.project_module.newContent(portal_type='Project', title='New Project', reference='NEWPROJ')
+    project = self.portal.project_module.newContent(portal_type='Project', 
+                                                                          title='New Project', 
+                                                                          reference='NEWPROJ')
     task.setSourceProjectValue(project)
     get_transaction().commit()
-    project.reindexObject()
-    task.reindexObject()
-    self.tic()
+    self.tic()
+    
     feed_dict = self.getICalFeed(module)
     self.assertEquals(feed_dict['CATEGORIES'], 'NEWPROJ')
-    # planned
+    
+    # change workflow state - planned
     task.plan()
     get_transaction().commit()
+    self.tic()
+    
     feed_dict = self.getICalFeed(module)
     self.assertEquals(feed_dict['STATUS'], 'NEEDS-ACTION')
     self.assertEquals(feed_dict['PERCENT-COMPLETE'], '33')
-    # ordered
+    
+    # change workflow state - ordered
     task.order()
     get_transaction().commit()
+    self.tic()
+    
     feed_dict = self.getICalFeed(module)
     self.assertEquals(feed_dict['STATUS'], 'IN-PROCESS')
     self.assertEquals(feed_dict['PERCENT-COMPLETE'], '66')
-    # confirmed
+    
+    # change workflow state - confirmed
     task.confirm()
     get_transaction().commit()
+    self.tic()
+    
     feed_dict = self.getICalFeed(module)
     self.assertEquals(feed_dict['STATUS'], 'COMPLETED')
     self.assertEquals(feed_dict['PERCENT-COMPLETE'], '100')
-
-
+    
+  def test_03_renderJournal(self, quiet=0, run=run_all_test):
+    """
+    Everyting which is not event and task is rendered as journal.
+    Here we render person module as iCal.
+    In this case pt for render current form('Test_view') is default page template(form_view)
+    """
+    if not run: return    
+    self.request.set('portal_skin', 'iCal');
+    self.portal.portal_skins.changeSkin('iCal');
+  
+    self.portal._setObject('Test_view',
+                        ERP5Form('Test_view', 'View'))
+    self.portal.Test_view.manage_addField('listbox', 'listbox', 'ListBox')
+  
+    listbox=self.portal.Test_view.listbox
+    self.assertNotEquals(listbox, None)  
+  
+    listbox.manage_edit_xmlrpc(
+          dict(columns=[('title', 'Title'),
+                        ('creation_date', 'Creation date'),
+                        ('description','Description'),
+                        ('Base_getICalComponent',  'Component')],
+               sort=[('creation_date | descending')], 
+               list_action='list',
+               list_method='searchFolder',
+               count_method='countFolder',
+               selection_name='ical_folder_selection'))
+    
+    module = self.portal.person_module
+    one = self.portal.person_module.one
+    feed_string = self.portal.person_module.Test_view()
+    feed_dict = self.parseICalFeed(feed_string)
+  
+    self.assertTrue('BEGIN:VCALENDAR' in feed_dict.keys())
+    self.assertTrue('END:VCALENDAR' in feed_dict.keys())
+    self.assertTrue('BEGIN:VJOURNAL' in feed_dict.keys())
+    self.assertTrue('END:VJOURNAL' in feed_dict.keys())
+    self.assertEquals(feed_dict['SUMMARY'], 'One')
+    self.assertEquals(feed_dict['DESCRIPTION'], 'Person One')
+    self.assertEquals(feed_dict['CREATED'], one.getCreationDate().HTML4().replace('-','').replace(':',''))  
+    
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestICal))




More information about the Erp5-report mailing list