diff options
| author | Vo Minh Thu <vmt@openerp.com> | 2011-05-23 14:09:40 +0200 |
|---|---|---|
| committer | Vo Minh Thu <vmt@openerp.com> | 2011-05-23 14:09:40 +0200 |
| commit | 5238385e6a0b8e8bfc2963759dc3fd6036dfdade (patch) | |
| tree | 650ce3131d7992622e3e9bbfeaaaadda95a82ab5 | |
| parent | 5ee4348ce7473a69509de36a51913ea0e8b7fb41 (diff) | |
| parent | b9b3251af54c455fb031c6f1d7ce944e96344e09 (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__.py | 3 | ||||
| -rw-r--r-- | openerp/addons/base/ir/ir_values.py | 11 | ||||
| -rw-r--r-- | openerp/addons/base/test/test_ir_values.yml | 25 |
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." |
