From 192c444463963583c72da8819bd385130a070636 Mon Sep 17 00:00:00 2001 From: Ronald Portier Date: Sat, 24 Nov 2018 18:46:35 +0100 Subject: [PATCH] [IMP] partner_multi_relation_tabs. Forward to 100% coverage. --- .../demo/res_partner_category_demo.xml | 4 +++ .../demo/res_partner_demo.xml | 20 +++++++++++ .../demo/res_partner_relation_demo.xml | 21 +++++++++++- .../demo/res_partner_relation_type_demo.xml | 11 +++++++ .../demo/res_partner_tab_demo.xml | 10 ++++++ .../models/res_partner.py | 2 +- .../models/res_partner_relation_all.py | 11 +++---- partner_multi_relation_tabs/tests/common.py | 4 +++ .../tests/test_partner_tabs.py | 33 +++++++++++++++++++ partner_multi_relation_tabs/tests/test_tab.py | 15 +++++++-- 10 files changed, 120 insertions(+), 11 deletions(-) diff --git a/partner_multi_relation_tabs/demo/res_partner_category_demo.xml b/partner_multi_relation_tabs/demo/res_partner_category_demo.xml index ad02d7fb7..abbcb2d47 100644 --- a/partner_multi_relation_tabs/demo/res_partner_category_demo.xml +++ b/partner_multi_relation_tabs/demo/res_partner_category_demo.xml @@ -10,4 +10,8 @@ Functionary + + Department + + diff --git a/partner_multi_relation_tabs/demo/res_partner_demo.xml b/partner_multi_relation_tabs/demo/res_partner_demo.xml index e59740e7e..08838cc96 100644 --- a/partner_multi_relation_tabs/demo/res_partner_demo.xml +++ b/partner_multi_relation_tabs/demo/res_partner_demo.xml @@ -25,4 +25,24 @@ HS + + + Programming + 1 + HACKDEP + + + + + Helpdesk + 1 + HELPDEP + + diff --git a/partner_multi_relation_tabs/demo/res_partner_relation_demo.xml b/partner_multi_relation_tabs/demo/res_partner_relation_demo.xml index 92d8531ab..afd54e7d0 100644 --- a/partner_multi_relation_tabs/demo/res_partner_relation_demo.xml +++ b/partner_multi_relation_tabs/demo/res_partner_relation_demo.xml @@ -1,11 +1,30 @@ - + + + + + + + + + + + + + + diff --git a/partner_multi_relation_tabs/demo/res_partner_relation_type_demo.xml b/partner_multi_relation_tabs/demo/res_partner_relation_type_demo.xml index 80e96a6a1..540df4f25 100644 --- a/partner_multi_relation_tabs/demo/res_partner_relation_type_demo.xml +++ b/partner_multi_relation_tabs/demo/res_partner_relation_type_demo.xml @@ -27,4 +27,15 @@ + + + has department + is department of + + c + + + diff --git a/partner_multi_relation_tabs/demo/res_partner_tab_demo.xml b/partner_multi_relation_tabs/demo/res_partner_tab_demo.xml index 9c6b1da7b..708b9dc50 100644 --- a/partner_multi_relation_tabs/demo/res_partner_tab_demo.xml +++ b/partner_multi_relation_tabs/demo/res_partner_tab_demo.xml @@ -21,4 +21,14 @@ + + + departments + Our departments + + + diff --git a/partner_multi_relation_tabs/models/res_partner.py b/partner_multi_relation_tabs/models/res_partner.py index ef1db30b7..d8c969d7f 100644 --- a/partner_multi_relation_tabs/models/res_partner.py +++ b/partner_multi_relation_tabs/models/res_partner.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2014-2018 Therp BV +# Copyright 2014-2018 Therp BV . # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # pylint: disable=no-member import logging diff --git a/partner_multi_relation_tabs/models/res_partner_relation_all.py b/partner_multi_relation_tabs/models/res_partner_relation_all.py index 6cd2bf4c9..40f9de298 100644 --- a/partner_multi_relation_tabs/models/res_partner_relation_all.py +++ b/partner_multi_relation_tabs/models/res_partner_relation_all.py @@ -48,11 +48,10 @@ class ResPartnerRelationAll(models.AbstractModel): # pylint: disable=no-member result = super(ResPartnerRelationAll, self).onchange_partner_id() if 'default_tab_id' in self.env.context: - if 'domain' not in result: - result['domain'] = {} - if 'type_selection_id' not in result['domain']: - result['domain']['type_selection_id'] = [] - selection_domain = result['domain']['type_selection_id'] - selection_domain.append( + result['domain'] = result['domain'] if 'domain' in result else {} + result['domain']['type_selection_id'] = \ + result['domain']['type_selection_id'] \ + if 'type_selection_id' in result['domain'] else {} + result['domain']['type_selection_id'].append( ('tab_id', '=', self.env.context['default_tab_id'])) return result diff --git a/partner_multi_relation_tabs/tests/common.py b/partner_multi_relation_tabs/tests/common.py index d9f876c39..5e43db29b 100644 --- a/partner_multi_relation_tabs/tests/common.py +++ b/partner_multi_relation_tabs/tests/common.py @@ -21,6 +21,8 @@ class TestCommon(common.SingleTransactionCase): 'partner_multi_relation_tabs.category_government') self.category_functionary = self.env.ref( 'partner_multi_relation_tabs.category_functionary') + self.category_department = self.env.ref( + 'partner_multi_relation_tabs.category_department') # Tabs. self.tab_committee = self.env.ref( 'partner_multi_relation_tabs.tab_committee') @@ -28,6 +30,8 @@ class TestCommon(common.SingleTransactionCase): 'partner_multi_relation_tabs.tab_board') self.tab_positions = self.env.ref( 'partner_multi_relation_tabs.tab_positions') + self.tab_departments = self.env.ref( + 'partner_multi_relation_tabs.tab_departments') # Types. self.type_chairperson = self.env.ref( 'partner_multi_relation_tabs' diff --git a/partner_multi_relation_tabs/tests/test_partner_tabs.py b/partner_multi_relation_tabs/tests/test_partner_tabs.py index 49391bb93..0bdbb8cc6 100644 --- a/partner_multi_relation_tabs/tests/test_partner_tabs.py +++ b/partner_multi_relation_tabs/tests/test_partner_tabs.py @@ -42,6 +42,13 @@ class TestPartnerTabs(common.TestCommon): 'Tab field %s should not exist in %s.' % (fieldname, etree.tostring(tree))) + def test_view_without_pages(self): + """Check that _add_tab_pages does not effect view without pages.""" + # pylint: disable=protected-access + view = etree.Element('view') + extra_fields = self.partner_model._add_tab_pages(view) + self.assertFalse(extra_fields) + def test_tab_modifications(self): tab_executive = self.tab_model.create({ 'code': 'executive', @@ -73,6 +80,13 @@ class TestPartnerTabs(common.TestCommon): self.assertEqual( type_chairperson.tab_left_id.id, False) + # It should not be possible to add category or contact type to as + # selection criteria to a tab meant for specific partners. + with self.assertRaises(ValidationError): + self.tab_departments.write({'contact_type': 'c'}) + with self.assertRaises(ValidationError): + self.tab_departments.write({ + 'partner_category_id': self.category_government.id}) def test_type_modifications(self): self.assertTrue(bool(self.tab_board)) @@ -123,3 +137,22 @@ class TestPartnerTabs(common.TestCommon): self.assertEqual( onchange_result['domain']['type_selection_id'][-1], ('tab_id', '=', self.tab_board.id)) + + def test_compute_visibility(self): + """Check the computation of visibility on partners.""" + # pylint: disable=protected-access + main_partner = self.env.ref('base.main_partner') + main_partner._compute_tabs_visibility() + tab_obj = Tab(self.tab_departments) + fieldname = tab_obj.get_fieldname() + visible_fieldname = tab_obj.get_visible_fieldname() + self.assertIn(visible_fieldname, main_partner._fields) + self.assertIn(fieldname, main_partner._fields) + self.assertEqual(main_partner[visible_fieldname], True) + department_relations = main_partner[fieldname] + self.assertTrue(len(department_relations) >= 1) + departments = [ + relation.other_partner_id for relation in department_relations] + for department in departments: + self.assertIn( + self.category_department, department.category_id) diff --git a/partner_multi_relation_tabs/tests/test_tab.py b/partner_multi_relation_tabs/tests/test_tab.py index e5b746d5d..276411dbc 100644 --- a/partner_multi_relation_tabs/tests/test_tab.py +++ b/partner_multi_relation_tabs/tests/test_tab.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- # Copyright 2018 Therp BV . # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -# pylint: disable=protected-access from . import common from ..tablib import Tab @@ -25,7 +24,17 @@ class TestTab(common.TestCommon): tab_obj = Tab(self.tab_positions) self.assertTrue( tab_obj.compute_visibility(self.partner_important_person), - 'Board tab should be visible for functionary.') + 'Positions tab should be visible for functionary.') self.assertFalse( tab_obj.compute_visibility(self.partner_common_person), - 'Board tab should not be visible for non-functionary.') + 'Positions tab should not be visible for non-functionary.') + # Tab for departments should only be visible for main partner + self.assertTrue(bool(self.tab_departments)) + self.assertTrue(bool(self.partner_big_company)) + tab_obj = Tab(self.tab_departments) + self.assertTrue( + tab_obj.compute_visibility(self.env.ref('base.main_partner')), + 'Department tab should be visible for main partner.') + self.assertFalse( + tab_obj.compute_visibility(self.partner_big_company), + 'Department tab should not be visible for other partners.')