diff --git a/addons/mail/tests/__init__.py b/addons/mail/tests/__init__.py index d63c5634cc3..2d48fa233c4 100644 --- a/addons/mail/tests/__init__.py +++ b/addons/mail/tests/__init__.py @@ -18,10 +18,11 @@ # along with this program. If not, see . # ############################################################################## -from . import test_mail +from . import test_mail, test_mail_access_rights checks = [ test_mail, + test_mail_access_rights, ] -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mail/tests/test_mail.py b/addons/mail/tests/test_mail.py index 01646b6ad43..1fab5dd1732 100644 --- a/addons/mail/tests/test_mail.py +++ b/addons/mail/tests/test_mail.py @@ -23,7 +23,6 @@ import tools from openerp.tests import common from openerp.tools.html_sanitize import html_sanitize -from osv.orm import except_orm MAIL_TEMPLATE = """Return-Path: To: {to} @@ -277,78 +276,6 @@ class test_mail(TestMailMockups): follower_ids = [follower.id for follower in group_pigs.message_follower_ids] self.assertEqual(follower_ids, [user_admin.partner_id.id], 'Admin must be the only Pigs fan') - def test_15_access_rights(self): - cr, uid = self.cr, self.uid - self.res_groups = self.registry('res.groups') - - self.mail_group.message_post(cr, uid, self.group_pigs_id, body='Message') - - # Find Employee group - group_employee_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'base', 'group_user') - group_employee_id = group_employee_ref and group_employee_ref[1] or False - group_employee = self.res_groups.browse(cr, uid, group_employee_id) - - self.group_jobs_id = self.mail_group.create(cr, uid, {'name': 'Jobs', 'public': 'public'}) - - user_bert_id = self.res_users.create(cr, uid, {'name': 'Bert Tartopoils', 'login': 'bert', 'groups_id': [(6, 0, [])]}) - user_raoul_id = self.res_users.create(cr, uid, {'name': 'Raoul Grosbedon', 'login': 'raoul', 'groups_id': [(6, 0, [group_employee_id])]}) - - user_bert = self.res_users.browse(cr, uid, user_bert_id) - user_raoul = self.res_users.browse(cr, uid, user_raoul_id) - - print '-----' - for group in user_bert.groups_id: - print group.name - print '-----' - for group in user_raoul.groups_id: - print group.name - - # Summary - # group_pigs: groups (Employee) - # group_jobs: public - - # ---------------------------------------- - # CASE1: Bert, without groups - # ---------------------------------------- - - # Do: Bert creates a group, should crash because perm_create only for employees - self.assertRaises(except_orm, - self.mail_group.create, - cr, user_bert_id, {'name': 'Bert\'s Group'}) - # Do: Bert reads Jobs basic fields, ok because public = read access on the group - self.mail_group.read(cr, user_bert_id, self.group_jobs_id, ['name', 'description']) - # Do: Bert reads Jobs messages, ok because read access on the group = read access on its messages - jobs_message_ids = self.mail_group.read(cr, user_bert_id, self.group_jobs_id, ['message_ids'])['message_ids'] - self.mail_message.read(cr, user_bert_id, jobs_message_ids) - # Do: Bert reads Jobs followers, ko because partner are accessible to employees or partner manager - jobs_followers_ids = self.mail_group.read(cr, user_bert_id, self.group_jobs_id, ['message_follower_ids'])['message_follower_ids'] - self.assertRaises(except_orm, - self.res_partner.read, - cr, user_bert_id, jobs_followers_ids) - # Do: Bert comments Jobs, ko because not write access on the group and not in the followers - self.assertRaises(except_orm, - self.mail_group.message_post, - cr, user_bert_id, self.group_jobs_id, body='I love Pigs') - - # Do: Bert reads Pigs, should crash because mail.group security=groups only for employee group - self.assertRaises(except_orm, - self.mail_group.read, - cr, user_bert_id, self.group_pigs_id) - - # Do: add Bert to jobs followers - self.mail_group.message_subscribe(cr, uid, [self.group_pigs_id], [user_bert.partner_id.id]) - # Do: Bert comments Jobs, ok because he is in the followers - self.mail_group.message_post(cr, user_bert_id, self.group_jobs_id, body='I love Pigs') - - # ---------------------------------------- - # CASE1: Raoul, employee - # ---------------------------------------- - - # Do: Bert read Jobs, ok because public - self.mail_group.read(cr, user_raoul_id, self.group_pigs_id) - # Do: Bert read Jobs, ok because public - self.mail_group.read(cr, user_raoul_id, self.group_jobs_id) - def test_20_message_post(self): """ Tests designed for message_post. """ cr, uid = self.cr, self.uid diff --git a/addons/mail/tests/test_mail_access_rights.py b/addons/mail/tests/test_mail_access_rights.py new file mode 100644 index 00000000000..0a7284098bd --- /dev/null +++ b/addons/mail/tests/test_mail_access_rights.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2012-TODAY OpenERP S.A. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.addons.mail.tests import test_mail +from osv.orm import except_orm + + +class test_mail_access_rights(test_mail.TestMailMockups): + + def setUp(self): + super(test_mail_access_rights, self).setUp() + self.mail_group = self.registry('mail.group') + self.mail_message = self.registry('mail.message') + self.res_users = self.registry('res.users') + self.res_partner = self.registry('res.partner') + + # create a 'pigs' group that will be used through the various tests + self.group_pigs_id = self.mail_group.create(self.cr, self.uid, + {'name': 'Pigs', 'description': 'Fans of Pigs, unite !'}) + + def test_00_access_rights(self): + cr, uid = self.cr, self.uid + self.res_groups = self.registry('res.groups') + # Prepare groups: Pigs (employee), Jobs (public) + self.mail_group.message_post(cr, uid, self.group_pigs_id, body='Message') + self.group_jobs_id = self.mail_group.create(cr, uid, {'name': 'Jobs', 'public': 'public'}) + + # Find Employee group + group_employee_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'base', 'group_user') + group_employee_id = group_employee_ref and group_employee_ref[1] or False + group_employee = self.res_groups.browse(cr, uid, group_employee_id) + + # Create Bert (without groups) and Raoul( employee) + user_bert_id = self.res_users.create(cr, uid, {'name': 'Bert Tartopoils', 'login': 'bert', 'groups_id': [(6, 0, [])]}) + user_raoul_id = self.res_users.create(cr, uid, {'name': 'Raoul Grosbedon', 'login': 'raoul', 'groups_id': [(6, 0, [group_employee_id])]}) + user_bert = self.res_users.browse(cr, uid, user_bert_id) + user_raoul = self.res_users.browse(cr, uid, user_raoul_id) + + # ---------------------------------------- + # CASE1: Bert, without groups + # ---------------------------------------- + print 'Bert CASE1' + # Do: Bert creates a group, should crash because perm_create only for employees + self.assertRaises(except_orm, + self.mail_group.create, + cr, user_bert_id, {'name': 'Bert\'s Group'}) + # Do: Bert reads Jobs basic fields, ok because public = read access on the group + self.mail_group.read(cr, user_bert_id, self.group_jobs_id, ['name', 'description']) + # Do: Bert reads Jobs messages, ok because read access on the group = read access on its messages + jobs_message_ids = self.mail_group.read(cr, user_bert_id, self.group_jobs_id, ['message_ids'])['message_ids'] + self.mail_message.read(cr, user_bert_id, jobs_message_ids) + # Do: Bert reads Jobs followers, ko because partner are accessible to employees or partner manager + jobs_followers_ids = self.mail_group.read(cr, user_bert_id, self.group_jobs_id, ['message_follower_ids'])['message_follower_ids'] + self.assertRaises(except_orm, + self.res_partner.read, + cr, user_bert_id, jobs_followers_ids) + # Do: Bert comments Jobs, ko because no write access on the group and not in the followers + self.assertRaises(except_orm, + self.mail_group.message_post, + cr, user_bert_id, self.group_jobs_id, body='I love Pigs') + # Do: add Bert to jobs followers + self.mail_group.message_subscribe(cr, uid, [self.group_jobs_id], [user_bert.partner_id.id]) + # Do: Bert comments Jobs, ok because he is now in the followers + self.mail_group.message_post(cr, user_bert_id, self.group_jobs_id, body='I love Pigs') + # Do: Bert browse Pigs, ok (no direct browse of partners) + self.mail_group.browse(cr, user_bert_id, self.group_jobs_id) + + # Do: Bert reads Pigs, should crash because mail.group security=groups only for employee group + self.assertRaises(except_orm, + self.mail_group.read, + cr, user_bert_id, self.group_pigs_id) + + # ---------------------------------------- + # CASE1: Raoul, employee + # ---------------------------------------- + print 'Raoul CASE1' + # Do: Bert read Jobs, ok because public + self.mail_group.read(cr, user_raoul_id, self.group_pigs_id) + # Do: Bert read Jobs, ok because public + self.mail_group.read(cr, user_raoul_id, self.group_jobs_id)