From 7ab3443bc5067010d482f43515156cc7692600da Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Tue, 15 Sep 2020 12:15:16 +0000 Subject: [PATCH] [FIX] core: add test on pre/post-commit callbacks This test ensures that method `Callbacks.run` is re-entrant, i.e., it can be called from a callback being run. The behavior is to execute the remaining callbacks, and then resume the current one. This completes https://github.com/odoo/odoo/pull/57469. closes odoo/odoo#57778 X-original-commit: 7de434ebc091c4d85615c6cf69240e07b98fe767 Signed-off-by: Raphael Collet (rco) --- odoo/addons/base/tests/test_misc.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/odoo/addons/base/tests/test_misc.py b/odoo/addons/base/tests/test_misc.py index 0c25a5e1669..0d139788c67 100644 --- a/odoo/addons/base/tests/test_misc.py +++ b/odoo/addons/base/tests/test_misc.py @@ -321,6 +321,28 @@ class TestCallbacks(BaseCase): callbacks.run() self.assertEqual(log, [[1, 2, 3]]) + def test_reentrant(self): + log = [] + callbacks = misc.Callbacks() + + # register foo that runs callbacks + @callbacks.add + def foo(): + log.append("foo1") + callbacks.run() + log.append("foo2") + + @callbacks.add + def bar(): + log.append("bar") + + # both foo() and bar() are called once + callbacks.run() + self.assertEqual(log, ["foo1", "bar", "foo2"]) + + callbacks.run() + self.assertEqual(log, ["foo1", "bar", "foo2"]) + class TestRemoveAccents(BaseCase): def test_empty_string(self):