diff options
| author | Raphael Collet <rco@odoo.com> | 2020-07-02 08:56:08 +0000 |
|---|---|---|
| committer | Raphael Collet <rco@odoo.com> | 2020-07-08 11:58:33 +0000 |
| commit | dd8a6b8a8299afaac699d04f2ed886ff85c685fe (patch) | |
| tree | 6352a86a099bdcf8e0252364c0f0a670018feb9f /odoo/addons/test_new_api/tests/test_new_fields.py | |
| parent | 04250d80163bb785b674b85fe24354c9d999efea (diff) | |
[ADD] test_new_api: tests on queries made by create with computed fields
closes odoo/odoo#54209
Related: odoo/upgrade#1464
Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
Diffstat (limited to 'odoo/addons/test_new_api/tests/test_new_fields.py')
| -rw-r--r-- | odoo/addons/test_new_api/tests/test_new_fields.py | 107 |
1 files changed, 106 insertions, 1 deletions
diff --git a/odoo/addons/test_new_api/tests/test_new_fields.py b/odoo/addons/test_new_api/tests/test_new_fields.py index a42ce7a9d85..b071e043414 100644 --- a/odoo/addons/test_new_api/tests/test_new_fields.py +++ b/odoo/addons/test_new_api/tests/test_new_fields.py @@ -322,7 +322,7 @@ class TestFields(TransactionCaseWithUserDemo): def test_11_stored_protected(self): """ test protection against recomputation """ - model = self.env['test_new_api.compute.protected'] + model = self.env['test_new_api.compute.readonly'] field = model._fields['bar'] record = model.create({'foo': 'unprotected #1'}) @@ -2826,3 +2826,108 @@ class TestSelectionOndeleteAdvanced(common.TransactionCase): with self.assertRaises(ValueError): self.registry.setup_models(self.env.cr) + + +def insert(model, *fnames): + """ Return the expected query string to INSERT the given columns. """ + columns = ['create_uid', 'create_date', 'write_uid', 'write_date'] + sorted(fnames) + return 'INSERT INTO "{}" ("id", {}) VALUES (nextval(%s), {}) RETURNING id'.format( + model._table, + ", ".join('"{}"'.format(column) for column in columns), + ", ".join('%s' for column in columns), + ) + + +def update(model, *fnames): + """ Return the expected query string to UPDATE the given columns. """ + columns = sorted(fnames) + ['write_uid', 'write_date'] + return 'UPDATE "{}" SET {} WHERE id IN %s'.format( + model._table, + ", ".join('"{}" = %s'.format(column) for column in columns), + ) + + +class TestComputeQueries(common.TransactionCase): + """ Test the queries made by create() with computed fields. """ + + def test_compute_readonly(self): + model = self.env['test_new_api.compute.readonly'] + model.create({}) + + # no value, no default + with self.assertQueries([insert(model, 'foo'), update(model, 'bar')]): + record = model.create({'foo': 'Foo'}) + self.assertEqual(record.bar, 'Foo') + + # some value, no default + with self.assertQueries([insert(model, 'foo', 'bar'), update(model, 'bar')]): + record = model.create({'foo': 'Foo', 'bar': 'Bar'}) + self.assertEqual(record.bar, 'Foo') + + model = model.with_context(default_bar='Def') + + # no value, some default + with self.assertQueries([insert(model, 'foo', 'bar'), update(model, 'bar')]): + record = model.create({'foo': 'Foo'}) + self.assertEqual(record.bar, 'Foo') + + # some value, some default + with self.assertQueries([insert(model, 'foo', 'bar'), update(model, 'bar')]): + record = model.create({'foo': 'Foo', 'bar': 'Bar'}) + self.assertEqual(record.bar, 'Foo') + + def test_compute_readwrite(self): + model = self.env['test_new_api.compute.readwrite'] + model.create({}) + + # no value, no default + with self.assertQueries([insert(model, 'foo'), update(model, 'bar')]): + record = model.create({'foo': 'Foo'}) + self.assertEqual(record.bar, 'Foo') + + # some value, no default + with self.assertQueries([insert(model, 'foo', 'bar')]): + record = model.create({'foo': 'Foo', 'bar': 'Bar'}) + self.assertEqual(record.bar, 'Bar') + + model = model.with_context(default_bar='Def') + + # no value, some default + with self.assertQueries([insert(model, 'foo', 'bar')]): + record = model.create({'foo': 'Foo'}) + self.assertEqual(record.bar, 'Def') + + # some value, some default + with self.assertQueries([insert(model, 'foo', 'bar')]): + record = model.create({'foo': 'Foo', 'bar': 'Bar'}) + self.assertEqual(record.bar, 'Bar') + + def test_compute_inverse(self): + model = self.env['test_new_api.compute.inverse'] + model.create({}) + + # no value, no default + with self.assertQueries([insert(model, 'foo'), update(model, 'bar')]): + record = model.create({'foo': 'Foo'}) + self.assertEqual(record.foo, 'Foo') + self.assertEqual(record.bar, 'Foo') + + # some value, no default + with self.assertQueries([insert(model, 'foo', 'bar'), update(model, 'foo')]): + record = model.create({'foo': 'Foo', 'bar': 'Bar'}) + self.assertEqual(record.foo, 'Bar') + self.assertEqual(record.bar, 'Bar') + + model = model.with_context(default_bar='Def') + + # no value, some default + with self.assertQueries([insert(model, 'foo', 'bar'), update(model, 'foo')]): + record = model.create({'foo': 'Foo'}) + self.assertEqual(record.foo, 'Def') + self.assertEqual(record.bar, 'Def') + + # some value, some default + with self.assertQueries([insert(model, 'foo', 'bar'), update(model, 'foo')]): + record = model.create({'foo': 'Foo', 'bar': 'Bar'}) + self.assertEqual(record.foo, 'Bar') + self.assertEqual(record.bar, 'Bar') |
