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.
196 lines
8.1 KiB
196 lines
8.1 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.ref("base.action_partner_form").read()[0]
|
|
|
|
self.assertIn(
|
|
new_context_val,
|
|
details["context"],
|
|
msg="Default actions not updated with new context",
|
|
)
|
|
|
|
details = self.env.ref(
|
|
"partner_contact_in_several_companies.action_partner_form"
|
|
).read()[0]
|
|
|
|
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,
|
|
)
|