summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVo Minh Thu <vmt@openerp.com>2011-05-23 14:09:40 +0200
committerVo Minh Thu <vmt@openerp.com>2011-05-23 14:09:40 +0200
commit5238385e6a0b8e8bfc2963759dc3fd6036dfdade (patch)
tree650ce3131d7992622e3e9bbfeaaaadda95a82ab5
parent5ee4348ce7473a69509de36a51913ea0e8b7fb41 (diff)
parentb9b3251af54c455fb031c6f1d7ce944e96344e09 (diff)
[MERGE] ir.values: make sure we return the user-specific default value.
bzr revid: vmt@openerp.com-20110523120940-9kgn9wxkzwbymrso
-rw-r--r--openerp/addons/base/__openerp__.py3
-rw-r--r--openerp/addons/base/ir/ir_values.py11
-rw-r--r--openerp/addons/base/test/test_ir_values.yml25
3 files changed, 36 insertions, 3 deletions
diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py
index 1b7cf5de5f2..75e0a8c56d0 100644
--- a/openerp/addons/base/__openerp__.py
+++ b/openerp/addons/base/__openerp__.py
@@ -94,7 +94,8 @@
'test/bug_lp541545.xml',
'test/test_osv_expression.yml',
'test/test_ir_rule.yml', # <-- These tests modify/add/delete ir_rules.
- 'test/test_config_users.yml'
+ 'test/test_config_users.yml',
+ 'test/test_ir_values.yml',
],
'installable': True,
'active': True,
diff --git a/openerp/addons/base/ir/ir_values.py b/openerp/addons/base/ir/ir_values.py
index 79b1b5e338c..68a5576c25a 100644
--- a/openerp/addons/base/ir/ir_values.py
+++ b/openerp/addons/base/ir/ir_values.py
@@ -172,8 +172,15 @@ class ir_values(osv.osv):
else:
where.append('res_id=%s')
params.append(res_id)
-
- where.append('(user_id=%s or (user_id IS NULL)) order by id')
+ order = 'id'
+ if key == 'default':
+ # Make sure we get first the values for specific users, then
+ # the global values. The map/filter below will retain the first
+ # value for any given name. The 'order by' will put the null
+ # values last; this may be postgres specific (it is the
+ # behavior in postgres at least since 8.2).
+ order = 'user_id'
+ where.append('(user_id=%s or (user_id IS NULL)) order by '+ order)
params.append(uid)
clause = ' and '.join(where)
cr.execute('select id,name,value,object,meta, key from ir_values where ' + clause, params)
diff --git a/openerp/addons/base/test/test_ir_values.yml b/openerp/addons/base/test/test_ir_values.yml
new file mode 100644
index 00000000000..b4c08db31ff
--- /dev/null
+++ b/openerp/addons/base/test/test_ir_values.yml
@@ -0,0 +1,25 @@
+-
+ Create some default value for some (non-existing) model, for all users.
+-
+ !python {model: ir.values }: |
+ self.set(cr, uid, 'default', False, 'my_test_ir_value',['unexisting_model'], 'global value')
+-
+ Retrieve it.
+-
+ !python {model: ir.values }: |
+ # d is a list of triple (id, name, value)
+ d = self.get(cr, uid, 'default', False, ['unexisting_model'])
+ assert d[0][1] == u'my_test_ir_value', "Can't retrieve the created default value."
+ assert d[0][2] == 'global value', "Can't retrieve the created default value."
+-
+ Do it again but for a specific user.
+-
+ !python {model: ir.values }: |
+ self.set(cr, uid, 'default', False, 'my_test_ir_value',['unexisting_model'], 'specific value', preserve_user=True)
+-
+ Retrieve it and check it is the one for the current user.
+-
+ !python {model: ir.values }: |
+ d = self.get(cr, uid, 'default', False, ['unexisting_model'])
+ assert d[0][1] == u'my_test_ir_value', "Can't retrieve the created default value."
+ assert d[0][2] == 'specific value', "Can't retrieve the created default value."