Implementer-flagged concern: plan template referenced fp.approved.vendor.list but actual model id is fusion.plating.avl. Tests were silently skipping instead of exercising the AVL split. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
91 lines
3.8 KiB
Python
91 lines
3.8 KiB
Python
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')
|