[FIX] In new records *2many, enable to handle multiple RPC inputs
closes odoo/odoo#24458 Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from openerp.tests.common import TransactionCase
|
from odoo.tests.common import TransactionCase
|
||||||
|
|
||||||
|
|
||||||
class One2manyCase(TransactionCase):
|
class One2manyCase(TransactionCase):
|
||||||
@@ -51,6 +51,8 @@ class One2manyCase(TransactionCase):
|
|||||||
self.multi.lines = self.multi.lines[:-1]
|
self.multi.lines = self.multi.lines[:-1]
|
||||||
self.assertEqual(len(self.multi.lines), 9)
|
self.assertEqual(len(self.multi.lines), 9)
|
||||||
self.assertIn("hello", self.multi.lines.mapped('name'))
|
self.assertIn("hello", self.multi.lines.mapped('name'))
|
||||||
|
if not self.multi.id:
|
||||||
|
return
|
||||||
# Invalidate the cache and check again; this crashes if the value
|
# Invalidate the cache and check again; this crashes if the value
|
||||||
# of self.multi.lines in cache contains new records
|
# of self.multi.lines in cache contains new records
|
||||||
self.multi.invalidate_cache()
|
self.multi.invalidate_cache()
|
||||||
@@ -89,11 +91,26 @@ class One2manyCase(TransactionCase):
|
|||||||
self.multi.lines = [(0, 0, {"name": str(name)})]
|
self.multi.lines = [(0, 0, {"name": str(name)})]
|
||||||
self.operations()
|
self.operations()
|
||||||
|
|
||||||
|
def test_rpcstyle_one_by_one_on_new(self):
|
||||||
|
self.multi = self.env["test_new_api.multi"].new({
|
||||||
|
"name": "What is up?"
|
||||||
|
})
|
||||||
|
for name in range(10):
|
||||||
|
self.multi.lines = [(0, 0, {"name": str(name)})]
|
||||||
|
self.operations()
|
||||||
|
|
||||||
def test_rpcstyle_single(self):
|
def test_rpcstyle_single(self):
|
||||||
"""Check lines created with RPC style and added in one step"""
|
"""Check lines created with RPC style and added in one step"""
|
||||||
self.multi.lines = [(0, 0, {'name': str(name)}) for name in range(10)]
|
self.multi.lines = [(0, 0, {'name': str(name)}) for name in range(10)]
|
||||||
self.operations()
|
self.operations()
|
||||||
|
|
||||||
|
def test_rpcstyle_single_on_new(self):
|
||||||
|
self.multi = self.env["test_new_api.multi"].new({
|
||||||
|
"name": "What is up?"
|
||||||
|
})
|
||||||
|
self.multi.lines = [(0, 0, {'name': str(name)}) for name in range(10)]
|
||||||
|
self.operations()
|
||||||
|
|
||||||
def test_many2one_integer(self):
|
def test_many2one_integer(self):
|
||||||
"""Test several models one2many with same inverse Integer field"""
|
"""Test several models one2many with same inverse Integer field"""
|
||||||
# utility function to convert records to tuples with id,name
|
# utility function to convert records to tuples with id,name
|
||||||
|
|||||||
+2
-2
@@ -2080,8 +2080,8 @@ class _RelationalMulti(_Relational):
|
|||||||
elif isinstance(value, (list, tuple)):
|
elif isinstance(value, (list, tuple)):
|
||||||
# value is a list/tuple of commands, dicts or record ids
|
# value is a list/tuple of commands, dicts or record ids
|
||||||
comodel = record.env[self.comodel_name]
|
comodel = record.env[self.comodel_name]
|
||||||
# determine the value ids; by convention empty on new records
|
# determine the value ids
|
||||||
ids = OrderedSet(record[self.name].ids if record.id else ())
|
ids = OrderedSet(record[self.name]._ids)
|
||||||
# modify ids with the commands
|
# modify ids with the commands
|
||||||
for command in value:
|
for command in value:
|
||||||
if isinstance(command, (tuple, list)):
|
if isinstance(command, (tuple, list)):
|
||||||
|
|||||||
Reference in New Issue
Block a user