import unittest from pathlib import Path from services.field_perms import FIELD_REGISTRY, FIELD_RESP_KEYS, _FIELD_REGISTRY_ALIASES, _PAGE_ALIASES ROOT = Path(__file__).resolve().parents[1] APP = (ROOT / 'static' / 'js' / 'app.js').read_text(encoding='utf-8') class FieldPermissionCoverageTest(unittest.TestCase): def test_product_packaging_is_independent_registry(self): self.assertIn('product_packaging', FIELD_REGISTRY) self.assertNotEqual(FIELD_REGISTRY['product_packaging'], FIELD_REGISTRY['product_new']) self.assertNotIn('product_packaging', _FIELD_REGISTRY_ALIASES) self.assertEqual(_PAGE_ALIASES['product_packaging'], ['product_packaging']) keys = {f['key'] for f in FIELD_REGISTRY['product_packaging']} self.assertIn('供应商', keys) self.assertIn('单价/元', keys) self.assertIn('货款/元', keys) def test_product_packaging_response_keys_are_mapped(self): for label, key in [('供应商','supplier'), ('单价/元','unit_price'), ('货款/元','amount')]: self.assertEqual(FIELD_RESP_KEYS[('product_packaging', label)][0], key) def test_detail_popup_uses_field_permissions(self): self.assertIn("window._canViewField('planning', permissionField)", APP) self.assertIn("window._canViewField('bom', '成本价')", APP) self.assertIn("window._canViewField('bom', '供应商')", APP) def test_new_packaging_table_uses_independent_permissions(self): self.assertIn("_hasFieldPerm('product_packaging', f.label, 'view')", APP) if __name__ == '__main__': unittest.main()