oca-ocb-project/odoo-bringout-oca-ocb-project/project/tests/test_project_config.py
Ernad Husremovic 4a4d12c333 19.0 vanilla
2026-03-09 09:31:56 +01:00

126 lines
6.9 KiB
Python

from .test_project_base import TestProjectCommon
class TestProjectConfig(TestProjectCommon):
"""Test module configuration and its effects on projects."""
@classmethod
def setUpClass(cls):
super(TestProjectConfig, cls).setUpClass()
cls.Settings = cls.env["res.config.settings"]
cls.user_settings_project_manager = cls.env['res.users.settings']._find_or_create_for_user(cls.user_projectmanager)
cls.user_settings_project_user = cls.env['res.users.settings']._find_or_create_for_user(cls.user_projectuser)
def test_project_stages_feature_enable_views(self):
"""Check that the Gantt, Calendar and Activities views are
enabled when the 'Project Stage' feature is enabled.
"""
self.Settings.create({"group_project_stages": True}).execute() # enabling feature
menu_ids = set([self.env.ref('project.menu_projects').id, self.env.ref('project.menu_projects_config').id])
menu_loaded = set(self.env['ir.ui.menu']._load_menus_blacklist())
self.assertTrue(menu_ids.issubset(menu_loaded), "The menu project and menu projects config should be loaded")
def test_copy_project_manager_embedded_config_as_default(self):
"""
Test that when a user gets the embedded actions configs of a projet, he gets the configs of
the project manager as default if he has no personal configuration yet for a particular action.
The configs he gets should also be copied in its user's settings.
"""
project = self.env['project.project'].create({
'name': 'Test Project',
'user_id': self.user_projectmanager.id,
})
project_action = self.env['ir.actions.act_window'].create({
'name': 'Test Project Action',
'res_model': 'project.project',
})
# Create the embedded action config for the project manager
project_manager_config = self.env['res.users.settings.embedded.action'].create({
'user_setting_id': self.user_settings_project_manager.id,
'action_id': project_action.id,
'res_model': 'project.project',
'res_id': project.id,
'embedded_actions_order': 'false,3,2,1',
'embedded_actions_visibility': '1,2,3',
'embedded_visibility': True,
})
# The project user has no personal configuration yet
self.assertFalse(self.user_settings_project_user.embedded_actions_config_ids)
# He should get the project manager configuration as default
project_user_config = self.user_settings_project_user.with_context(
res_model='project.project',
res_id=project.id,
).get_embedded_actions_settings()
self.assertDictEqual(
project_user_config[f'{project_action.id}+{project.id}'],
{
'embedded_actions_order': [False, 3, 2, 1],
'embedded_actions_visibility': [1, 2, 3],
'embedded_visibility': True,
},
)
# Check that the config has indeed been copied for the project user
project_user_config = self.user_settings_project_user.embedded_actions_config_ids
self.assertEqual(len(project_user_config), 1, 'There should be one embedded action setting created.')
self.assertEqual(project_user_config.action_id, project_manager_config.action_id, 'The action should match the one set in the project manager config.')
self.assertEqual(project_user_config.res_id, project_manager_config.res_id, 'The res_id should match the one set in the project manager config.')
self.assertEqual(project_user_config.res_model, project_manager_config.res_model, 'The res_model should match the one set in the project manager config.')
self.assertEqual(project_user_config.embedded_actions_order, project_manager_config.embedded_actions_order, 'The embedded actions order should match the one set in the project manager config.')
self.assertEqual(project_user_config.embedded_actions_visibility, project_manager_config.embedded_actions_visibility, 'The embedded actions visibility should match the one set in the project manager config.')
self.assertEqual(project_user_config.embedded_visibility, project_manager_config.embedded_visibility, 'The embedded visibility should match the one set in the project manager config.')
def test_no_copy_project_manager_embedded_config_as_default(self):
"""
Test that when a user gets the embedded actions configs of a projet, he does not get the configs of
the project manager as default if he already has a personal configuration for some actions.
"""
project = self.env['project.project'].create({
'name': 'Test Project',
'user_id': self.user_projectmanager.id,
})
project_action = self.env['ir.actions.act_window'].create({
'name': 'Test Project Action',
'res_model': 'project.project',
})
# Create the embedded action config for the project manager
self.env['res.users.settings.embedded.action'].create({
'user_setting_id': self.user_settings_project_manager.id,
'action_id': project_action.id,
'res_model': 'project.project',
'res_id': project.id,
'embedded_actions_order': 'false,3,2,1',
'embedded_actions_visibility': '1,2,3',
'embedded_visibility': True,
})
# The project user already has a personal configuration
user_config = self.env['res.users.settings.embedded.action'].create({
'user_setting_id': self.user_settings_project_user.id,
'action_id': project_action.id,
'res_model': 'project.project',
'res_id': project.id,
'embedded_actions_order': 'false,1,2,3',
'embedded_actions_visibility': '2,3',
'embedded_visibility': False,
})
self.assertEqual(len(self.user_settings_project_user.embedded_actions_config_ids), 1)
# He should get his personal configuration as default
project_user_config = self.user_settings_project_user.with_context(
res_model='project.project',
res_id=project.id,
).get_embedded_actions_settings()
self.assertDictEqual(
project_user_config[f'{project_action.id}+{project.id}'],
{
'embedded_actions_order': [False, 1, 2, 3],
'embedded_actions_visibility': [2, 3],
'embedded_visibility': False,
},
)
# Check that no new config has been created for the project user
project_user_config = self.user_settings_project_user.embedded_actions_config_ids
self.assertEqual(len(project_user_config), 1, 'There should still be only one embedded action setting created.')
self.assertEqual(project_user_config, user_config, 'The existing user config should be unchanged.')