[Erp5-report] r33610 nicolas.dumazet - /erp5/trunk/products/ERP5/tests/testTransformation.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Mar 11 06:40:52 CET 2010
Author: nicolas.dumazet
Date: Thu Mar 11 06:40:51 2010
New Revision: 33610
URL: http://svn.erp5.org?rev=33610&view=rev
Log:
Expand a bit testTransformation. The added test is failing at the moment.
Modified:
erp5/trunk/products/ERP5/tests/testTransformation.py
Modified: erp5/trunk/products/ERP5/tests/testTransformation.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testTransformation.py?rev=33610&r1=33609&r2=33610&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testTransformation.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testTransformation.py [utf8] Thu Mar 11 06:40:51 2010
@@ -27,15 +27,16 @@
##############################################################################
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
-
-class TestTransformationMixin:
+from testProductionOrder import TestProductionOrderMixin
+import transaction
+
+class TestTransformationMixin(TestProductionOrderMixin):
"""
Mixin class for checking transformations
"""
- transformation_portal_type = 'Transformation'
- transformed_resource_portal_type = \
- 'Transformation Transformed Resource'
- component_portal_type = 'Component'
+
+ # Override, let TestProductionOrderMixin define the categories for us
+ operation_category_list = ['sewing', 'packing']
def createTransformation(self):
module = self.getPortalObject().getDefaultModule(
@@ -54,6 +55,42 @@
if variation_property_list is not None:
component.setVariationPropertyList(variation_property_list)
return component
+
+ def createResource(self, title, variation_base_category_list,
+ variation_category_list):
+ portal = self.getPortal()
+ resource_module = portal.getDefaultModule(self.resource_portal_type)
+ resource = resource_module.newContent(portal_type=self.resource_portal_type)
+ resource.edit(
+ title = title,
+ variation_base_category_list = variation_base_category_list,
+ )
+ resource.setVariationCategoryList(variation_category_list)
+ return resource
+
+ size_category_list = ['size/' + q for q in TestProductionOrderMixin
+ .mrp_size_list]
+ colour_category_list = ['colour/' + q for q in TestProductionOrderMixin
+ .colour_list]
+
+ swimsuit_variation_base_category_list = ['size', 'colour']
+ swimsuit_variation_category_list = size_category_list + colour_category_list
+ fabric_variation_base_category_list = ['colour']
+ fabric_variation_category_list = colour_category_list
+ button_variation_base_category_list = ['size']
+ button_variation_category_list = size_category_list
+
+ def createButtonComponent(self):
+ """
+ Buttons, variated by size
+ """
+ resource = self.createComponent()
+ resource.edit(
+ title = "Round Button",
+ variation_base_category_list = self.button_variation_base_category_list,
+ )
+ resource.setVariationCategoryList(self.button_variation_category_list)
+
class TestTransformation(TestTransformationMixin, ERP5TypeTestCase):
@@ -89,6 +126,82 @@
# temp object
self.assertTrue(aggregated_amount.isTested())
+ def test_transformedInventory(self):
+ portal = self.getPortal()
+
+ swimsuit = self.createResource(
+ 'Swimming Suit',
+ self.swimsuit_variation_base_category_list,
+ self.swimsuit_variation_category_list,
+ )
+ transformation = self.createTransformation()
+ transformation.edit(
+ title = 'Swimsuit Production',
+ variation_base_category_list = self.swimsuit_variation_base_category_list
+ )
+ transformation.setResourceValue(swimsuit)
+
+ fabric = self.createResource(
+ 'Fabric',
+ self.fabric_variation_base_category_list,
+ self.fabric_variation_category_list,
+ )
+ fabric_line = self.createTransformedResource(transformation)
+ fabric_line.setResourceValue(fabric)
+
+ fabric_line.setVVariationBaseCategoryList(['colour'])
+ for colour in self.colour_category_list:
+ # For a blue swimming suit, we need blue fabric
+ fabric_line.newCell(colour, category = colour, base_id = 'variation')
+
+ fabric_line.setQVariationBaseCategoryList(['size'])
+ for i, size in enumerate(self.size_category_list):
+ # Depending on the size, the quantity of Fabric is different.
+ # arbitrarily, we fix the quantity for size s as:
+ # self.size_category_list.index(s) + 1
+ fabric_line.newCell(size, quantity = i+1, base_id = 'quantity')
+
+ button = self.createComponent()
+ button.edit(
+ title = 'Round Button',
+ variation_base_category_list = self.button_variation_base_category_list,
+ )
+ button.setVariationCategoryList(self.button_variation_category_list)
+
+ button_line = self.createTransformedResource(transformation)
+ button_line.setResourceValue(button)
+
+ button_line.setVVariationBaseCategoryList(['size'])
+ for size in self.size_category_list:
+ # The button used depends on the size
+ button_line.newCell(size, category = size, base_id = 'variation')
+
+ sewing_line = transformation.newContent(
+ portal_type = self.operation_line_portal_type)
+ sewing_line.setResourceValue(
+ portal.portal_categories.resolveCategory('operation/sewing'))
+
+ sewing_line.setQVariationBaseCategoryList(['size', 'colour'])
+ i = 1
+ for size in self.size_category_list:
+ for colour in self.colour_category_list:
+ sewing_line.newCell(size, colour, quantity = i, base_id = 'quantity')
+ i += 1
+
+ transaction.commit()
+ self.tic()
+
+ # Swimming Suit does not use ALL categories in Size category.
+ # As a result, transformation lines should restrict their dimensions,
+ # using the range induced by the resource, instead of naively
+ # using the whole range directly from the variation categories.
+ self.assertEqual(
+ len(swimsuit.getVariationCategoryList(base_category_list=['size'])),
+ len(fabric_line.getCellKeyList(base_id='quantity'))
+ )
+
+ # XXX (will be expanded)
+
def test_resourceIsNotAcquiredOnTransformationLines(self):
'''
We don't want resource define on transformation to be acquired on
More information about the Erp5-report
mailing list