diff --git a/product/ERP5/tests/testBPMEvaluation.py b/product/ERP5/tests/testBPMEvaluation.py index 8856e7a57a45f275a19b2c5dd2eb80ca7c05ce8c..e8d5a05a9b0136d0cc7e587a3b8d67b17747c2c1 100644 --- a/product/ERP5/tests/testBPMEvaluation.py +++ b/product/ERP5/tests/testBPMEvaluation.py @@ -37,6 +37,7 @@ It uses only Sale path to demonstrate BPM. It is advised to *NOT* remove erp5_administration. """ import unittest +import transaction from Products.ERP5.tests.testBPMCore import TestBPMMixin from DateTime import DateTime @@ -63,7 +64,198 @@ class TestBPMEvaluationMixin(TestBPMMixin): self._createBusinessProcess() self._createTradeCondition() self._createRootDocument() - self.stepTic() + self._setUpRules() + self.stepTic() + + def _setUpRules(self): + """Setups rules + + Rules are part of configuration, so anything provided by Business + Templates or previous test runs is ignored - all old rules are invalidated + between tests and new rules are created, configured and validated. + """ + self.rule_tool = self.portal.portal_rules + for rule in self.rule_tool.contentValues(): + if rule.getValidationState() == 'validated': + rule.invalidate() + transaction.commit() + self._createBPMOrderRule() + self._createBPMDeliveryRule() + self._createBPMInvoicingRule() + self._createTradeModelRule() + + def _createRootTradeRule(self, **kw): + edit_dict = {} + edit_dict.update( + trade_phase = 'default/delivery', + expandable_property = ('aggregate_list', 'base_application_list', + 'base_contribution_list', 'causality_list', 'description', + 'destination_account_list', 'destination_function_list', + 'destination_list', 'destination_section_list', 'price', + 'price_currency_list', 'quantity', 'quantity_unit_list', + 'resource_list', 'source_account_list', 'source_function_list', + 'source_list', 'source_section_list', 'start_date', 'stop_date', + 'variation_category_list', 'variation_property_dict'), + matching_property = ('resource_list', 'variation_category_list', + 'variation_property_dict') + ) + # TODO: version + edit_dict.update(**kw) + rule = self.rule_tool.newContent(**edit_dict) + rule.newContent(portal_type='Category Divergence Tester', + tested_property = ('source_section_list | Source Section', + 'resource_list | Resource', + 'destination_section_list | Destination Section', + 'source_list | Source', 'destination_list | Destination', + 'aggregate_list | Aggregate')) + rule.newContent(portal_type='Property Divergence Tester', + tested_property = ('start_date | Start Date', + 'stop_date | Stop Date')) + rule.newContent(portal_type='Quantity Divergence Tester') + + return rule + + def _createBPMOrderRule(self): + rule = self._createRootTradeRule(portal_type='BPM Order Rule', + reference='default_bpm_order_rule') + rule.validate() + transaction.commit() + + def _createBPMDeliveryRule(self): + rule = self._createRootTradeRule(portal_type='BPM Delivery Rule', + reference='default_bpm_delivery_rule' + ) + rule.validate() + transaction.commit() + + def _createTradeModelRule(self): + # TODO: version + edit_dict = {} + edit_dict.update( + ) + rule = self.rule_tool.newContent(portal_type='Trade Model Rule', + reference='default_trade_model_rule', + expandable_property = ('delivery_mode_list', 'incoterm_list', + 'source_list', 'destination_list', 'source_section_list', + 'destination_section_list', 'source_decision_list', + 'destination_decision_list', 'source_administration_list', + 'destination_administration_list', 'price_currency_list', + 'resource_list', 'aggregate_list', 'source_function_list', + 'destination_function_list', 'source_account_list', + 'destination_account_list', 'description', + 'destination_payment_list', 'source_payment_list'), + test_method_id = ('SimulationMovement_testTradeModelRule',) + ) + rule.newContent(portal_type='Category Divergence Tester', + tested_property = ('resource_list | Resource', + 'source_section_list | Source Section', + 'destination_section_list | Destination Section', + 'source_list | Source', 'destination_list | Destination', + 'source_function_list | Source Function', + 'destination_function_list | Destination Function', + 'source_project_list | Source Project', + 'destination_project_list | Destination Project', + 'aggregate_list | Aggregate', + 'price_currency_list | Price Currency', + 'base_contribution_list | Base Contribution', + 'base_application_list | Base Application', + 'source_account_list | Source Account', + 'destination_account_list | Destination Account')) + rule.newContent(portal_type='Property Divergence Tester', + tested_property = ('start_date | Start Date', + 'stop_date | Stop Date', 'price | Price')) + rule.newContent(portal_type='Quantity Divergence Tester') + + rule.validate() + transaction.commit() + + def _createBPMInvoicingRule(self): + # TODO: version + edit_dict = {} + edit_dict.update( + ) + rule = self.rule_tool.newContent(portal_type='BPM Invoicing Rule', + reference='default_bpm_invoicing_rule', + trade_phase = 'default/invoicing', + expandable_property = ('aggregate_list', 'base_application_list', + 'base_contribution_list', 'causality_list', 'delivery_mode_list', + 'description', 'destination_account_list', + 'destination_function_list', 'destination_list', + 'destination_section_list', 'efficiency', 'incoterm_list', 'price', + 'price_currency_list', 'quantity', 'quantity_unit_list', + 'resource_list', 'source_account_list', 'source_function_list', + 'source_list', 'source_section_list', 'start_date', 'stop_date', + 'variation_category_list', 'variation_property_dict'), + matching_property = ('resource_list', 'variation_category_list', + 'variation_property_dict'), + test_method_id = ('SimulationMovement_testBPMInvoicingRule',) + ) + rule.newContent(portal_type='Category Divergence Tester', + tested_property = ('resource_list | Resource', + 'source_section_list | Source Section', + 'destination_section_list | Destination Section', + 'source_list | Source', 'destination_list | Destination', + 'source_function_list | Source Function', + 'destination_function_list | Destination Function', + 'source_project_list | Source Project', + 'destination_project_list | Destination Project', + 'aggregate_list | Aggregate', + 'price_currency_list | Price Currency', + 'base_contribution_list | Base Contribution', + 'base_application_list | Base Application', + 'source_account_list | Source Account', + 'destination_account_list | Destination Account')) + rule.newContent(portal_type='Property Divergence Tester', + tested_property = ('start_date | Start Date', + 'stop_date | Stop Date')) + rule.newContent(portal_type='Quantity Divergence Tester') + + rule.validate() + transaction.commit() + + def _createBPMInvoicingRule(self): + # TODO: version + edit_dict = {} + edit_dict.update( + ) + rule = self.rule_tool.newContent(portal_type='BPM Invoicing Rule', + reference='default_bpm_invoicing_rule', + trade_phase = 'default/invoicing', + expandable_property = ('aggregate_list', 'base_application_list', + 'base_contribution_list', 'causality_list', 'delivery_mode_list', + 'description', 'destination_account_list', + 'destination_function_list', 'destination_list', + 'destination_section_list', 'efficiency', 'incoterm_list', 'price', + 'price_currency_list', 'quantity', 'quantity_unit_list', + 'resource_list', 'source_account_list', 'source_function_list', + 'source_list', 'source_section_list', 'start_date', 'stop_date', + 'variation_category_list', 'variation_property_dict'), + matching_property = ('resource_list', 'variation_category_list', + 'variation_property_dict'), + test_method_id = ('SimulationMovement_testBPMInvoicingRule',) + ) + rule.newContent(portal_type='Category Divergence Tester', + tested_property = ('resource_list | Resource', + 'source_section_list | Source Section', + 'destination_section_list | Destination Section', + 'source_list | Source', 'destination_list | Destination', + 'source_function_list | Source Function', + 'destination_function_list | Destination Function', + 'source_project_list | Source Project', + 'destination_project_list | Destination Project', + 'aggregate_list | Aggregate', + 'price_currency_list | Price Currency', + 'base_contribution_list | Base Contribution', + 'base_application_list | Base Application', + 'source_account_list | Source Account', + 'destination_account_list | Destination Account')) + rule.newContent(portal_type='Property Divergence Tester', + tested_property = ('start_date | Start Date', + 'stop_date | Stop Date')) + rule.newContent(portal_type='Quantity Divergence Tester') + + rule.validate() + transaction.commit() def _createDocument(self, portal_type, **kw): module = self.portal.getDefaultModule(portal_type=portal_type)