# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo.tests import common class PartnerContactInSeveralCompaniesCase(common.TransactionCase): def setUp(self): """*****setUp*****""" super(PartnerContactInSeveralCompaniesCase, self).setUp() self.partner = self.env['res.partner'] self.action = self.env['ir.actions.act_window'] current_module = 'partner_contact_in_several_companies' # Get test records reference self.main_partner = self.env.ref('base.main_partner') self.bob_contact = self.env.ref( '%s.res_partner_contact1' % current_module) self.bob_job1 = self.env.ref( '%s.res_partner_contact1_work_position1' % current_module) self.roger_contact = self.env.ref('base.res_partner_main2') self.roger_job2 = self.env.ref( '%s.res_partner_main2_position_consultant' % current_module) def test_00_show_only_standalone_contact(self): """Check that only standalone contact are shown if context explicitly state to not display all positions """ ctx = {'search_show_all_positions': {'is_set': True, 'set_value': False }} partner_ids = self.partner.with_context(ctx).search([]) self.assertTrue(self.bob_job1 not in partner_ids) self.assertTrue(self.roger_job2 not in partner_ids) def test_01_show_all_positions(self): """Check that all contact are show if context is empty or explicitly state to display all positions or the "is_set" value has been set to False. """ partner_ids = self.partner.search([]) self.assertTrue(self.bob_job1 in partner_ids) self.assertTrue(self.roger_job2 in partner_ids) ctx = {'search_show_all_positions': {'is_set': False}} partner_ids = self.partner.with_context(ctx).search([]) self.assertTrue(self.bob_job1 in partner_ids) self.assertTrue(self.roger_job2 in partner_ids) ctx = {'search_show_all_positions': {'is_set': True, 'set_value': True }} partner_ids = self.partner.with_context(ctx).search([]) self.assertTrue(self.bob_job1 in partner_ids) self.assertTrue(self.roger_job2 in partner_ids) def test_02_reading_other_contact_one2many_show_all_positions(self): """Check that readonly partner's ``other_contact_ids`` return all values whatever the context """ ctx = {} self.assertEqual( self.bob_job1, self.bob_contact.with_context(ctx).other_contact_ids ) ctx = {'search_show_all_positions': {'is_set': False}} self.assertEqual( self.bob_job1, self.bob_contact.with_context(ctx).other_contact_ids ) ctx = {'search_show_all_positions': {'is_set': True, 'set_value': False, }} self.assertEqual( self.bob_job1, self.bob_contact.with_context(ctx).other_contact_ids ) ctx = {'search_show_all_positions': {'is_set': True, 'set_value': True, }} self.assertEqual( self.bob_job1, self.bob_contact.with_context(ctx).other_contact_ids ) ctx = {} self.assertIn( self.bob_job1, self.main_partner.with_context(ctx).child_ids) ctx = {'search_show_all_positions': {'is_set': False}} self.assertIn( self.bob_job1, self.main_partner.with_context(ctx).child_ids) ctx = {'search_show_all_positions': {'is_set': True, 'set_value': False, }} self.assertIn( self.bob_job1, self.main_partner.with_context(ctx).child_ids) ctx = {'search_show_all_positions': {'is_set': True, 'set_value': True, }} self.assertIn( self.bob_job1, self.main_partner.with_context(ctx).child_ids) def test_03_search_match_attached_contacts(self): """Check that searching partner also return partners having attached contacts matching search criteria """ # Bob's contact has one other position which is related to # 'YourCompany' # so search for all contacts working for 'YourCompany' # should contain Bob position. partner_ids = self.partner.search( [('parent_id', 'ilike', 'YourCompany')]) self.assertTrue(self.bob_job1 in partner_ids) # but when searching without 'all positions', # we should get the position standalone contact instead. ctx = {'search_show_all_positions': {'is_set': True, 'set_value': False, }} partner_ids = self.partner.with_context(ctx).search( [('parent_id', 'ilike', 'YourCompany')]) self.assertTrue(self.bob_contact in partner_ids) def test_04_contact_creation(self): """Check that we're begin to create a contact""" # Create a contact using only name new_contact = self.partner.create({'name': 'Bob Egnops'}) self.assertEqual( new_contact.contact_type, 'standalone', ) # Create a contact with only contact_id new_contact = self.partner.create( {'contact_id': self.bob_contact.id} ) self.assertEqual(new_contact.name, 'Bob Egnops') self.assertEqual(new_contact.contact_type, 'attached') # Create a contact with both contact_id and name; # contact's name should override provided value in that case new_contact = self.partner.create( {'contact_id': self.bob_contact.id, 'name': 'Rob Egnops'} ) self.assertEqual( new_contact.name, 'Bob Egnops' ) # Reset contact to standalone new_contact.write({'contact_id': False}) self.assertEqual( new_contact.contact_type, 'standalone', ) # Reset contact to attached, and ensure only it is unlinked (i.e. # context is ignored). new_contact.write({'contact_id': self.bob_contact.id}) ctx = {'search_show_all_positions': {'is_set': True, 'set_value': True }} new_contact.with_context(ctx).unlink() partner_ids = self.partner.with_context(ctx).search( [('id', 'in', [new_contact.id, self.bob_contact.id])]) self.assertIn(self.bob_contact, partner_ids) self.assertNotIn(new_contact, partner_ids) def test_05_contact_fields_sync(self): """Check that contact's fields are correctly synced between parent contact or related contacts """ # Test DOWNSTREAM sync self.bob_contact.write( {'name': 'Rob Egnops'} ) self.assertEqual( self.bob_job1.name, 'Rob Egnops', ) # Test UPSTREAM sync self.bob_job1.write({'name': 'Bob Egnops'}) self.assertEqual( self.bob_contact.name, 'Bob Egnops', ) def test_06_ir_action(self): """Check ir_action context is auto updated. """ new_context_val = "'search_show_all_positions': " \ "{'is_set': True, 'set_value': False}" details = self.env['ir.actions.act_window'].for_xml_id( 'base', 'action_partner_form') self.assertIn( new_context_val, details['context'], msg='Default actions not updated with new context' ) details = self.env['ir.actions.act_window'].for_xml_id( 'partner_contact_in_several_companies', 'action_partner_form') self.assertNotIn( new_context_val, details['context'], msg='Custom actions incorrectly updated with new context' ) def test_07_onchange(self): """Check onchange method """ new_contact = self.partner.create({'name': 'Bob before onchange'}) new_contact.write({'contact_id': self.bob_contact.id}) new_contact._onchange_contact_id() self.assertEqual( new_contact.name, 'Bob Egnops', ) new_contact.write({'contact_type': 'standalone'}) new_contact._onchange_contact_type() self.assertEqual( new_contact.contact_id, self.partner, ) def test_08_commercial_partner_compute(self): new_contact = self.partner.create({'name': 'Bob before onchange'}) new_contact.write({'contact_id': self.bob_contact.id, 'parent_id': False}) new_contact._compute_commercial_partner() self.assertEqual( new_contact.commercial_partner_id, self.bob_contact, )