from odoo.tests.common import TransactionCase, tagged from odoo.exceptions import UserError @tagged('-at_install', 'post_install', 'fp_perms') class TestSalesManagerGate(TransactionCase): def setUp(self): super().setUp() Users = self.env['res.users'].with_context(no_reset_password=True) self.u_sr = Users.create({ 'login': 'gate_sr', 'name': 'Gate SR', 'email': 'gate_sr@example.com', 'groups_id': [(6, 0, [self.env.ref('fusion_plating.group_fp_sales_rep').id])], }) self.u_smg = Users.create({ 'login': 'gate_smg', 'name': 'Gate SMg', 'email': 'gate_smg@example.com', 'groups_id': [(6, 0, [self.env.ref('fusion_plating.group_fp_sales_manager').id])], }) partner = self.env['res.partner'].create({'name': 'Gate Test Customer'}) product = self.env['product.product'].create({'name': 'Gate Test Product'}) self.so = self.env['sale.order'].create({ 'partner_id': partner.id, 'order_line': [(0, 0, { 'product_id': product.id, 'product_uom_qty': 1, 'price_unit': 100, })], }) def test_sales_rep_cannot_confirm(self): with self.assertRaises(UserError): self.so.with_user(self.u_sr).action_confirm() def test_sales_manager_can_confirm(self): self.so.with_user(self.u_smg).action_confirm() self.assertEqual(self.so.state, 'sale') def test_manager_can_confirm(self): # Manager implies Sales Manager via the diamond — should also be able to confirm u_mgr = self.env['res.users'].with_context(no_reset_password=True).create({ 'login': 'gate_mgr', 'name': 'Gate Mgr', 'email': 'gate_mgr@example.com', 'groups_id': [(6, 0, [self.env.ref('fusion_plating.group_fp_manager').id])], }) self.so.with_user(u_mgr).action_confirm() self.assertEqual(self.so.state, 'sale')