From b66a59c5d428669952de40710aec8db2fe3ff628 Mon Sep 17 00:00:00 2001 From: Fabien Morin <fabien@nexedi.com> Date: Fri, 5 Jun 2009 08:42:18 +0000 Subject: [PATCH] add test to check slices works git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@27384 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/tests/testNewPayroll.py | 165 +++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) diff --git a/product/ERP5/tests/testNewPayroll.py b/product/ERP5/tests/testNewPayroll.py index 3ae928ba80..2638f8f273 100644 --- a/product/ERP5/tests/testNewPayroll.py +++ b/product/ERP5/tests/testNewPayroll.py @@ -101,6 +101,9 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): 'salary_range/france/slice_b', 'salary_range/france/slice_c', 'salary_range/france/forfait', + 'salary_range/france/slice_0_to_200', + 'salary_range/france/slice_200_to_400', + 'salary_range/france/slice_400_to_5000', ) def getBusinessTemplateList(self): @@ -169,6 +172,27 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): source_section_value=employee) sequence.edit(model = model) + def addSlice(self, model, slice, min_value, max_value, base_id='cell'): + '''add a new slice in the model''' + slice_value = model.newCell(slice, portal_type='Pay Sheet Model Slice', + base_id=base_id) + slice_value.setQuantityRangeMax(max_value) + slice_value.setQuantityRangeMin(min_value) + return slice_value + + def stepCreateModelWithSlices(self, sequence=None, **kw): + model = self.createModel() + employer = sequence.get('employer') + employee = sequence.get('employee') + model.edit(destination_section_value=employer, + source_section_value=employee) + model.setVariationSettingsCategoryList(\ + ['salary_range/france']) + self.addSlice(model, 'salary_range/france/slice_0_to_200', 0, 200) + self.addSlice(model, 'salary_range/france/slice_200_to_400', 200, 400) + self.addSlice(model, 'salary_range/france/slice_400_to_5000', 400, 5000) + sequence.edit(model = model) + def createModelLine(self, document, **kw): return document.newContent(portal_type='Pay Sheet Model Line', **kw) @@ -186,6 +210,23 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): base_contribution_list=['base_amount/deductible_tax']) sequence.edit(urssaf_model_line = model_line) + def stepModelCreateUrssafModelLineWithSlices(self, sequence=None, **kw): + model = sequence.get('model') + model_line = self.createModelLine(model) + model_line.edit(title='Urssaf', + int_index=2, + reference='urssaf_model_line', + trade_phase='trade_phase/payroll/france/urssaf', + resource_value=sequence.get('urssaf_payroll_service'), + variation_category_list=['tax_category/employee_share', + 'tax_category/employer_share', + 'salary_range/france/slice_0_to_200', + 'salary_range/france/slice_200_to_400', + 'salary_range/france/slice_400_to_5000'], + base_application_list=[ 'base_amount/base_salary'], + base_contribution_list=['base_amount/deductible_tax']) + sequence.edit(urssaf_model_line_with_slices = model_line) + def stepPaysheetCreateUrssafModelLine(self, sequence=None, **kw): paysheet = sequence.get('paysheet') model_line = self.createModelLine(paysheet) @@ -213,6 +254,51 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): mapped_value_property_list=('quantity', 'price')) cell2.edit(price=0.5, tax_category='employer_share') + def stepUrssafModelLineWithSlicesCreateMovements(self, sequence=None, **kw): + model_line = sequence.get('urssaf_model_line_with_slices') + cell1 = model_line.newCell('tax_category/employee_share', + 'salary_range/france/slice_0_to_200', + portal_type='Pay Sheet Model Cell', + base_id='movement', + mapped_value_property_list=('quantity', 'price')) + cell1.edit(price=0.1, tax_category='employee_share', + salary_range='france/slice_0_to_200') + cell2 = model_line.newCell('tax_category/employer_share', + 'salary_range/france/slice_0_to_200', + portal_type='Pay Sheet Model Cell', + base_id='movement', + mapped_value_property_list=('quantity', 'price')) + cell2.edit(price=0.2, tax_category='employer_share', + salary_range='france/slice_0_to_200') + cell3 = model_line.newCell('tax_category/employee_share', + 'salary_range/france/slice_200_to_400', + portal_type='Pay Sheet Model Cell', + base_id='movement', + mapped_value_property_list=('quantity', 'price')) + cell3.edit(price=0.3, tax_category='employee_share', + salary_range='france/slice_200_to_400') + cell4 = model_line.newCell('tax_category/employer_share', + 'salary_range/france/slice_200_to_400', + portal_type='Pay Sheet Model Cell', + base_id='movement', + mapped_value_property_list=('quantity', 'price')) + cell4.edit(price=0.4, tax_category='employer_share', + salary_range='france/slice_200_to_400') + cell5 = model_line.newCell('tax_category/employee_share', + 'salary_range/france/slice_400_to_5000', + portal_type='Pay Sheet Model Cell', + base_id='movement', + mapped_value_property_list=('quantity', 'price')) + cell5.edit(price=0.5, tax_category='employee_share', + salary_range='france/slice_400_to_5000') + cell6 = model_line.newCell('tax_category/employer_share', + 'salary_range/france/slice_400_to_5000', + portal_type='Pay Sheet Model Cell', + base_id='movement', + mapped_value_property_list=('quantity', 'price')) + cell6.edit(price=0.6, tax_category='employer_share', + salary_range='france/slice_400_to_5000') + def stepPaysheetUrssafModelLineCreateMovements(self, sequence=None, **kw): model_line = sequence.get('urssaf_model_line') cell1 = model_line.newCell('tax_category/employee_share', @@ -266,6 +352,12 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): paysheet = sequence.get('paysheet') self.checkUpdateAggregatedAmountListReturn(model, paysheet, 0, 2) + def stepCheckUpdateAggregatedAmountListReturnUsingSlices(self, + sequence=None, **kw): + model = sequence.get('model') + paysheet = sequence.get('paysheet') + self.checkUpdateAggregatedAmountListReturn(model, paysheet, 0, 6) + def stepPaysheetApplyTransformation(self, sequence=None, **kw): paysheet = sequence.get('paysheet') paysheet.applyTransformation() @@ -277,6 +369,14 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): self.assertEqual(len(paysheet.getMovementList(portal_type=\ 'Pay Sheet Cell')), 2) # 2 because labour line contain no movement + def stepCheckPaysheetLineAreCreatedUsingSlices(self, sequence=None, **kw): + paysheet = sequence.get('paysheet') + paysheet_line_list = paysheet.contentValues(portal_type='Pay Sheet Line') + self.assertEqual(len(paysheet_line_list), 2) + self.assertEqual(len(paysheet.getMovementList(portal_type=\ + 'Pay Sheet Cell')), 6) # 6 because labour line contain no movement and + # because of the 3 slice and 2 tax_categories + def stepCheckPaysheetLineAmounts(self, sequence=None, **kw): paysheet = sequence.get('paysheet') paysheet_line_list = paysheet.contentValues(portal_type='Pay Sheet Line') @@ -294,6 +394,41 @@ class TestNewPayrollMixin(ERP5ReportTestCase, TestBPMMixin): else: self.fail("Unknown service for line %s" % paysheet_line.getTitle()) + def stepCheckPaysheetLineAmountsUsingSlices(self, sequence=None, **kw): + paysheet = sequence.get('paysheet') + paysheet_line_list = paysheet.contentValues(portal_type='Pay Sheet Line') + for paysheet_line in paysheet_line_list: + service = paysheet_line.getResourceTitle() + if service == 'Urssaf': + cell1 = paysheet_line.getCell('tax_category/employee_share', + 'salary_range/france/slice_0_to_200') + self.assertEquals(cell1.getQuantity(), 200) + self.assertEquals(cell1.getPrice(), 0.1) + cell2 = paysheet_line.getCell('tax_category/employer_share', + 'salary_range/france/slice_0_to_200') + self.assertEquals(cell2.getQuantity(), 200) + self.assertEquals(cell2.getPrice(), 0.2) + cell3 = paysheet_line.getCell('tax_category/employee_share', + 'salary_range/france/slice_200_to_400') + self.assertEquals(cell3.getQuantity(), 200) + self.assertEquals(cell3.getPrice(), 0.3) + cell4 = paysheet_line.getCell('tax_category/employer_share', + 'salary_range/france/slice_200_to_400') + self.assertEquals(cell4.getQuantity(), 200) + self.assertEquals(cell4.getPrice(), 0.4) + cell5 = paysheet_line.getCell('tax_category/employee_share', + 'salary_range/france/slice_400_to_5000') + self.assertEquals(cell5.getQuantity(), 2600) + self.assertEquals(cell5.getPrice(), 0.5) + cell6 = paysheet_line.getCell('tax_category/employer_share', + 'salary_range/france/slice_400_to_5000') + self.assertEquals(cell6.getQuantity(), 2600) + self.assertEquals(cell6.getPrice(), 0.6) + elif service == 'Labour': + self.assertEqual(paysheet_line.getTotalPrice(), 3000.0) + else: + self.fail("Unknown service for line %s" % paysheet_line.getTitle()) + def stepCheckUpdateAggregatedAmountListReturnNothing(self, sequence=None, **kw): paysheet = sequence.get('paysheet') model = sequence.get('model') @@ -889,6 +1024,36 @@ class TestNewPayroll(TestNewPayrollMixin): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) + def test_sliceOnModelLine(self): + ''' + It's possible to define some slices on model, and use it on model lines. + Check that works and that after appy transformation, amounts are goods + ''' + sequence_list = SequenceList() + sequence_string = self.COMMON_BASIC_DOCUMENT_CREATION_SEQUENCE_STRING + """ + CreateUrssafPayrollService + CreateLabourPayrollService + CreateEmployer + CreateEmployee + CreateModelWithSlices + Tic + ModelCreateUrssafModelLineWithSlices + Tic + UrssafModelLineWithSlicesCreateMovements + CreateBasicPaysheet + PaysheetCreateLabourPaySheetLine + """ + self.BUSINESS_PATH_CREATION_SEQUENCE_STRING + """ + CheckUpdateAggregatedAmountListReturnUsingSlices + PaysheetApplyTransformation + Tic + CheckPaysheetLineAreCreatedUsingSlices + CheckPaysheetLineAmountsUsingSlices + CheckUpdateAggregatedAmountListReturnNothing + CheckPaysheetLineAmountsUsingSlices + """ + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + import unittest def test_suite(): suite = unittest.TestSuite() -- 2.30.9