import unittest from app.services.oa_dept_select import validate_dept_form_values from app.services.oa_owner_fields import apply_owner_field_defaults from app.services.oa_person_select import validate_person_form_values class TestOaOwnerFields(unittest.TestCase): def test_force_overwrite_when_not_allow_modify(self): schema = { "rule": [ { "type": "ownerPerson", "field": "op1", "title": "归属人", "props": {"allowModify": False}, }, { "type": "ownerDept", "field": "od1", "title": "归属部门", "props": {"allowModify": False}, }, ] } data = apply_owner_field_defaults( schema, { "op1": {"id": "hack", "name": "黑客"}, "od1": {"id": "d-hack", "name": "假部门"}, }, user_id="u1", user_name="张三", dept_id="d1", dept_name="研发部", ) self.assertEqual(data["op1"], {"id": "u1", "name": "张三"}) self.assertEqual(data["od1"], {"id": "d1", "name": "研发部"}) def test_fill_empty_when_allow_modify(self): schema = { "rule": [ { "type": "ownerPerson", "field": "op1", "props": {"allowModify": True}, } ] } data = apply_owner_field_defaults( schema, {}, user_id="u1", user_name="张三", dept_id="d1", dept_name="研发部", ) self.assertEqual(data["op1"], {"id": "u1", "name": "张三"}) def test_keep_user_value_when_allow_modify(self): schema = { "rule": [ { "type": "ownerPerson", "field": "op1", "props": {"allowModify": True}, } ] } data = apply_owner_field_defaults( schema, {"op1": {"id": "u2", "name": "李四"}}, user_id="u1", user_name="张三", dept_id="d1", dept_name="研发部", ) self.assertEqual(data["op1"], {"id": "u2", "name": "李四"}) def test_validate_owner_person_single(self): schema = { "rule": [{"type": "ownerPerson", "field": "op1", "title": "归属人"}] } self.assertEqual( validate_person_form_values( schema, {"op1": {"id": "u1", "name": "张三"}} ), [], ) errs = validate_person_form_values( schema, {"op1": [{"id": "u1", "name": "张三"}]} ) self.assertTrue(any("单个" in e for e in errs)) def test_validate_owner_dept_single(self): schema = { "rule": [{"type": "ownerDept", "field": "od1", "title": "归属部门"}] } self.assertEqual( validate_dept_form_values(schema, {"od1": {"id": "d1", "name": "研发"}}), [], ) if __name__ == "__main__": unittest.main()