diff --git a/product/ERP5/tests/testNewPayroll.py b/product/ERP5/tests/testNewPayroll.py index 9e1a5ccbfb0da9da767feaaf3528541e750d87a6..b176b579b3f200dd71a4e4bef080acb775407d00 100644 --- a/product/ERP5/tests/testNewPayroll.py +++ b/product/ERP5/tests/testNewPayroll.py @@ -31,6 +31,7 @@ from AccessControl.SecurityManagement import newSecurityManager from Products.ERP5Type.tests.Sequence import SequenceList from Products.ERP5Type.tests.utils import reindex from DateTime import DateTime +import transaction class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): normal_resource_use_category_list = ['payroll/base_salary'] @@ -44,8 +45,19 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): self.createCategories() self.setSystemPreference() + @reindex def beforeTearDown(self): - pass + transaction.abort() + for module in ( + self.portal.organisation_module, + self.portal.person_module, + self.portal.paysheet_model_module, + self.portal.accounting_module, + self.portal.business_process_module, + self.portal.service_module, + self.portal.portal_simulation,): + module.manage_delObjects(list(module.objectIds())) + def login(self): uf = self.getPortal().acl_users @@ -814,16 +826,32 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): ''' Create three models inheriting from each other. Set slices values on a model. + + the inheritance tree look like this : + + Employee Model + / \ + / \ + / \ + Company Model Second Company Alt + / + / + / + Country Model ''' model_employee = self.createModel() - model_employee.edit(variation_settings_category_list='salary_range/france') + model_employee.edit(title='Employee Model', reference='model_employee', + variation_settings_category_list='salary_range/france') model_company = self.createModel() - model_company.edit(variation_settings_category_list='salary_range/france') + model_company.edit(title='Company Model', reference='model_company', + variation_settings_category_list='salary_range/france') model_company_alt = self.createModel() - model_company_alt.edit(variation_settings_category_list=\ - 'salary_range/france') + model_company_alt.edit(title='Second Company Model', + reference='model_company_alt', + variation_settings_category_list='salary_range/france') model_country = self.createModel() - model_country.edit(variation_settings_category_list='salary_range/france') + model_country.edit(title='Country Model', reference='model_country', + variation_settings_category_list='salary_range/france') # add some cells in the models slice1 = model_employee.newCell('salary_range/france/slice_a', portal_type='Pay Sheet Model Slice', @@ -1203,6 +1231,77 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): employee = sequence.get('employee') employee.setMaritalStatus('single') + def stepModelTreeAddAnnotationLines(self, sequence=None, **kw): + model_employee = sequence.get('model_employee') + model_employee.newContent(id='over_time_duration', + title='Over time duration', + portal_type='Annotation Line', + reference='over_time_duration', + quantity=1) + model_company = sequence.get('model_company') + model_company.newContent(id='worked_time_duration', + title='Worked time duration', + portal_type='Annotation Line', + reference='worked_time_duration', + quantity=2) + model_company_alt = sequence.get('model_company_alt') + model_company_alt.newContent(id='social_insurance', + title='Social insurance', + portal_type='Annotation Line', + reference='social_insurance', + quantity=3) + model_country = sequence.get('model_country') + model_country.newContent(id='social_insurance', + title='Social insurance', + portal_type='Annotation Line', + reference='social_insurance', + quantity=4) + + def stepCheckInheritanceModelReferenceDict(self, sequence=None, **kw): + model_employee = sequence.get('model_employee') + model_employee_url = model_employee.getRelativeUrl() + model_company_url = sequence.get('model_company').getRelativeUrl() + model_company_alt_url = sequence.get('model_company_alt').getRelativeUrl() + model_country_url = sequence.get('model_country').getRelativeUrl() + + model_reference_dict = model_employee.getInheritanceReferenceDict(\ + portal_type_list=('Annotation Line',)) + self.assertEquals(len(model_reference_dict), 3) # there is 4 model but two + # models have the same + # reference. + self.assertEquals(model_reference_dict.has_key(model_employee_url), True) + self.assertEquals(model_reference_dict[model_employee_url], + ['over_time_duration']) + self.assertEquals(model_reference_dict.has_key(model_company_url), True) + self.assertEquals(model_reference_dict[model_company_url], + ['worked_time_duration']) + self.assertEquals(model_reference_dict.has_key(model_company_alt_url), True) + self.assertEquals(model_reference_dict[model_company_alt_url], + ['social_insurance']) + self.assertNotEquals(model_reference_dict.has_key(model_country_url), True) + + # check the object list : + paysheet = self.createPaysheet() + paysheet.setSpecialiseValue(model_employee) + object_list = paysheet.getInheritedObjectValueList(portal_type_list=\ + ('Annotation Line',)) + self.assertEquals(len(object_list), 3) # one line have the same reference + # than another, so each reference + # should be prensent only one time + # in the list + over_time_duration = paysheet.getAnnotationLineFromReference(\ + 'over_time_duration') + self.assertNotEquals(over_time_duration, None) + over_time_duration.getQuantity(1) + worked_time_duration = paysheet.getAnnotationLineFromReference(\ + 'worked_time_duration') + self.assertNotEquals(worked_time_duration, None) + worked_time_duration.getQuantity(2) + social_insurance = paysheet.getAnnotationLineFromReference(\ + 'social_insurance') + self.assertNotEquals(social_insurance, None) + social_insurance.getQuantity(3) + class TestNewPayroll(TestNewPayrollMixin): BUSINESS_PATH_CREATION_SEQUENCE_STRING = """ @@ -1638,6 +1737,29 @@ class TestNewPayroll(TestNewPayrollMixin): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) + def test_modelSubObjectInheritance(self): + ''' + 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 + - 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 + ''' + sequence_list = SequenceList() + sequence_string = """ + CreateModelTree + ModelTreeAddAnnotationLines + CheckInheritanceModelReferenceDict + """ + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + import unittest def test_suite(): suite = unittest.TestSuite()