[Erp5-report] r18315 - /erp5/trunk/products/ERP5/tests/testPayroll.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Dec 13 21:38:55 CET 2007


Author: fabien
Date: Thu Dec 13 21:38:55 2007
New Revision: 18315

URL: http://svn.erp5.org?rev=18315&view=rev
Log:
add a test for model_line inheritance

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

Modified: erp5/trunk/products/ERP5/tests/testPayroll.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testPayroll.py?rev=18315&r1=18314&r2=18315&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testPayroll.py (original)
+++ erp5/trunk/products/ERP5/tests/testPayroll.py Thu Dec 13 21:38:55 2007
@@ -798,6 +798,188 @@
       else:
         self.fail("Unknown service for line %s" % pay_sheet_line)
 
+  def test_06_model_inheritance(self, quiet=QUIET, 
+      run=RUN_ALL_TESTS):
+    '''
+      check that a model can inherite some datas from another
+      the ineritance rules are the following :
+       - a DATA could be a model_line, annotation_line, ratio_line or
+         payement_condition (XXX -> this last one haven't yet reference)
+       - a model_line, annotation_line and a ratio_line have a REFERENCE
+       - a model can have some DATA's
+       - a model can inherite from another, that's mean :
+         o At the calculation step, each DATA of the parent model will be
+           checked : the DATA with a REFERENCE that's already in the child 
+           model will not entered in the calcul. The other will.
+         o This will be repeated on each parent model and on each parent of 
+           the parent model,... until there is no parent model to inherite 
+           (or until a max loop number has been reached).
+    '''
+    if not run: return
+    if not quiet:
+      self.logMessage('Model Inheritance')
+
+    # create 3 models
+    model_employee = self.paysheet_model_module.newContent(id='model_employee',
+        portal_type='Pay Sheet Model')
+
+    model_company = self.paysheet_model_module.newContent(id='model_company',
+        portal_type='Pay Sheet Model')
+
+    model_country = self.paysheet_model_module.newContent(id='model_country',
+        portal_type='Pay Sheet Model')
+
+    # add some content in the models
+    model_employee.newContent(id='over_time_duration',
+                              title='over_time_duration',
+                              portal_type='Annotation Line', 
+                              reference='over_time_duration',)
+
+    model_company.newContent( id='worked_time_duration',
+                              title='worked_time_duration',
+                              portal_type='Annotation Line', 
+                              reference='worked_time_duration',)
+
+    model_country.newContent( id='social_insurance',
+                              title='social_insurance',
+                              portal_type='Annotation Line', 
+                              reference='social_insurance',)
+
+    # inherite from each other
+    model_employee.setSpecialiseValue(model_company)
+    model_company.setSpecialiseValue(model_country)
+
+    # return a list of data that should contain data from all model
+    portal_type_list = ['Annotation Line', ]
+    model_reference_dict = {}
+    model_reference_dict = model_employee.getInheritanceModelReferenceDict(\
+                        model_reference_dict, model_employee, portal_type_list, [])
+
+
+    # check data's are corrected
+    number_of_different_references = []
+    for model in model_reference_dict.keys():
+      number_of_different_references.extend(model_reference_dict[model])
+
+    self.assertEqual(len(number_of_different_references), 3) # here, there is 
+                                                # 3 differents annotation line
+
+    # check the model number
+    self.assertEqual(len(model_reference_dict), 3)
+    self.assertEqual(model_reference_dict[model_employee.getRelativeUrl()], 
+        ['over_time_duration',])
+    self.assertEqual(model_reference_dict[model_company.getRelativeUrl()], 
+        ['worked_time_duration',])
+    self.assertEqual(model_reference_dict[model_country.getRelativeUrl()], 
+        ['social_insurance',])
+
+    # check with more values on each model
+    # employee :
+    model_employee.newContent(id='1',
+                              portal_type='Annotation Line', 
+                              reference='1',)
+    # company :
+    model_company.newContent( id='1',
+                              portal_type='Annotation Line', 
+                              reference='1',)
+    model_company.newContent( id='2',
+                              portal_type='Annotation Line', 
+                              reference='2',)
+    # country :
+    model_country.newContent( id='1',
+                              portal_type='Annotation Line', 
+                              reference='1',)
+    model_country.newContent( id='2',
+                              portal_type='Annotation Line', 
+                              reference='2',)
+    model_country.newContent( id='3',
+                              portal_type='Annotation Line', 
+                              reference='3',)
+    model_country.newContent( id='4',
+                              portal_type='Annotation Line', 
+                              reference='4',)
+
+    # return a list of data that should contain data from all model
+    portal_type_list = ['Annotation Line', ]
+    model_reference_dict = {}
+    model_reference_dict = model_employee.getInheritanceModelReferenceDict(\
+                        model_reference_dict, model_employee, portal_type_list, [])
+
+    # check that if a reference is already present in the model_employee,
+    # and the model_company contain a data with the same one, the data used at
+    # the calculation step is the model_employee data.
+    number_of_different_references = []
+    for model in model_reference_dict.keys():
+      number_of_different_references.extend(model_reference_dict[model])
+
+    self.assertEqual(len(number_of_different_references), 7) # here, there is 
+    # 4 differents annotation lines, and with the 3 ones have been had before
+    # that's make 7 !
+
+    # check the model number
+    self.assertEqual(len(model_reference_dict), 3)
+    self.assertEqual(model_reference_dict[model_employee.getRelativeUrl()], 
+        ['1', 'over_time_duration'])
+    self.assertEqual(model_reference_dict[model_company.getRelativeUrl()], 
+        ['2', 'worked_time_duration'])
+    self.assertEqual(model_reference_dict[model_country.getRelativeUrl()], 
+        ['3','4', 'social_insurance'])
+
+
+    # same test with a multi model inheritance
+    model_a = self.paysheet_model_module.newContent(id='model_a', title='model_a',
+        portal_type='Pay Sheet Model')
+    model_b = self.paysheet_model_module.newContent(id='model_b', title='model_b',
+        portal_type='Pay Sheet Model')
+    model_c = self.paysheet_model_module.newContent(id='model_c', title='model_c', 
+        portal_type='Pay Sheet Model')
+
+    # check with more values on each model
+    # a :
+    model_a.newContent(id='5', portal_type='Annotation Line', reference='5')
+    # b :
+    model_b.newContent(id='5',portal_type='Annotation Line', reference='5')
+    model_b.newContent(id='6',portal_type='Annotation Line', reference='6')
+    # c :
+    model_c.newContent(id='5', portal_type='Annotation Line', reference='5')
+    model_c.newContent(id='6', portal_type='Annotation Line', reference='6')
+    model_c.newContent(id='7', portal_type='Annotation Line', reference='7')
+    model_c.newContent(id='8', portal_type='Annotation Line', reference='8')
+
+    # inherite from each other
+    model_a.setSpecialiseValue(model_c)
+    model_company.setSpecialiseValueList([model_country, model_a, model_b])
+    model_employee.setSpecialiseValue(model_company)
+
+    # return a list of data that should contain data from all model
+    portal_type_list = ['Annotation Line', ]
+    model_reference_dict = {}
+    model_reference_dict = model_employee.getInheritanceModelReferenceDict(\
+                        model_reference_dict, model_employee, portal_type_list, [])
+
+
+    # check data's are corrected
+    number_of_different_references = []
+    for model in model_reference_dict.keys():
+      number_of_different_references.extend(model_reference_dict[model])
+
+    self.assertEqual(len(number_of_different_references), 11) # here, there is 
+    # 8 differents annotation lines, and with the 3 ones have been had before
+    # that's make 11 !
+    
+    # check the model number
+    self.assertEqual(len(model_reference_dict), 6)
+    self.assertEqual(model_reference_dict[model_employee.getRelativeUrl()], 
+        ['1', 'over_time_duration'])
+    self.assertEqual(model_reference_dict[model_company.getRelativeUrl()], 
+        ['2', 'worked_time_duration'])
+    self.assertEqual(model_reference_dict[model_a.getRelativeUrl()], ['5',])
+    self.assertEqual(model_reference_dict[model_c.getRelativeUrl()], 
+        ['6', '7', '8'])
+    self.assertEqual(model_reference_dict[model_b.getRelativeUrl()], [])
+    self.assertEqual(model_reference_dict[model_country.getRelativeUrl()], 
+        ['3','4', 'social_insurance'])
+
 import unittest
 def test_suite():
   suite = unittest.TestSuite()




More information about the Erp5-report mailing list