From c3be4c3bc6f7ca320da06bf71bfdfb3aebc3cbd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 4 Jan 2019 15:47:47 +0000 Subject: [IMP][MOV] mail: move / pimp test tools and asserts to mail PURPOSE Currently tools and asserts for mail tests are located inside test_mail module. It makes difficult to re-use them in application tests or force them to write custom quick and dirty tools and asserts. Purpose of this merge is therefore to move tools classes and mocks to mail directly and use them in various sub modules. SPECIFICATIONS Have class, mocks, tools and asserts available in mail so that all modules below from mail can use them. Including * mock mail gateway in a clean way: mock server connection, email building and sending; * allow to simulate errors while sending emails to test corner cases; * provide tools to insert emails in mail gateway; * mock mail application to check record creation (message, notifications, mails, ...); * mock bus notification; * provide clearer assert methods for bus and mail notifications; * provide clearer emails sending and content methods; * provide a with_user tool context manager for tests allowing to quickly change current user given a login; Most of those tools, asserts and mocks come from test_mail/tests/common.py. They have been partially rewritten to be easier to use or to perform tests more cleanly. Future commits will gradually update existing tests in test_mail, test_mass mailing and test_mail_full. LINKS Task ID 2068986 PR #38070 --- odoo/tests/common.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'odoo') diff --git a/odoo/tests/common.py b/odoo/tests/common.py index 5fe012528b6..12e4c78ffa3 100644 --- a/odoo/tests/common.py +++ b/odoo/tests/common.py @@ -329,6 +329,22 @@ class BaseCase(TreeCase, MetaCase('DummyCase', (object,), {})): assert "." in xid, "this method requires a fully qualified parameter, in the following form: 'module.identifier'" return self.env.ref(xid) + @contextmanager + def with_user(self, login): + """ Change user for a given test, like with self.with_user() ... """ + old_uid = self.uid + try: + user = self.env['res.users'].sudo().search([('login', '=', login)]) + assert user, "Login %s not found" % login + # switch user + self.uid = user.id + self.env = self.env(user=self.uid) + yield + finally: + # back + self.uid = old_uid + self.env = self.env(user=self.uid) + @contextmanager def _assertRaises(self, exception, *, msg=None): """ Context manager that clears the environment upon failure. """ -- cgit v1.2.3