Odoo18-Base/addons/base_setup/tests/test_res_config.py
2025-01-06 10:57:38 +07:00

97 lines
4.1 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from unittest.mock import patch
from odoo.tests.common import TransactionCase
def just_raise(*args):
raise Exception("We should not be here.")
class TestResConfig(TransactionCase):
def setUp(self):
super(TestResConfig, self).setUp()
self.user = self.env.ref('base.user_admin')
self.company = self.env['res.company'].create({'name': 'oobO'})
self.user.write({'company_ids': [(4, self.company.id)], 'company_id': self.company.id})
Settings = self.env['res.config.settings'].with_user(self.user.id)
self.config = Settings.create({})
def test_multi_company_res_config_group(self):
# Enable/Disable a group in a multi-company environment
# 1/ All the users should be added/removed from the group
# and not only the users of the allowed companies
# 2/ The changes should be reflected for new users (Default User Template)
company = self.env['res.company'].create({'name': 'My Last Company'})
partner = self.env['res.partner'].create({
'name': 'My User'
})
user = self.env['res.users'].create({
'login': 'My User',
'company_id': company.id,
'company_ids': [(4, company.id)],
'partner_id': partner.id,
})
ResConfig = self.env['res.config.settings']
default_values = ResConfig.default_get(list(ResConfig.fields_get()))
# Case 1: Enable a group
default_values.update({'group_multi_currency': True})
ResConfig.create(default_values).execute()
self.assertTrue(user in self.env.ref('base.group_multi_currency').sudo().users)
new_partner = self.env['res.partner'].create({'name': 'New User'})
new_user = self.env['res.users'].create({
'login': 'My First New User',
'company_id': company.id,
'company_ids': [(4, company.id)],
'partner_id': new_partner.id,
})
self.assertTrue(new_user in self.env.ref('base.group_multi_currency').sudo().users)
# Case 2: Disable a group
default_values.update({'group_multi_currency': False})
ResConfig.create(default_values).execute()
self.assertTrue(user not in self.env.ref('base.group_multi_currency').sudo().users)
new_partner = self.env['res.partner'].create({'name': 'New User'})
new_user = self.env['res.users'].create({
'login': 'My Second New User',
'company_id': company.id,
'company_ids': [(4, company.id)],
'partner_id': new_partner.id,
})
self.assertTrue(new_user not in self.env.ref('base.group_multi_currency').sudo().users)
def test_no_install(self):
"""Make sure that when saving settings,
no modules are installed if nothing was set to install.
"""
# check that no module should be installed in the first place
config_fields = self.config._get_classified_fields()
for module in config_fields['module']:
if self.config[f'module_{module.name}']:
self.assertTrue(module.state != 'uninstalled',
"All set modules should already be installed.")
# if we try to install something, raise; so nothing should be installed
with patch('odoo.addons.base.models.ir_module.Module.button_immediate_install', new=just_raise):
self.config.execute()
def test_install(self):
"""Make sure that the previous test is valid, i.e. when saving settings,
it starts module install if something was set to install.
"""
config_fields = self.config._get_classified_fields()
# set the first uninstalled module to install
module_to_install = next(m for m in config_fields['module'] if m.state == 'uninstalled')
self.config[f'module_{module_to_install.name}'] = True
with patch('odoo.addons.base.models.ir_module.Module.button_immediate_install', new=just_raise):
with self.assertRaisesRegex(Exception, "We should not be here."):
self.config.execute()