mirror of
https://github.com/bringout/oca-workflow-process.git
synced 2026-04-19 09:32:10 +02:00
Initial commit: OCA Workflow Process packages (456 packages)
This commit is contained in:
commit
d366e42934
18799 changed files with 1284507 additions and 0 deletions
|
|
@ -0,0 +1,3 @@
|
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import test_access_rights
|
||||
|
|
@ -0,0 +1,377 @@
|
|||
# Copyright 2020 Tecnativa - Víctor Martínez
|
||||
# Copyright 2023 Tecnativa - Stefan Ungureanu
|
||||
# Copyright 2023 Tecnativa - Pedro M. Baeza
|
||||
# Copyright 2024 Tecnativa - Víctor Martínez
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo.tests import Form, common, new_test_user
|
||||
from odoo.tests.common import users
|
||||
|
||||
|
||||
class TestPurchaseOrderSecurity(common.TransactionCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.env = cls.env(
|
||||
context=dict(
|
||||
cls.env.context,
|
||||
mail_create_nolog=True,
|
||||
mail_create_nosubscribe=True,
|
||||
mail_notrack=True,
|
||||
no_reset_password=True,
|
||||
tracking_disable=True,
|
||||
)
|
||||
)
|
||||
# Teams
|
||||
cls.team1 = cls.env["purchase.team"].create({"name": "Team1"})
|
||||
cls.team2 = cls.env["purchase.team"].create({"name": "Team2"})
|
||||
# Users
|
||||
# User in group_purchase_own_orders
|
||||
cls.user_group_purchase_own_orders = new_test_user(
|
||||
cls.env,
|
||||
login="group_purchase_own_orders",
|
||||
groups="purchase_security.group_purchase_own_orders",
|
||||
)
|
||||
# User 1 in group_purchase_group_orders
|
||||
cls.user_group_team_1 = new_test_user(
|
||||
cls.env,
|
||||
login="group_purchase_team_1_orders",
|
||||
groups="purchase_security.group_purchase_group_orders",
|
||||
)
|
||||
# Adding user 1 to both teams
|
||||
cls.team1.write({"user_ids": [(4, cls.user_group_team_1.id)]})
|
||||
cls.team2.write({"user_ids": [(4, cls.user_group_team_1.id)]})
|
||||
# User 2 in group_purchase_group_orders
|
||||
cls.user_group_team_2 = new_test_user(
|
||||
cls.env,
|
||||
login="group_purchase_team_2_orders",
|
||||
groups="purchase_security.group_purchase_group_orders",
|
||||
)
|
||||
# Adding user 2 to only one team
|
||||
cls.team1.write({"user_ids": [(4, cls.user_group_team_2.id)]})
|
||||
# User with group permission but without being assigned to any team
|
||||
cls.user_group_team_3 = new_test_user(
|
||||
cls.env,
|
||||
login="group_purchase_team_3_orders",
|
||||
groups="purchase_security.group_purchase_group_orders",
|
||||
)
|
||||
# Purchase order user
|
||||
cls.user_po_user = new_test_user(
|
||||
cls.env, login="po_user", groups="purchase.group_purchase_user"
|
||||
)
|
||||
# Purchase order manager
|
||||
cls.user_po_manager = new_test_user(
|
||||
cls.env, login="po_manager", groups="purchase.group_purchase_manager"
|
||||
)
|
||||
# User without groups
|
||||
cls.user_without_groups = new_test_user(cls.env, login="without_groups")
|
||||
# Partner for the POs
|
||||
cls.partner_po = cls.env["res.partner"].create({"name": "PO Partner"})
|
||||
# Purchase Order
|
||||
cls.orders = cls.env["purchase.order"].create(
|
||||
(
|
||||
{
|
||||
"name": "po_security_1",
|
||||
"partner_id": cls.partner_po.id,
|
||||
"user_id": False, # No Purchase Representative
|
||||
"team_id": False, # No automatic team
|
||||
},
|
||||
{
|
||||
"name": "po_security_2",
|
||||
"user_id": cls.user_po_user.id,
|
||||
"partner_id": cls.partner_po.id,
|
||||
},
|
||||
{
|
||||
"name": "po_security_3",
|
||||
"user_id": cls.user_po_manager.id,
|
||||
"partner_id": cls.partner_po.id,
|
||||
"team_id": cls.team1.id,
|
||||
},
|
||||
{
|
||||
"name": "po_security_4",
|
||||
"user_id": cls.user_group_purchase_own_orders.id,
|
||||
"partner_id": cls.partner_po.id,
|
||||
"team_id": cls.team2.id,
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
@users("group_purchase_team_1_orders")
|
||||
def test_new_purchase_order(self):
|
||||
order_form_1 = Form(self.env["purchase.order"])
|
||||
self.assertEqual(order_form_1.user_id, self.user_group_team_1)
|
||||
self.assertEqual(order_form_1.team_id, self.team1)
|
||||
order_form_1.partner_id = self.partner_po
|
||||
self.assertEqual(order_form_1.user_id, self.user_group_team_1)
|
||||
self.assertEqual(order_form_1.team_id, self.team1)
|
||||
# order_form with default_user_id (user_group_team_2 > team_2)
|
||||
self.team1.write({"user_ids": [(3, self.user_group_team_2.id)]})
|
||||
self.team2.write({"user_ids": [(4, self.user_group_team_2.id)]})
|
||||
order_form_2 = Form(
|
||||
self.env["purchase.order"].with_context(
|
||||
default_user_id=self.user_group_team_2.id
|
||||
)
|
||||
)
|
||||
self.assertEqual(order_form_2.user_id, self.user_group_team_2)
|
||||
self.assertEqual(order_form_2.team_id, self.team2)
|
||||
order_form_2.partner_id = self.partner_po
|
||||
self.assertEqual(order_form_2.user_id, self.user_group_team_2)
|
||||
self.assertEqual(order_form_2.team_id, self.team2)
|
||||
# order_form with default_user_id (user_group_team_3 > without team)
|
||||
order_form_2 = Form(
|
||||
self.env["purchase.order"].with_context(
|
||||
default_user_id=self.user_group_team_3.id
|
||||
)
|
||||
)
|
||||
self.assertEqual(order_form_2.user_id, self.user_group_team_3)
|
||||
self.assertEqual(order_form_2.team_id, self.team1)
|
||||
order_form_2.partner_id = self.partner_po
|
||||
self.assertEqual(order_form_2.user_id, self.user_group_team_3)
|
||||
self.assertEqual(order_form_2.team_id, self.team1)
|
||||
|
||||
def _check_permission(self, user, team, expected):
|
||||
self.partner_po.write(
|
||||
{
|
||||
"purchase_user_id": user.id if user else user,
|
||||
"purchase_team_id": team.id if team else team,
|
||||
}
|
||||
)
|
||||
domain = [("id", "=", self.partner_po.id)]
|
||||
obj = self.env[self.partner_po._name]
|
||||
self.assertEqual(bool(obj.search(domain)), expected)
|
||||
|
||||
def test_po_auto_team(self):
|
||||
order = self.env["purchase.order"].search([("name", "=", "po_security_2")])
|
||||
self.assertEqual(order.team_id, self.team1)
|
||||
|
||||
def test_access_user_user_group_purchase_own_orders(self):
|
||||
# User in group should have access to it's own PO
|
||||
# and to those w/o Purchase Representative
|
||||
self.assertEqual(
|
||||
len(
|
||||
self.env["purchase.order"]
|
||||
.with_user(self.user_group_purchase_own_orders)
|
||||
.search([])
|
||||
),
|
||||
2,
|
||||
)
|
||||
self.assertFalse(
|
||||
self.orders.filtered(
|
||||
lambda x: x.user_id == self.user_group_purchase_own_orders
|
||||
)
|
||||
.with_user(self.user_group_purchase_own_orders)[0]
|
||||
.is_user_id_editable
|
||||
)
|
||||
|
||||
def test_access_user_po_user(self):
|
||||
# Normal PO user should have access to all of them
|
||||
# because he is not in group
|
||||
self.assertEqual(
|
||||
len(
|
||||
self.env["purchase.order"]
|
||||
.with_user(self.user_po_user)
|
||||
.search([("name", "like", "po_security")])
|
||||
),
|
||||
4,
|
||||
)
|
||||
self.assertTrue(self.orders.with_user(self.user_po_user)[0].is_user_id_editable)
|
||||
|
||||
def test_access_user_po_manager(self):
|
||||
# Manager PO user should have access to all of them
|
||||
self.assertEqual(
|
||||
len(
|
||||
self.env["purchase.order"]
|
||||
.with_user(self.user_po_manager)
|
||||
.search([("name", "like", "po_security")])
|
||||
),
|
||||
4,
|
||||
)
|
||||
self.assertTrue(
|
||||
self.orders.with_user(self.user_po_manager)[1].is_user_id_editable
|
||||
)
|
||||
|
||||
def test_access_user_without_groups(self):
|
||||
# User without groups should not have access to POs
|
||||
self.assertEqual(
|
||||
len(self.env["purchase.order"].with_user(self.user_without_groups).read()),
|
||||
0,
|
||||
)
|
||||
|
||||
def test_access_user_user_group_purchase_group_orders_1(self):
|
||||
# User in group should have access PO's without any team assigned,
|
||||
# and to those to whose team he belongs. In this case, it belongs to
|
||||
# both teams
|
||||
self.assertEqual(
|
||||
len(
|
||||
self.env["purchase.order"]
|
||||
.with_user(self.user_group_team_1)
|
||||
.search([("name", "like", "po_security")])
|
||||
),
|
||||
4,
|
||||
)
|
||||
|
||||
def test_access_user_user_group_purchase_group_orders_2(self):
|
||||
# User in group should have access PO's without any team assigned,
|
||||
# and to those to whose team he belongs. In this case, it belongs to
|
||||
# only one team, so the other order won't be seen
|
||||
self.assertEqual(
|
||||
len(
|
||||
self.env["purchase.order"]
|
||||
.with_user(self.user_group_team_2)
|
||||
.search([("name", "like", "po_security")])
|
||||
),
|
||||
3,
|
||||
)
|
||||
|
||||
def test_access_user_user_group_purchase_group_orders_3(self):
|
||||
# User in group should have access PO's without any team assigned,
|
||||
# and to those to whose team they belongs. In this case, it does not
|
||||
# belongs to any team, so the other orders won't be seen
|
||||
self.assertEqual(
|
||||
len(
|
||||
self.env["purchase.order"]
|
||||
.with_user(self.user_group_team_3)
|
||||
.search([("name", "like", "po_security")])
|
||||
),
|
||||
1,
|
||||
)
|
||||
|
||||
@users("po_user")
|
||||
def test_partner_permissions_01(self):
|
||||
"""User with purchase.group_purchase_user group."""
|
||||
self._check_permission(False, False, True)
|
||||
self._check_permission(False, self.team1, True)
|
||||
self._check_permission(False, self.team2, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, False, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, self.team1, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, self.team2, True)
|
||||
self._check_permission(self.user_group_team_1, False, True)
|
||||
self._check_permission(self.user_group_team_1, self.team1, True)
|
||||
self._check_permission(self.user_group_team_1, self.team2, True)
|
||||
self._check_permission(self.user_group_team_2, False, True)
|
||||
self._check_permission(self.user_group_team_2, self.team1, True)
|
||||
self._check_permission(self.user_group_team_2, self.team2, True)
|
||||
self._check_permission(self.user_group_team_3, False, True)
|
||||
self._check_permission(self.user_group_team_3, self.team1, True)
|
||||
self._check_permission(self.user_group_team_3, self.team2, True)
|
||||
self._check_permission(self.user_po_user, False, True)
|
||||
self._check_permission(self.user_po_user, self.team1, True)
|
||||
self._check_permission(self.user_po_user, self.team2, True)
|
||||
self._check_permission(self.user_po_manager, False, True)
|
||||
self._check_permission(self.user_po_manager, self.team1, True)
|
||||
self._check_permission(self.user_po_manager, self.team2, True)
|
||||
self._check_permission(self.user_without_groups, False, True)
|
||||
self._check_permission(self.user_without_groups, self.team1, True)
|
||||
self._check_permission(self.user_without_groups, self.team2, True)
|
||||
|
||||
@users("group_purchase_own_orders")
|
||||
def test_partner_permissions_02(self):
|
||||
"""User with purchase_security.group_purchase_own_orders group."""
|
||||
self._check_permission(False, False, True)
|
||||
self._check_permission(False, self.team1, False)
|
||||
self._check_permission(False, self.team2, False)
|
||||
self._check_permission(self.user_group_purchase_own_orders, False, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, self.team1, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, self.team2, True)
|
||||
self._check_permission(self.user_group_team_1, False, False)
|
||||
self._check_permission(self.user_group_team_1, self.team1, False)
|
||||
self._check_permission(self.user_group_team_1, self.team2, False)
|
||||
self._check_permission(self.user_group_team_2, False, False)
|
||||
self._check_permission(self.user_group_team_2, self.team1, False)
|
||||
self._check_permission(self.user_group_team_2, self.team2, False)
|
||||
self._check_permission(self.user_group_team_3, False, False)
|
||||
self._check_permission(self.user_group_team_3, self.team1, False)
|
||||
self._check_permission(self.user_group_team_3, self.team2, False)
|
||||
self._check_permission(self.user_po_user, False, False)
|
||||
self._check_permission(self.user_po_user, self.team1, False)
|
||||
self._check_permission(self.user_po_user, self.team2, False)
|
||||
self._check_permission(self.user_po_manager, False, False)
|
||||
self._check_permission(self.user_po_manager, self.team1, False)
|
||||
self._check_permission(self.user_po_manager, self.team2, False)
|
||||
self._check_permission(self.user_without_groups, False, False)
|
||||
self._check_permission(self.user_without_groups, self.team1, False)
|
||||
self._check_permission(self.user_without_groups, self.team2, False)
|
||||
|
||||
@users("group_purchase_team_1_orders")
|
||||
def test_partner_permissions_03(self):
|
||||
"""User with purchase_security.group_purchase_group_orders group."""
|
||||
self._check_permission(False, False, True)
|
||||
self._check_permission(False, self.team1, True)
|
||||
self._check_permission(False, self.team2, False)
|
||||
self._check_permission(self.user_group_purchase_own_orders, False, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, self.team1, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, self.team2, False)
|
||||
self._check_permission(self.user_group_team_1, False, True)
|
||||
self._check_permission(self.user_group_team_1, self.team1, True)
|
||||
self._check_permission(self.user_group_team_1, self.team2, False)
|
||||
self._check_permission(self.user_group_team_2, False, True)
|
||||
self._check_permission(self.user_group_team_2, self.team1, True)
|
||||
self._check_permission(self.user_group_team_2, self.team2, False)
|
||||
self._check_permission(self.user_group_team_3, False, True)
|
||||
self._check_permission(self.user_group_team_3, self.team1, True)
|
||||
self._check_permission(self.user_group_team_3, self.team2, False)
|
||||
self._check_permission(self.user_po_user, False, True)
|
||||
self._check_permission(self.user_po_user, self.team1, True)
|
||||
self._check_permission(self.user_po_user, self.team2, False)
|
||||
self._check_permission(self.user_po_manager, False, True)
|
||||
self._check_permission(self.user_po_manager, self.team1, True)
|
||||
self._check_permission(self.user_po_manager, self.team2, False)
|
||||
self._check_permission(self.user_without_groups, False, True)
|
||||
self._check_permission(self.user_without_groups, self.team1, True)
|
||||
self._check_permission(self.user_without_groups, self.team2, False)
|
||||
|
||||
@users("po_manager")
|
||||
def test_partner_permissions_04(self):
|
||||
"""User with purchase.group_purchase_manager group."""
|
||||
self._check_permission(False, False, True)
|
||||
self._check_permission(False, self.team1, True)
|
||||
self._check_permission(False, self.team2, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, False, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, self.team1, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, self.team2, True)
|
||||
self._check_permission(self.user_group_team_1, False, True)
|
||||
self._check_permission(self.user_group_team_1, self.team1, True)
|
||||
self._check_permission(self.user_group_team_1, self.team2, True)
|
||||
self._check_permission(self.user_group_team_2, False, True)
|
||||
self._check_permission(self.user_group_team_2, self.team1, True)
|
||||
self._check_permission(self.user_group_team_2, self.team2, True)
|
||||
self._check_permission(self.user_group_team_3, False, True)
|
||||
self._check_permission(self.user_group_team_3, self.team1, True)
|
||||
self._check_permission(self.user_group_team_3, self.team2, True)
|
||||
self._check_permission(self.user_po_user, False, True)
|
||||
self._check_permission(self.user_po_user, self.team1, True)
|
||||
self._check_permission(self.user_po_user, self.team2, True)
|
||||
self._check_permission(self.user_po_manager, False, True)
|
||||
self._check_permission(self.user_po_manager, self.team1, True)
|
||||
self._check_permission(self.user_po_manager, self.team2, True)
|
||||
self._check_permission(self.user_without_groups, False, True)
|
||||
self._check_permission(self.user_without_groups, self.team1, True)
|
||||
self._check_permission(self.user_without_groups, self.team2, True)
|
||||
|
||||
@users("without_groups")
|
||||
def test_partner_permissions_05(self):
|
||||
"""User witout groups"""
|
||||
self._check_permission(False, False, True)
|
||||
self._check_permission(False, self.team1, True)
|
||||
self._check_permission(False, self.team2, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, False, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, self.team1, True)
|
||||
self._check_permission(self.user_group_purchase_own_orders, self.team2, True)
|
||||
self._check_permission(self.user_group_team_1, False, True)
|
||||
self._check_permission(self.user_group_team_1, self.team1, True)
|
||||
self._check_permission(self.user_group_team_1, self.team2, True)
|
||||
self._check_permission(self.user_group_team_2, False, True)
|
||||
self._check_permission(self.user_group_team_2, self.team1, True)
|
||||
self._check_permission(self.user_group_team_2, self.team2, True)
|
||||
self._check_permission(self.user_group_team_3, False, True)
|
||||
self._check_permission(self.user_group_team_3, self.team1, True)
|
||||
self._check_permission(self.user_group_team_3, self.team2, True)
|
||||
self._check_permission(self.user_po_user, False, True)
|
||||
self._check_permission(self.user_po_user, self.team1, True)
|
||||
self._check_permission(self.user_po_user, self.team2, True)
|
||||
self._check_permission(self.user_po_manager, False, True)
|
||||
self._check_permission(self.user_po_manager, self.team1, True)
|
||||
self._check_permission(self.user_po_manager, self.team2, True)
|
||||
self._check_permission(self.user_without_groups, False, True)
|
||||
self._check_permission(self.user_without_groups, self.team1, True)
|
||||
self._check_permission(self.user_without_groups, self.team2, True)
|
||||
Loading…
Add table
Add a link
Reference in a new issue