diff --git a/base_user_role/__manifest__.py b/base_user_role/__manifest__.py index 184effe36..9f83615f3 100644 --- a/base_user_role/__manifest__.py +++ b/base_user_role/__manifest__.py @@ -16,6 +16,7 @@ "security/ir.model.access.csv", "data/ir_cron.xml", "data/ir_module_category.xml", + "wizards/role_add_users_wizard_views.xml", "views/role.xml", "views/user.xml", "views/group.xml", diff --git a/base_user_role/security/ir.model.access.csv b/base_user_role/security/ir.model.access.csv index e58fa6f95..74d2512af 100644 --- a/base_user_role/security/ir.model.access.csv +++ b/base_user_role/security/ir.model.access.csv @@ -3,3 +3,4 @@ access_res_users_role,access_res_users_role,model_res_users_role,"base.group_erp access_res_users_role_line,access_res_users_role_line,model_res_users_role_line,"base.group_erp_manager",1,1,1,1 access_wizard_create_role_from_user,access_wizard_create_role_from_user,model_wizard_create_role_from_user,"base.group_erp_manager",1,1,1,1 access_wizard_groups_into_role,access_wizard_groups_into_role,model_wizard_groups_into_role,"base.group_erp_manager",1,1,1,1 +access_role_add_users_wizard,access_role_add_users_wizard,model_role_add_users_wizard,base.group_erp_manager,1,1,1,1 diff --git a/base_user_role/tests/__init__.py b/base_user_role/tests/__init__.py index f8c808c78..af6857eef 100644 --- a/base_user_role/tests/__init__.py +++ b/base_user_role/tests/__init__.py @@ -1 +1,2 @@ from . import test_user_role +from . import test_role_add_users_wizard diff --git a/base_user_role/tests/test_role_add_users_wizard.py b/base_user_role/tests/test_role_add_users_wizard.py new file mode 100644 index 000000000..3ae637bce --- /dev/null +++ b/base_user_role/tests/test_role_add_users_wizard.py @@ -0,0 +1,118 @@ +from odoo import Command +from odoo.tests.common import TransactionCase + + +class TestRoleAddUsersWizard(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.role = cls.env["res.users.role"].create( + { + "name": "Test Role", + } + ) + cls.user1 = cls.env["res.users"].create( + { + "name": "Test User 1", + "login": "testuser1", + "email": "testuser1@example.com", + } + ) + cls.user2 = cls.env["res.users"].create( + { + "name": "Test User 2", + "login": "testuser2", + "email": "testuser2@example.com", + } + ) + cls.user3 = cls.env["res.users"].create( + { + "name": "Test User 3", + "login": "testuser3", + "email": "testuser3@example.com", + } + ) + + def test_add_new_users_to_role(self): + """Test adding new users to a role without existing users""" + wizard = self.env["role.add.users.wizard"].create( + { + "role_id": self.role.id, + "user_ids": [Command.set([self.user1.id, self.user2.id])], + "date_from": "2024-01-01", + "date_to": "2024-12-31", + } + ) + + result = wizard.action_add_users() + self.assertEqual(result["type"], "ir.actions.act_window_close") + self.assertEqual(len(self.role.line_ids), 2) + self.assertIn(self.user1, self.role.line_ids.mapped("user_id")) + self.assertIn(self.user2, self.role.line_ids.mapped("user_id")) + for line in self.role.line_ids: + self.assertEqual(str(line.date_from), "2024-01-01") + self.assertEqual(str(line.date_to), "2024-12-31") + + def test_add_users_with_existing_users(self): + """Test adding users when some already exist in the role""" + self.env["res.users.role.line"].create( + { + "role_id": self.role.id, + "user_id": self.user1.id, + } + ) + + wizard = self.env["role.add.users.wizard"].create( + { + "role_id": self.role.id, + "user_ids": [Command.set([self.user1.id, self.user2.id])], + } + ) + + wizard.action_add_users() + self.assertEqual(len(self.role.line_ids), 2) + users_in_role = self.role.line_ids.mapped("user_id") + self.assertIn(self.user1, users_in_role) + self.assertIn(self.user2, users_in_role) + + user1_lines = self.role.line_ids.filtered( + lambda line: line.user_id == self.user1 + ) + self.assertEqual(len(user1_lines), 1) + + def test_add_users_without_dates(self): + """Test adding users without specifying dates""" + wizard = self.env["role.add.users.wizard"].create( + { + "role_id": self.role.id, + "user_ids": [Command.set([self.user3.id])], + } + ) + + wizard.action_add_users() + self.assertEqual(len(self.role.line_ids), 1) + line = self.role.line_ids[0] + self.assertEqual(line.user_id, self.user3) + self.assertFalse(line.date_from) + self.assertFalse(line.date_to) + + def test_add_multiple_new_users(self): + """Test adding multiple new users at once""" + wizard = self.env["role.add.users.wizard"].create( + { + "role_id": self.role.id, + "user_ids": [ + Command.set([self.user1.id, self.user2.id, self.user3.id]) + ], + "date_from": "2024-06-01", + } + ) + + wizard.action_add_users() + self.assertEqual(len(self.role.line_ids), 3) + users_in_role = self.role.line_ids.mapped("user_id") + self.assertEqual( + set(users_in_role.ids), {self.user1.id, self.user2.id, self.user3.id} + ) + for line in self.role.line_ids: + self.assertEqual(str(line.date_from), "2024-06-01") diff --git a/base_user_role/views/role.xml b/base_user_role/views/role.xml index a489dfa0c..acd2aae4b 100644 --- a/base_user_role/views/role.xml +++ b/base_user_role/views/role.xml @@ -44,6 +44,13 @@ +