Commit 27d533ff authored by Jérome Perrin's avatar Jérome Perrin

pdm: tolerate getEffectiveModel errors during indexation

it can happen that getEffectiveModel does not find a model, this
is currently causing activity failures in indexation of
transformations. Tolerate errors here because this is not an error
but just a sign of invalid user data.
parent f7b7edb6
......@@ -111,7 +111,7 @@ class TestTransformation(TestTransformationMixin, BaseTestUnitConversion):
return TestTransformationMixin.getBusinessTemplateList(self) + (
'erp5_apparel', 'erp5_dummy_movement', 'erp5_project')
def test_01_getAggregatedAmountListSimple(self):
def test_getAggregatedAmountListSimple(self):
"""
Make sure that getAggregatedAmountList return something
"""
......@@ -150,7 +150,7 @@ class TestTransformation(TestTransformationMixin, BaseTestUnitConversion):
[(1, first_component), (2, second_component)]
)
def test_01_getAggregatedAmountListWithVariatedProperty(self):
def test_getAggregatedAmountListWithVariatedProperty(self):
"""
Make sure that getAggregatedAmountList is still working properly if we
have additionnals propertysheets on transformations lines and that used
......@@ -448,6 +448,44 @@ class TestTransformation(TestTransformationMixin, BaseTestUnitConversion):
'Transformation Transformed Resource')
self.assertEqual(transformed_resource.getResource(), None)
def test_transformation_indexing(self):
target_product = self.portal.product_module.newContent(portal_type='Product')
consumed_product = self.portal.product_module.newContent(portal_type='Product')
self.tic()
transformation = self.portal.transformation_module.newContent(
portal_type='Transformation',
resource_value=target_product,
)
transformation.newContent(
portal_type='Transformation Transformed Resource',
resource_value=consumed_product,
quantity=-2
)
self.tic()
# when target product is reindexed, the corresponding transformations are indexed
target_product.edit()
self.tic()
self.assertEqual(
self.portal.erp5_sql_connection.manage_test(
'SELECT * from transformation where uid=%s' % target_product.getUid()).dictionaries(),
[{
'uid': target_product.getUid(),
'variation_text': '',
'transformed_uid': consumed_product.getUid(),
'transformed_variation_text': '',
'quantity': -2,
}],
)
# non regression: this works even if transformation has a reference
transformation.setReference(self.id())
target_product.edit()
self.tic()
def test_suite():
import unittest
suite = unittest.TestSuite()
......
......@@ -30,7 +30,12 @@ for transformation_relative_url, variation_list_list in transformation_item_list
base_row = dict(uid=resource.getUid(), variation_text=movement.getVariationText())
row_dict_list = []
for amount in movement.getAggregatedAmountList():
try:
# this can fail if getEffectiveModel transformation can not be found
aggregated_amount_list = movement.getAggregatedAmountList()
except KeyError:
aggregated_amount_list = []
for amount in aggregated_amount_list:
transformed_resource_uid = amount.getResourceUid()
quantity = amount.getQuantity()
if transformed_resource_uid is not None and quantity is not None:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment