Files
odoo_source/addons/base_setup/tests/test_res_config.py
T
Victor Feyens 3d9efc7b5c [IMP] base: clean modules installation logic
* batch module data prefetch in res.config.settings flows.
* manipulate ir.module.module records instead of a strange list of tuples
* Only keep the missing module names logic where useful (useless for the
res.config.settings scope, modules must exists to be referenced by
a settings field).
* drop the support of module fields of type selection, they are not used anymore,
it's not even sure they still work and this feature doesn't bring much added value anyway.

Part-of: odoo/odoo#83104
2022-02-08 11:07:45 +00: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_function', 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_function', new=just_raise):
with self.assertRaisesRegex(Exception, "We should not be here."):
self.config.execute()