You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

247 lines
9.2 KiB

# 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,
)