summaryrefslogtreecommitdiff
path: root/odoo/addons/base/tests/test_base.py
diff options
context:
space:
mode:
authorXavier Morel <xmo@odoo.com>2019-03-14 16:14:14 +0000
committerXavier Morel <xmo@odoo.com>2019-04-02 09:57:49 +0000
commitb4ae543098edadd203b3e55e8b388c33a678c9ce (patch)
tree8fe7683f84735a26e6839dfc8d92aea33e8872ef /odoo/addons/base/tests/test_base.py
parent1fb20fe3047cf53eff258705d12319015ba96747 (diff)
[IMP] base: batching of _compute_commercial_partner
Should correctly handle / fallback to regular code when processing non-stored partners. Perf difference according to cprofile on my machine: original python: ncalls tottime percall cumtime percall filename:lineno(function) 1 0.134 0.134 205.380 205.380 res_partner.py:277(_compute_commercial_partner) SQLized 1 0.118 0.118 67.239 67.239 res_partner.py:280(_compute_commercial_partner) most of the time leftover seems to be in modified_draft
Diffstat (limited to 'odoo/addons/base/tests/test_base.py')
-rw-r--r--odoo/addons/base/tests/test_base.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/odoo/addons/base/tests/test_base.py b/odoo/addons/base/tests/test_base.py
index 5e1a24958bf..a823c65dc31 100644
--- a/odoo/addons/base/tests/test_base.py
+++ b/odoo/addons/base/tests/test_base.py
@@ -252,6 +252,41 @@ class TestBase(TransactionCase):
self.assertEqual(leaf111.address_get([]),
{'contact': branch11.id}, 'Invalid address resolution, branch11 should now be contact')
+ def test_commercial_partner_nullcompany(self):
+ """ The commercial partner is the first/nearest ancestor-or-self which
+ is a company or doesn't have a parent
+ """
+ P = self.env['res.partner']
+ p0 = P.create({'name': '0', 'email': '0'})
+ self.assertEqual(p0.commercial_partner_id, p0, "partner without a parent is their own commercial partner")
+
+ p1 = P.create({'name': '1', 'email': '1', 'parent_id': p0.id})
+ self.assertEqual(p1.commercial_partner_id, p0, "partner's parent is their commercial partner")
+ p12 = P.create({'name': '12', 'email': '12', 'parent_id': p1.id})
+ self.assertEqual(p12.commercial_partner_id, p0, "partner's GP is their commercial partner")
+
+ p2 = P.create({'name': '2', 'email': '2', 'parent_id': p0.id, 'is_company': True})
+ self.assertEqual(p2.commercial_partner_id, p2, "partner flagged as company is their own commercial partner")
+ p21 = P.create({'name': '21', 'email': '21', 'parent_id': p2.id})
+ self.assertEqual(p21.commercial_partner_id, p2, "commercial partner is closest ancestor with themselves as commercial partner")
+
+ p3 = P.create({'name': '3', 'email': '3', 'is_company': True})
+ self.assertEqual(p3.commercial_partner_id, p3, "being both parent-less and company should be the same as either")
+
+ notcompanies = p0 | p1 | p12 | p21
+ self.env.cr.execute('update res_partner set is_company=null where id = any(%s)', [notcompanies.ids])
+ for parent in notcompanies:
+ p = P.create({
+ 'name': parent.name + '_sub',
+ 'email': parent.email + '_sub',
+ 'parent_id': parent.id,
+ })
+ self.assertEqual(
+ p.commercial_partner_id,
+ parent.commercial_partner_id,
+ "check that is_company=null is properly handled when looking for ancestor"
+ )
+
def test_50_res_partner_commercial_sync(self):
res_partner = self.env['res.partner']
p0 = res_partner.create({'name': 'Sigurd Sunknife',