From f1489657bc2fa2a083671d560e3ea54cea5e2106 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Thu, 28 Aug 2008 12:46:30 +0000
Subject: [PATCH] test for new leave request report

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@23229 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testCalendar.py | 112 ++++++++++++++++++++++++++++-
 1 file changed, 109 insertions(+), 3 deletions(-)

diff --git a/product/ERP5/tests/testCalendar.py b/product/ERP5/tests/testCalendar.py
index 252ebd5e50..f73c166071 100644
--- a/product/ERP5/tests/testCalendar.py
+++ b/product/ERP5/tests/testCalendar.py
@@ -26,7 +26,7 @@
 #
 ##############################################################################
 
-from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5ReportTestCase
 from Products.ERP5Type.Base import _aq_reset
 from AccessControl.SecurityManagement import newSecurityManager, \
                                              noSecurityManager
@@ -35,7 +35,7 @@ from Products.ERP5Type.tests.utils import createZODBPythonScript
 from Products.ERP5Type.tests.utils import removeZODBPythonScript
 from DateTime import DateTime
 
-class TestCalendar(ERP5TypeTestCase):
+class TestCalendar(ERP5ReportTestCase):
 
   run_all_test = 1
   person_portal_type = "Person"
@@ -68,13 +68,18 @@ class TestCalendar(ERP5TypeTestCase):
       Light install create only base categories, so we create
       some categories for testing them
     """
-    cal_type_category_list = ['type1']
+    cal_type_category_list = ['type1', 'type2', 'type3']
     if len(self.category_tool.calendar_period_type.contentValues()) == 0 :
       for category_id in cal_type_category_list:
         o = self.category_tool.calendar_period_type.newContent(
                          portal_type='Category',
                          id=category_id)
 
+    if 'my_group' not in self.category_tool.group.contentIds():
+      self.category_tool.group.newContent(portal_type='Category',
+                                          id='my_group')
+
+
   def stepTic(self,**kw):
     self.tic()
 
@@ -1359,6 +1364,107 @@ class TestCalendar(ERP5TypeTestCase):
                         available_time_movement_list])
 
 
+  def test_PersonModule_viewLeaveRequestReport(self):
+    # in this test, type1 is the type for presences, type2 & type3 are types
+    # for leaves.
+    organisation = self.portal.organisation_module.newContent(
+                                portal_type='Organisation',
+                                group='my_group')
+
+    group_calendar = self.portal.group_calendar_module.newContent(
+                                  portal_type='Group Calendar')
+    group_calendar_period = group_calendar.newContent(
+                                  portal_type='Group Presence Period')
+    group_calendar_period.setStartDate('2008/01/01 08:00')
+    group_calendar_period.setStopDate('2008/01/01 18:00')
+    group_calendar_period.setResourceValue(
+          self.portal.portal_categories.calendar_period_type.type1)
+    group_calendar.confirm()
+
+    person1 = self.portal.person_module.newContent(
+                                portal_type='Person',
+                                title='Person 1',
+                                career_reference='1',
+                                subordination_value=organisation)
+    assignment = person1.newContent(portal_type='Assignment',
+                                    calendar_value=group_calendar)
+    leave_request1 = self.portal.leave_request_module.newContent(
+                                  portal_type='Leave Request',
+                                  destination_value=person1)
+    leave_request1_period = leave_request1.newContent(
+                                  portal_type='Leave Request Period')
+    leave_request1_period.setStartDate('2008/01/01 09:00')
+    leave_request1_period.setStopDate('2008/01/01 10:00')
+    leave_request1_period.setResourceValue(
+          self.portal.portal_categories.calendar_period_type.type2)
+    leave_request1.confirm()
+
+    person2 = self.portal.person_module.newContent(
+                                portal_type='Person',
+                                title='Person 2',
+                                career_reference='2',
+                                subordination_value=organisation)
+    assignment = person2.newContent(portal_type='Assignment',
+                                    calendar_value=group_calendar)
+    leave_request2 = self.portal.leave_request_module.newContent(
+                                  portal_type='Leave Request',
+                                  destination_value=person2)
+    leave_request2_period1 = leave_request2.newContent(
+                                  portal_type='Leave Request Period')
+    leave_request2_period1.setStartDate('2008/01/01 09:00')
+    leave_request2_period1.setStopDate('2008/01/01 10:00')
+    leave_request2_period1.setResourceValue(
+          self.portal.portal_categories.calendar_period_type.type2)
+    leave_request2_period2 = leave_request2.newContent(
+                                  portal_type='Leave Request Period')
+    leave_request2_period2.setStartDate('2008/01/01 10:00')
+    leave_request2_period2.setStopDate('2008/01/01 11:30')
+    leave_request2_period2.setResourceValue(
+          self.portal.portal_categories.calendar_period_type.type3)
+    leave_request2.confirm()
+
+    get_transaction().commit()
+    self.tic()
+
+    # set request variables and render                 
+    request_form = self.portal.REQUEST
+    request_form['from_date'] = DateTime(2008, 1, 1)
+    request_form['to_date'] = DateTime(2009, 1, 1)
+    request_form['node_category'] = 'group/my_group'
+    
+    report_section_list = self.getReportSectionList(
+                             self.portal.person_module,
+                             'PersonModule_viewLeaveRequestReport')
+    self.assertEquals(1, len(report_section_list))
+      
+    line_list = self.getListBoxLineList(report_section_list[0])
+    data_line_list = [l for l in line_list if l.isDataLine()]
+    self.assertEquals(2, len(data_line_list))
+
+    self.assertEquals(data_line_list[0].column_id_list,
+        ['person_career_reference', 'person_title',
+         'calendar_period_type/type2', 'calendar_period_type/type3', 'total'])
+
+    self.checkLineProperties(data_line_list[0],
+                             person_career_reference='1',
+                             person_title='Person 1',
+                             total=1.0,
+                             **{'calendar_period_type/type2': 1.0,})
+    self.checkLineProperties(data_line_list[1],
+                             person_career_reference='2',
+                             person_title='Person 2',
+                             total=2.5,
+                             **{'calendar_period_type/type2': 1.0,
+                                'calendar_period_type/type3': 1.5,})
+
+    self.failUnless(line_list[-1].isStatLine())
+    self.checkLineProperties(line_list[-1],
+                             total=3.5,
+                             **{'calendar_period_type/type2': 2.0,
+                                'calendar_period_type/type3': 1.5,})
+                             
+
+
 import unittest
 def test_suite():
   suite = unittest.TestSuite()
-- 
2.30.9