Files
tryton/trytond/tests/test_model.py
T
2019-10-08 18:11:35 +02:00

168 lines
4.9 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"})
@with_transaction()
def test_fields_get_no_write_access(self):
"Test field is readonly when no write access on it"
pool = Pool()
Model = pool.get('test.model')
Field = pool.get('ir.model.field')
FieldAccess = pool.get('ir.model.field.access')
field, = Field.search([
('name', '=', 'name'),
('model.model', '=', Model.__name__),
])
FieldAccess.create([{
'field': field.id,
'perm_write': False,
}])
definition = Model.fields_get(['name'])
self.assertTrue(definition['name']['readonly'])
def suite():
return unittest.TestLoader().loadTestsFromTestCase(ModelTestCase)