We make the assignation twice if any field has a context defined. This ensures that the context will be evaluated with all initialized values when the target records will be instantiated. issue8586 review282041002
147 lines
4.2 KiB
Python
147 lines
4.2 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of this
|
|
# repository contains the full copyright notices and license terms.
|
|
|
|
import unittest
|
|
|
|
from trytond.pool import Pool
|
|
from trytond.tests.test_tryton import activate_module, with_transaction
|
|
|
|
|
|
class ModelTestCase(unittest.TestCase):
|
|
'Test Model'
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
activate_module('tests')
|
|
|
|
@with_transaction()
|
|
def test_repr(self):
|
|
'Test repr'
|
|
pool = Pool()
|
|
Model = pool.get('test.model')
|
|
|
|
record = Model(name='foo')
|
|
self.assertEqual(
|
|
repr(record), "Pool().get('test.model')(**{'name': 'foo'})")
|
|
|
|
record.save()
|
|
self.assertEqual(
|
|
repr(record), "Pool().get('test.model')(%s)" % record.id)
|
|
|
|
@with_transaction()
|
|
def test_init_parent(self):
|
|
"Test __init__ with _parent_"
|
|
pool = Pool()
|
|
Model = pool.get('test.model_child')
|
|
|
|
values = {
|
|
'_parent_parent.name': "Test",
|
|
}
|
|
record = Model(**values)
|
|
|
|
self.assertEqual(record.parent.name, "Test")
|
|
|
|
@with_transaction()
|
|
def test_init_parent_parent(self):
|
|
"Test __init__ with _parent_._parent_"
|
|
pool = Pool()
|
|
Model = pool.get('test.model_child_child')
|
|
|
|
values = {
|
|
'_parent_parent.name': "Test 1",
|
|
'_parent_parent._parent_parent.name': "Test 2",
|
|
}
|
|
record = Model(**values)
|
|
|
|
self.assertEqual(record.parent.name, "Test 1")
|
|
self.assertEqual(record.parent.parent.name, "Test 2")
|
|
|
|
@with_transaction()
|
|
def test_init_context(self):
|
|
"Test __init__ for field with context"
|
|
pool = Pool()
|
|
Model = pool.get('test.model')
|
|
ModelContext = pool.get('test.model_context')
|
|
|
|
target, = Model.create([{'name': "Test Context"}])
|
|
# The dictionary order is important
|
|
values = {
|
|
'target': target.id,
|
|
'name': "foo",
|
|
}
|
|
record = ModelContext(**values)
|
|
|
|
self.assertEqual(record.target._context, {'name': "foo"})
|
|
|
|
@with_transaction()
|
|
def test_init_parent_context(self):
|
|
"Test __init__ with _parent for field with context"
|
|
pool = Pool()
|
|
ModelContext = pool.get('test.model_context')
|
|
|
|
# The dictionary order is important
|
|
values = {
|
|
'_parent_target.name': "Test Context",
|
|
'name': "foo",
|
|
}
|
|
record = ModelContext(**values)
|
|
|
|
self.assertEqual(record.target._context, {'name': "foo"})
|
|
|
|
@with_transaction()
|
|
def test_init_context_parent(self):
|
|
"Test __init__ for field with context from _parent"
|
|
pool = Pool()
|
|
Model = pool.get('test.model')
|
|
ModelContext = pool.get('test.model_context_parent')
|
|
|
|
target, = Model.create([{'name': "Test Context"}])
|
|
# The dictionary order is important
|
|
values = {
|
|
'target': target.id,
|
|
'_parent_parent.name': "bar",
|
|
}
|
|
record = ModelContext(**values)
|
|
|
|
self.assertEqual(record.target._context, {'name': "bar"})
|
|
|
|
@with_transaction()
|
|
def test_init_parent_context_parent(self):
|
|
"Test __init__ with _parent for field with context from _parent"
|
|
pool = Pool()
|
|
ModelContext = pool.get('test.model_context_parent')
|
|
|
|
# The dictionary order is important
|
|
values = {
|
|
'_parent_target.name': "Test Context",
|
|
'_parent_parent.name': "bar",
|
|
}
|
|
record = ModelContext(**values)
|
|
|
|
self.assertEqual(record.parent.name, "bar")
|
|
self.assertEqual(record.target._context, {'name': "bar"})
|
|
|
|
@with_transaction()
|
|
def test_names_model(self):
|
|
"Test __names__ for model only"
|
|
pool = Pool()
|
|
Model = pool.get('test.model')
|
|
|
|
names = Model.__names__()
|
|
|
|
self.assertEqual(names, {'model': "Model"})
|
|
|
|
@with_transaction()
|
|
def test_names_field(self):
|
|
"Test __names__ with field"
|
|
pool = Pool()
|
|
Model = pool.get('test.model')
|
|
|
|
names = Model.__names__('name')
|
|
|
|
self.assertEqual(names, {'model': "Model", 'field': "Name"})
|
|
|
|
|
|
def suite():
|
|
return unittest.TestLoader().loadTestsFromTestCase(ModelTestCase)
|