You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
5.9 KiB

  1. # Copyright 2014 ABF OSIELL <http://osiell.com>
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  3. import datetime
  4. from odoo import fields
  5. from odoo.tests.common import TransactionCase
  6. class TestUserRole(TransactionCase):
  7. def setUp(self):
  8. super(TestUserRole, self).setUp()
  9. self.user_model = self.env['res.users']
  10. self.role_model = self.env['res.users.role']
  11. self.user_id = self.user_model.create(
  12. {'name': "USER TEST (ROLES)", 'login': 'user_test_roles'})
  13. # ROLE_1
  14. self.group_user_id = self.env.ref('base.group_user')
  15. self.group_no_one_id = self.env.ref('base.group_no_one')
  16. vals = {
  17. 'name': "ROLE_1",
  18. 'implied_ids': [
  19. (6, 0, [self.group_user_id.id, self.group_no_one_id.id])],
  20. }
  21. self.role1_id = self.role_model.create(vals)
  22. # ROLE_2
  23. self.group_multi_currency_id = self.env.ref(
  24. 'base.group_multi_currency')
  25. self.group_settings_id = self.env.ref('base.group_system')
  26. vals = {
  27. 'name': "ROLE_2",
  28. 'implied_ids': [
  29. (6, 0, [self.group_multi_currency_id.id,
  30. self.group_settings_id.id])],
  31. }
  32. self.role2_id = self.role_model.create(vals)
  33. def test_role_1(self):
  34. self.user_id.write(
  35. {'role_line_ids': [(0, 0, {'role_id': self.role1_id.id})]})
  36. user_group_ids = sorted(set(
  37. [group.id for group in self.user_id.groups_id]))
  38. role_group_ids = self.role1_id.trans_implied_ids.ids
  39. role_group_ids.append(self.role1_id.group_id.id)
  40. role_group_ids = sorted(set(role_group_ids))
  41. self.assertEqual(user_group_ids, role_group_ids)
  42. def test_role_2(self):
  43. self.user_id.write(
  44. {'role_line_ids': [(0, 0, {'role_id': self.role2_id.id})]})
  45. user_group_ids = sorted(set(
  46. [group.id for group in self.user_id.groups_id]))
  47. role_group_ids = self.role2_id.trans_implied_ids.ids
  48. role_group_ids.append(self.role2_id.group_id.id)
  49. role_group_ids = sorted(set(role_group_ids))
  50. self.assertEqual(user_group_ids, role_group_ids)
  51. def test_role_1_2(self):
  52. self.user_id.write(
  53. {'role_line_ids': [
  54. (0, 0, {'role_id': self.role1_id.id}),
  55. (0, 0, {'role_id': self.role2_id.id}),
  56. ]})
  57. user_group_ids = sorted(set(
  58. [group.id for group in self.user_id.groups_id]))
  59. role1_group_ids = self.role1_id.trans_implied_ids.ids
  60. role1_group_ids.append(self.role1_id.group_id.id)
  61. role2_group_ids = self.role2_id.trans_implied_ids.ids
  62. role2_group_ids.append(self.role2_id.group_id.id)
  63. role_group_ids = sorted(set(role1_group_ids + role2_group_ids))
  64. self.assertEqual(user_group_ids, role_group_ids)
  65. def test_role_1_2_with_dates(self):
  66. today_str = fields.Date.today()
  67. today = fields.Date.from_string(today_str)
  68. yesterday = today - datetime.timedelta(days=1)
  69. yesterday_str = fields.Date.to_string(yesterday)
  70. self.user_id.write(
  71. {'role_line_ids': [
  72. # Role 1 should be enabled
  73. (0, 0, {'role_id': self.role1_id.id, 'date_from': today_str}),
  74. # Role 2 should be disabled
  75. (0, 0,
  76. {'role_id': self.role2_id.id, 'date_to': yesterday_str}),
  77. ]})
  78. user_group_ids = sorted(set(
  79. [group.id for group in self.user_id.groups_id]))
  80. role1_group_ids = self.role1_id.trans_implied_ids.ids
  81. role1_group_ids.append(self.role1_id.group_id.id)
  82. role_group_ids = sorted(set(role1_group_ids))
  83. self.assertEqual(user_group_ids, role_group_ids)
  84. def test_role_unlink(self):
  85. # Get role1 groups
  86. role1 = self.role_model.browse(self.cr, self.uid, self.role1_id)
  87. role1_group_ids = role1.implied_ids.ids
  88. role1_group_ids.append(role1.group_id.id)
  89. role1_group_ids = sorted(set(role1_group_ids))
  90. # Get role2
  91. role2 = self.role_model.browse(self.cr, self.uid, self.role2_id)
  92. # Configure the user with role1 and role2
  93. self.user_model.write(
  94. self.cr, self.uid, [self.user_id],
  95. {'role_line_ids': [
  96. (0, 0, {'role_id': self.role1_id}),
  97. (0, 0, {'role_id': self.role2_id}),
  98. ]})
  99. user = self.user_model.browse(self.cr, self.uid, self.user_id)
  100. # Remove role2
  101. role2.unlink()
  102. user_group_ids = sorted(set([group.id for group in user.groups_id]))
  103. self.assertEqual(user_group_ids, role1_group_ids)
  104. # Remove role1
  105. role1.unlink()
  106. user_group_ids = sorted(set([group.id for group in user.groups_id]))
  107. self.assertEqual(user_group_ids, [])
  108. def test_role_line_unlink(self):
  109. # Get role1 groups
  110. role1 = self.role_model.browse(self.cr, self.uid, self.role1_id)
  111. role1_group_ids = role1.implied_ids.ids
  112. role1_group_ids.append(role1.group_id.id)
  113. role1_group_ids = sorted(set(role1_group_ids))
  114. # Configure the user with role1 and role2
  115. self.user_model.write(
  116. self.cr, self.uid, [self.user_id],
  117. {'role_line_ids': [
  118. (0, 0, {'role_id': self.role1_id}),
  119. (0, 0, {'role_id': self.role2_id}),
  120. ]})
  121. user = self.user_model.browse(self.cr, self.uid, self.user_id)
  122. # Remove role2 from the user
  123. user.role_line_ids.filtered(
  124. lambda l: l.role_id.id == self.role2_id).unlink()
  125. user_group_ids = sorted(set([group.id for group in user.groups_id]))
  126. self.assertEqual(user_group_ids, role1_group_ids)
  127. # Remove role1 from the user
  128. user.role_line_ids.filtered(
  129. lambda l: l.role_id.id == self.role1_id).unlink()
  130. user_group_ids = sorted(set([group.id for group in user.groups_id]))
  131. self.assertEqual(user_group_ids, [])