urd_odoo_addons/smile_access_control/tests/test_access_control.py

103 lines
4.2 KiB
Python

# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2011 Smile (<http://www.smile.fr>). All Rights Reserved
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.tests.common import TransactionCase
from openerp.exceptions import ValidationError
class TestAccessControl(TransactionCase):
def setUp(self):
super(TestAccessControl, self).setUp()
users_obj = self.env['res.users']
groups_obj = self.env['res.groups']
# Create groups
self.group1, self.group2 = map(lambda index: groups_obj.create({'name': 'Group %d' % index}), range(1, 3))
# Create user profiles
self.user_profile1 = users_obj.create({
'name': 'Profile 1',
'login': 'profile1',
'user_profile': True,
'groups_id': [(4, self.group1.id)],
})
self.user_profile2 = users_obj.create({
'name': 'Profile 2',
'login': 'profile2',
'user_profile': True,
'groups_id': [(6, 0, (self.group1 | self.group2).ids)],
})
# Create users
self.user = users_obj.create({
'name': 'Demo User',
'login': 'demouser',
'user_profile_id': self.user_profile1.id,
})
def test_changing_a_group_dependencies_should_update_groups_of_user_belonging_to_this_group(self):
"""
Add Group 1 to Demo User dependencies.
Add a dependence to Group 2 to the group Group 1.
Check that user has this new dependence.
"""
self.group1.implied_ids = [(4, self.group2.id)]
self.assertIn(self.group2, self.user.groups_id, 'The user has not the new dependence!')
def test_changing_user_profile_of_a_user_should_update_groups_of_user(self):
"""
Add Group 2 to the dependencies of Group 1.
Check that user has this new dependence.
"""
self.user.user_profile_id = self.user_profile2
for group in self.user_profile2.groups_id:
self.assertIn(group, self.user.groups_id, 'The user has not the new dependence!')
def test_change_profile_with_no_update_users_do_not_change_users(self):
"""
Change Profile 2 to not update users
Remove Group 1 in Profile 2.
Check that user has again Group 1.
"""
self.user.user_profile_id.is_update_users = False
self.assertIn(self.group1, self.user.groups_id, 'The user has not the Group 1 in dependencies !')
def test_using_admin_as_profile_should_fail(self):
"""
I try to create a user with Administrator as user profile
I check that it failed
"""
with self.assertRaisesRegexp(ValidationError, "You can't use (.*) as user profile !"):
self.env['res.users'].create({
'name': 'toto',
'login': 'toto',
'user_profile_id': self.env.ref('base.user_root').id
})
def test_update_users_of_a_group(self):
"""
I create a user U and a profile P
I update group Group 1 to add it user U
I check that
"""
profile = self.env['res.users'].create({'name': 'P', 'login': 'p_login', 'user_profile': True})
user = self.env['res.users'].create({'name': 'U', 'login': 'u_login', 'user_profile_id': profile.id})
self.group1.users |= profile
self.assertIn(self.group1, user.groups_id, 'User U should have Group 1 in dependencies!')