From 03c92f9696a1689cb0db70a991f84182bcf09f27 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Mon, 20 May 2013 11:19:04 +0200
Subject: [PATCH] fix c7cb566542591af6175e5653846c29d1db45ed48

A set setter keeps the default value, so in a sense the order is preserved.
---
 product/ERP5Type/Accessor/Category.py  | 9 ++++++++-
 product/ERP5Type/tests/testERP5Type.py | 8 +++++++-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/product/ERP5Type/Accessor/Category.py b/product/ERP5Type/Accessor/Category.py
index 2bc0d5f711..b1994df3dc 100644
--- a/product/ERP5Type/Accessor/Category.py
+++ b/product/ERP5Type/Accessor/Category.py
@@ -100,7 +100,14 @@ class SetSetter(ListSetter):
       """
       if type(value) not in (set, frozenset):
         value = frozenset(value)
-      return ListSetter.__call__(self, instance, value, *args, **kw)
+      instance._setCategoryMembership(self._key, value,
+                                      spec=kw.get('spec',()),
+                                      filter=kw.get('filter', None),
+                                      portal_type=kw.get('portal_type',()),
+                                      base=kw.get('base', 0),
+                                      keep_default=1,
+                                      checked_permission=kw.get('checked_permission', None))
+      return (instance, )
 
 
 class DefaultGetter(BaseGetter):
diff --git a/product/ERP5Type/tests/testERP5Type.py b/product/ERP5Type/tests/testERP5Type.py
index 7d261c9ae1..7c180951a5 100644
--- a/product/ERP5Type/tests/testERP5Type.py
+++ b/product/ERP5Type/tests/testERP5Type.py
@@ -700,8 +700,14 @@ class TestERP5Type(PropertySheetTestCase, LogInterceptor):
       self.assertEquals(person.getRegionList(), ['alpha', 'beta'])
       person.setRegionList(['beta', 'alpha', 'alpha'])
       self.assertEquals(person.getRegionList(), ['beta', 'alpha', 'alpha'])
+      # at this point the person have a default region set to the first item in
+      # the list.
+      self.assertEquals(person.getDefaultRegion(), 'beta')
       person.setRegionSet(['alpha', 'beta', 'alpha'])
-      self.assertEquals(sorted(person.getRegionList()), ['alpha', 'beta'])
+      self.assertEquals(person.getRegionList(), ['beta', 'alpha'])
+      # calling a set setter did not change the default region
+      self.assertEquals(person.getDefaultRegion(), 'beta')
+
       person.setDefaultRegion('alpha')
       self.assertEquals(person.getDefaultRegion(), 'alpha')
       self.assertEquals(sorted(person.getRegionSet()), ['alpha', 'beta'])
-- 
2.30.9