From d82ffb87289547c8f9013d3f8bebadfe17e16374 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 27 May 2014 11:49:26 +0200 Subject: [PATCH] [ADD] application field & check during inheriting views read --- openerp/addons/base/ir/ir_ui_view.py | 15 ++++++- openerp/addons/base/tests/test_views.py | 59 ++++++++++++++++++++++--- 2 files changed, 66 insertions(+), 8 deletions(-) diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index 2e568808b70..d006b02705c 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -146,9 +146,18 @@ class view(osv.osv): [('primary', "Base view"), ('extension', "Extension View")], string="View inheritance mode", required=True), + + 'application': fields.selection([ + ('always', "Always applied"), + ('enabled', "Optional, enabled"), + ('disabled', "Optional, disabled"), + ], required=True, string="If this view is inherited, whether it can be" + " toggled off, and whether it is currently" + " enabled"), } _defaults = { 'mode': 'primary', + 'application': 'always', 'priority': 16, } _order = "priority,name" @@ -304,7 +313,11 @@ class view(osv.osv): user = self.pool['res.users'].browse(cr, 1, uid, context=context) user_groups = frozenset(user.groups_id or ()) - conditions = [['inherit_id', '=', view_id], ['model', '=', model]] + conditions = [ + ['inherit_id', '=', view_id], + ['model', '=', model], + ['application', 'in', ['always', 'enabled']], + ] if self.pool._init: # Module init currently in progress, only consider views from # modules whose code is already loaded diff --git a/openerp/addons/base/tests/test_views.py b/openerp/addons/base/tests/test_views.py index 9da162a7e5c..a098b9438ac 100644 --- a/openerp/addons/base/tests/test_views.py +++ b/openerp/addons/base/tests/test_views.py @@ -22,6 +22,13 @@ class ViewCase(common.TransactionCase): def create(self, value, context=None): return self.Views.create(self.cr, self.uid, value, context=context) + def read_combined(self, id): + return self.Views.read_combined( + self.cr, self.uid, + id, ['arch'], + context={'check_view_ids': self.Views.search(self.cr, self.uid, [])} + ) + def assertTreesEqual(self, n1, n2, msg=None): self.assertEqual(n1.tag, n2.tag, msg) self.assertEqual((n1.text or '').strip(), (n2.text or '').strip(), msg) @@ -629,6 +636,7 @@ class test_views(ViewCase): """Insert view into database via a query to passtrough validation""" kw.pop('id', None) kw.setdefault('mode', 'extension' if kw.get('inherit_id') else 'primary') + kw.setdefault('application', 'always') keys = sorted(kw.keys()) fields = ','.join('"%s"' % (k.replace('"', r'\"'),) for k in keys) @@ -999,13 +1007,6 @@ class TestViewCombined(ViewCase): 'arch': '' }) - def read_combined(self, id): - return self.Views.read_combined( - self.cr, self.uid, - id, ['arch'], - context={'check_view_ids': self.Views.search(self.cr, self.uid, [])} - ) - def test_basic_read(self): arch = self.read_combined(self.a1)['arch'] self.assertEqual( @@ -1052,6 +1053,50 @@ class TestViewCombined(ViewCase): E.a2(), ), arch) +class TestOptionalViews(ViewCase): + """ + Tests ability to enable/disable inherited views, formerly known as + inherit_option_id + """ + + def setUp(self): + super(TestOptionalViews, self).setUp() + self.v0 = self.create({ + 'model': 'a', + 'arch': '', + }) + self.v1 = self.create({ + 'model': 'a', + 'inherit_id': self.v0, + 'application': 'always', + 'arch': '', + }) + self.v2 = self.create({ + 'model': 'a', + 'inherit_id': self.v0, + 'application': 'enabled', + 'arch': '', + }) + self.v3 = self.create({ + 'model': 'a', + 'inherit_id': self.v0, + 'application': 'disabled', + 'arch': '' + }) + + def test_applied(self): + """ mandatory and enabled views should be applied + """ + arch = self.read_combined(self.v0)['arch'] + self.assertEqual( + ET.fromstring(arch), + E.qweb( + E.base(), + E.v1(), + E.v2(), + ) + ) + class TestXPathExtentions(common.BaseCase): def test_hasclass(self): tree = E.node(