from odoo.tests.common import TransactionCase, tagged from odoo.exceptions import AccessError @tagged('-at_install', 'post_install', 'fp_perms') class TestQualitySplit(TransactionCase): """Section 2.C of spec: Manager handles reactive Quality; QM exclusively owns CAPA close, Audit, AVL, Customer Spec, FAIR/Nadcap signing.""" def setUp(self): super().setUp() Users = self.env['res.users'].with_context(no_reset_password=True) self.u_mgr = Users.create({ 'login': 'qsplit_mgr', 'name': 'QSplit Mgr', 'email': 'qsplit_mgr@example.com', 'groups_id': [(6, 0, [self.env.ref('fusion_plating.group_fp_manager').id])], }) self.u_qm = Users.create({ 'login': 'qsplit_qm', 'name': 'QSplit QM', 'email': 'qsplit_qm@example.com', 'groups_id': [(6, 0, [self.env.ref('fusion_plating.group_fp_quality_manager').id])], }) # CAPA: Manager read-only, QM full def test_manager_can_read_capa(self): self.env['fusion.plating.capa'].with_user(self.u_mgr).check_access_rights('read') def test_manager_cannot_write_capa(self): with self.assertRaises(AccessError): self.env['fusion.plating.capa'].with_user(self.u_mgr).check_access_rights('write') def test_manager_cannot_create_capa(self): with self.assertRaises(AccessError): self.env['fusion.plating.capa'].with_user(self.u_mgr).check_access_rights('create') def test_qm_can_write_capa(self): self.env['fusion.plating.capa'].with_user(self.u_qm).check_access_rights('write') # Audit: Manager read-only, QM full def test_manager_can_read_audit(self): Audit = self.env.get('fusion.plating.audit') if not Audit: self.skipTest('fusion.plating.audit model not available') Audit.with_user(self.u_mgr).check_access_rights('read') def test_manager_cannot_write_audit(self): Audit = self.env.get('fusion.plating.audit') if not Audit: self.skipTest('fusion.plating.audit model not available') with self.assertRaises(AccessError): Audit.with_user(self.u_mgr).check_access_rights('write') def test_qm_can_write_audit(self): Audit = self.env.get('fusion.plating.audit') if not Audit: self.skipTest('fusion.plating.audit model not available') Audit.with_user(self.u_qm).check_access_rights('write') # NCR: Manager full def test_manager_can_create_ncr(self): self.env['fusion.plating.ncr'].with_user(self.u_mgr).check_access_rights('create') def test_manager_can_write_ncr(self): self.env['fusion.plating.ncr'].with_user(self.u_mgr).check_access_rights('write') # Hold: Manager full def test_manager_can_create_hold(self): self.env['fusion.plating.quality.hold'].with_user(self.u_mgr).check_access_rights('create') # AVL: Manager read-only, QM full def test_manager_can_read_avl(self): Avl = self.env.get('fusion.plating.avl') if not Avl: self.skipTest('fusion.plating.avl model not available') Avl.with_user(self.u_mgr).check_access_rights('read') def test_manager_cannot_write_avl(self): Avl = self.env.get('fusion.plating.avl') if not Avl: self.skipTest('fusion.plating.avl model not available') with self.assertRaises(AccessError): Avl.with_user(self.u_mgr).check_access_rights('write') # Customer Spec: Manager read-only, QM full def test_manager_can_read_customer_spec(self): self.env['fusion.plating.customer.spec'].with_user(self.u_mgr).check_access_rights('read') def test_manager_cannot_write_customer_spec(self): with self.assertRaises(AccessError): self.env['fusion.plating.customer.spec'].with_user(self.u_mgr).check_access_rights('write')