|
19 | 19 | from odoo.tools.safe_eval import safe_eval
|
20 | 20 |
|
21 | 21 | from odoo.addons.base.maintenance.migrations import util
|
22 |
| -from odoo.addons.base.maintenance.migrations.testing import UnitTestCase, parametrize |
| 22 | +from odoo.addons.base.maintenance.migrations.testing import ( |
| 23 | + UnitTestCase, |
| 24 | + add_test_trigger, |
| 25 | + drop_test_trigger, |
| 26 | + parametrize, |
| 27 | +) |
23 | 28 | from odoo.addons.base.maintenance.migrations.util import snippets
|
24 | 29 | from odoo.addons.base.maintenance.migrations.util.domains import (
|
25 | 30 | FALSE_LEAF,
|
@@ -1364,6 +1369,59 @@ def test_replace_record_references_batch__uniqueness(self):
|
1364 | 1369 | [count] = self.env.cr.fetchone()
|
1365 | 1370 | self.assertEqual(count, 1)
|
1366 | 1371 |
|
| 1372 | + @unittest.skipUnless(util.version_gte("18.0"), "Only work on Odoo >= 18") |
| 1373 | + def test_replace_record_references_batch__company_dependent(self): |
| 1374 | + partner_model = self.env["ir.model"].search([("model", "=", "res.partner")]) |
| 1375 | + self.env["ir.model.fields"].create( |
| 1376 | + { |
| 1377 | + "name": "x_test_curr", |
| 1378 | + "ttype": "many2one", |
| 1379 | + "model_id": partner_model.id, |
| 1380 | + "relation": "res.currency", |
| 1381 | + "company_dependent": True, |
| 1382 | + } |
| 1383 | + ) |
| 1384 | + c1 = self.env["res.currency"].create({"name": "RC1", "symbol": "RC1"}) |
| 1385 | + c2 = self.env["res.currency"].create({"name": "RC2", "symbol": "RC2"}) |
| 1386 | + c3 = self.env["res.currency"].create({"name": "RC3", "symbol": "RC3"}) |
| 1387 | + c4 = self.env["res.currency"].create({"name": "RC4", "symbol": "RC4"}) |
| 1388 | + |
| 1389 | + p1 = self.env["res.partner"].create({"name": "Captain Jack"}) |
| 1390 | + p2 = self.env["res.partner"].create({"name": "River Song"}) |
| 1391 | + p3 = self.env["res.partner"].create({"name": "Donna Noble"}) |
| 1392 | + |
| 1393 | + old = { |
| 1394 | + p1.id: f'{{"1":{c1.id}, "2":{c2.id}, "3":null}}', |
| 1395 | + p2.id: f'{{"1":{c1.id}, "2":{c2.id}, "3":{c3.id}, "4":{c4.id}}}', |
| 1396 | + p3.id: f'{{"1":{c4.id}}}', |
| 1397 | + } |
| 1398 | + for id, value in old.items(): |
| 1399 | + self.env.cr.execute( |
| 1400 | + """ |
| 1401 | + UPDATE res_partner |
| 1402 | + SET x_test_curr = %s |
| 1403 | + WHERE id = %s |
| 1404 | + """, |
| 1405 | + [value, id], |
| 1406 | + ) |
| 1407 | + mapping = { |
| 1408 | + c1.id: c2.id, |
| 1409 | + c2.id: c3.id, |
| 1410 | + c3.id: c1.id, |
| 1411 | + } |
| 1412 | + add_test_trigger(self.env.cr, "replace_record_references", "res_partner", "UPDATE", f"new.id = {p3.id}") |
| 1413 | + util.replace_record_references_batch(self.env.cr, mapping, "res.currency") |
| 1414 | + new = { |
| 1415 | + p1.id: {"1": c2.id, "2": c3.id, "3": None}, |
| 1416 | + p2.id: {"1": c2.id, "2": c3.id, "3": c1.id, "4": c4.id}, |
| 1417 | + p3.id: {"1": c4.id}, |
| 1418 | + } |
| 1419 | + self.env.cr.execute("SELECT id, x_test_curr FROM res_partner WHERE id IN %s", [(p1.id, p2.id)]) |
| 1420 | + for id, currencies in self.env.cr.fetchall(): |
| 1421 | + expected = new[id] |
| 1422 | + self.assertEqual(currencies, expected) |
| 1423 | + drop_test_trigger(self.env.cr, "replace_record_references", "res_partner") |
| 1424 | + |
1367 | 1425 | def _prepare_test_delete_unused(self):
|
1368 | 1426 | def create_cat():
|
1369 | 1427 | name = f"test_{uuid.uuid4().hex}"
|
|
0 commit comments