From 92cbee68bc4604918ac2320e1049201e49a88bce Mon Sep 17 00:00:00 2001
From: Julien Muchembled <jm@nexedi.com>
Date: Wed, 22 Apr 2015 12:30:01 +0200
Subject: [PATCH] simulation: specialise tester must not sort before comparing
 decision and prevision

The order of specialise categories is important.
---
 .../ERP5/Document/CategoryMembershipEquivalenceTester.py   | 7 +------
 product/ERP5/Document/SpecialiseEquivalenceTester.py       | 4 ++++
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/product/ERP5/Document/CategoryMembershipEquivalenceTester.py b/product/ERP5/Document/CategoryMembershipEquivalenceTester.py
index c6ca18ba70..903b07e11e 100644
--- a/product/ERP5/Document/CategoryMembershipEquivalenceTester.py
+++ b/product/ERP5/Document/CategoryMembershipEquivalenceTester.py
@@ -59,7 +59,7 @@ class CategoryMembershipEquivalenceTester(Predicate, EquivalenceTesterMixin):
     # What about using getCategoryMembershipList for Simulation Movements ?
     return movement.getAcquiredCategoryMembershipList(property)
 
-  def _compare(self, prevision_movement, decision_movement):
+  def _compare(self, prevision_movement, decision_movement, sorted=sorted):
     """
     If prevision_movement and decision_movement don't match, it returns a
     list : (prevision_value, decision_value, message, mapping)
@@ -68,11 +68,6 @@ class CategoryMembershipEquivalenceTester(Predicate, EquivalenceTesterMixin):
     if getattr(decision_movement, 'isPropertyRecorded',
                lambda x:False)(tested_property):
       decision_value = decision_movement.getRecordedProperty(tested_property)
-      if not isinstance(decision_value, (list, tuple)):
-        if decision_value is None:
-          decision_value = []
-        else:
-          decision_value = [decision_value]
     else:
       decision_value = self._getTestedPropertyValue(decision_movement,
                                                     tested_property)
diff --git a/product/ERP5/Document/SpecialiseEquivalenceTester.py b/product/ERP5/Document/SpecialiseEquivalenceTester.py
index 5f05e0876e..6e2c16fc2c 100644
--- a/product/ERP5/Document/SpecialiseEquivalenceTester.py
+++ b/product/ERP5/Document/SpecialiseEquivalenceTester.py
@@ -43,6 +43,10 @@ class SpecialiseEquivalenceTester(CategoryMembershipEquivalenceTester):
   movement_specialise_type = ()
   movement_exclude_specialise_type = ()
 
+  def _compare(self, prevision_movement, decision_movement, sorted=lambda x:x):
+    return super(SpecialiseEquivalenceTester, self)._compare(
+      prevision_movement, decision_movement, sorted)
+
   def _getTestedPropertyValue(self, movement, property):
     if movement.getPortalType() == 'Simulation Movement':
       return movement.getCategoryMembershipList(property)
-- 
2.30.9