diff --git a/record_archiver/models/ir_model.py b/record_archiver/models/ir_model.py index a9162d1eb..8122c43a1 100644 --- a/record_archiver/models/ir_model.py +++ b/record_archiver/models/ir_model.py @@ -54,9 +54,9 @@ class IrModel(orm.Model): load='_classic_write', context=context) model_ids = [field['model_id'] for field in active_fields] - if operator == '=': + if operator == '=' or not value: domain.append(('id', 'in', model_ids)) - elif operator == '!=': + elif operator == '!=' or value: domain.append(('id', 'not in', model_ids)) else: raise AssertionError('operator %s not allowed' % operator) diff --git a/record_archiver/tests/__init__.py b/record_archiver/tests/__init__.py new file mode 100644 index 000000000..1cc4cf843 --- /dev/null +++ b/record_archiver/tests/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- + +from . import test_active_search + + +checks = [ + test_active_search, +] diff --git a/record_archiver/tests/test_active_search.py b/record_archiver/tests/test_active_search.py new file mode 100644 index 000000000..f96bb7365 --- /dev/null +++ b/record_archiver/tests/test_active_search.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# +# +# Authors: Guewen Baconnier +# Copyright 2015 Camptocamp SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# + + +import openerp.tests.common as common + + +class TestActiveSearch(common.TransactionCase): + + def test_model_with_active_field(self): + cr, uid = self.cr, self.uid + IrModel = self.registry('ir.model') + partner_model_id = IrModel.search(cr, uid, + [('model', '=', 'res.partner')], + limit=1)[0] + partner_model = IrModel.browse(cr, uid, partner_model_id) + self.assertTrue(partner_model.has_an_active_field) + self.assertIn(partner_model_id, + IrModel.search(cr, uid, + [('has_an_active_field', '=', True)])) + self.assertIn(partner_model_id, + IrModel.search(cr, uid, + [('has_an_active_field', '!=', False)])) + + def test_model_without_active_field(self): + cr, uid = self.cr, self.uid + IrModel = self.registry('ir.model') + country_model_id = IrModel.search(cr, uid, + [('model', '=', 'res.country')], + limit=1) + country_model = IrModel.browse(cr, uid, country_model_id[0]) + self.assertFalse(country_model.has_an_active_field) + self.assertNotIn(country_model_id, + IrModel.search(cr, uid, + [('has_an_active_field', '=', False)])) + self.assertNotIn(country_model_id, + IrModel.search(cr, uid, + [('has_an_active_field', '!=', True)]))