From d5131fe9767319ce873ed8125c9f99eb06fa67b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 17 Aug 2018 08:15:19 +0200 Subject: [PATCH] [REF] test_mail: reorganize activity tests Purpose is to separate tests related to access rights (low level), base activity features and mixin itself. It eases understanding of tests and prepare future addition of tests. This commit is linked to task ID 1856417. --- addons/test_mail/tests/test_mail_activity.py | 111 ++++++++++--------- 1 file changed, 61 insertions(+), 50 deletions(-) diff --git a/addons/test_mail/tests/test_mail_activity.py b/addons/test_mail/tests/test_mail_activity.py index b29fa7a465b..be17922a2a4 100644 --- a/addons/test_mail/tests/test_mail_activity.py +++ b/addons/test_mail/tests/test_mail_activity.py @@ -14,12 +14,11 @@ from odoo.addons.test_mail.models.test_mail_models import MailTestActivity from odoo.tools import mute_logger -@tests.tagged('mail_activity') -class TestMailActivity(BaseFunctionalTest): +class TestActivityCommon(BaseFunctionalTest): @classmethod def setUpClass(cls): - super(TestMailActivity, cls).setUpClass() + super(TestActivityCommon, cls).setUpClass() cls.test_record = cls.env['mail.test.activity'].with_context(cls._quick_create_ctx).create({'name': 'Test'}) # reset ctx cls.test_record = cls.test_record.with_context( @@ -28,6 +27,41 @@ class TestMailActivity(BaseFunctionalTest): mail_notrack=False ) + +@tests.tagged('mail_activity') +class TestActivityRights(TestActivityCommon): + + def test_activity_security_user_access(self): + activity = self.test_record.activity_schedule( + 'test_mail.mail_act_test_todo', + user_id=self.user_employee.id) + + activity2 = self.test_record.activity_schedule('test_mail.mail_act_test_todo') + activity2.write({'user_id': self.user_employee.id}) + + def test_activity_security_user_noaccess(self): + + def _employee_crash(*args, **kwargs): + """ If employee is test employee, consider he has no access on document """ + recordset = args[0] + if recordset.env.uid == self.user_employee.id: + raise exceptions.AccessError('Hop hop hop Ernest, please step back.') + return DEFAULT + + with patch.object(MailTestActivity, 'check_access_rights', autospec=True, side_effect=_employee_crash): + with self.assertRaises(exceptions.UserError): + activity = self.test_record.activity_schedule( + 'test_mail.mail_act_test_todo', + user_id=self.user_employee.id) + + activity2 = self.test_record.activity_schedule('test_mail.mail_act_test_todo') + with self.assertRaises(exceptions.UserError): + activity2.write({'user_id': self.user_employee.id}) + + +@tests.tagged('mail_activity') +class TestActivityFlow(TestActivityCommon): + def test_activity_flow_employee(self): with self.sudoAs('ernest'): test_record = self.env['mail.test.activity'].browse(self.test_record.id) @@ -75,6 +109,30 @@ class TestMailActivity(BaseFunctionalTest): 'res_id': test_record.id, }) + def test_activity_notify_other_user(self): + self.user_admin.notification_type = 'email' + rec = self.test_record.sudo(self.user_employee) + with self.assertNotifications(partner_admin=(1, 'email', 'read')): + activity = rec.activity_schedule( + 'test_mail.mail_act_test_todo', + user_id=self.user_admin.id) + self.assertEqual(activity.create_user_id, self.user_employee) + self.assertEqual(activity.user_id, self.user_admin) + + def test_activity_notify_same_user(self): + self.user_employee.notification_type = 'email' + rec = self.test_record.sudo(self.user_employee) + with self.assertNotifications(partner_employee=(0, 'email', 'read')): + activity = rec.activity_schedule( + 'test_mail.mail_act_test_todo', + user_id=self.user_employee.id) + self.assertEqual(activity.create_user_id, self.user_employee) + self.assertEqual(activity.user_id, self.user_employee) + + +@tests.tagged('mail_activity') +class TestActivityMixin(TestActivityCommon): + def test_activity_mixin(self): self.user_employee.tz = self.user_admin.tz with self.sudoAs('ernest'): @@ -176,50 +234,3 @@ class TestMailActivity(BaseFunctionalTest): user_id=self.user_admin.id, new_user_id=self.user_employee.id) self.assertEqual(rec.activity_ids[0].user_id, self.user_employee) - - def test_activity_notify_other_user(self): - self.user_admin.notification_type = 'email' - rec = self.test_record.sudo(self.user_employee) - with self.assertNotifications(partner_admin=(1, 'email', 'read')): - activity = rec.activity_schedule( - 'test_mail.mail_act_test_todo', - user_id=self.user_admin.id) - self.assertEqual(activity.create_user_id, self.user_employee) - self.assertEqual(activity.user_id, self.user_admin) - - def test_activity_notify_same_user(self): - self.user_employee.notification_type = 'email' - rec = self.test_record.sudo(self.user_employee) - with self.assertNotifications(partner_employee=(0, 'email', 'read')): - activity = rec.activity_schedule( - 'test_mail.mail_act_test_todo', - user_id=self.user_employee.id) - self.assertEqual(activity.create_user_id, self.user_employee) - self.assertEqual(activity.user_id, self.user_employee) - - def test_activity_security_user_access(self): - activity = self.test_record.activity_schedule( - 'test_mail.mail_act_test_todo', - user_id=self.user_employee.id) - - activity2 = self.test_record.activity_schedule('test_mail.mail_act_test_todo') - activity2.write({'user_id': self.user_employee.id}) - - def test_activity_security_user_noaccess(self): - - def _employee_crash(*args, **kwargs): - """ If employee is test employee, consider he has no access on document """ - recordset = args[0] - if recordset.env.uid == self.user_employee.id: - raise exceptions.AccessError('Hop hop hop Ernest, please step back.') - return DEFAULT - - with patch.object(MailTestActivity, 'check_access_rights', autospec=True, side_effect=_employee_crash): - with self.assertRaises(exceptions.UserError): - activity = self.test_record.activity_schedule( - 'test_mail.mail_act_test_todo', - user_id=self.user_employee.id) - - activity2 = self.test_record.activity_schedule('test_mail.mail_act_test_todo') - with self.assertRaises(exceptions.UserError): - activity2.write({'user_id': self.user_employee.id})