| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- """OA 发起审批草稿序列化与访问错误"""
- import unittest
- from datetime import datetime
- from types import SimpleNamespace
- from app.crud.oa_instance_draft import DraftAccessError, row_to_dict
- from app.services.oa_related_approval import flatten_form_fields_for_summary
- class TestOaInstanceDraftRowToDict(unittest.TestCase):
- def _row(self, **kwargs):
- base = dict(
- id="d1",
- app_id="a1",
- app_version_id="v1",
- title="请假",
- form_data_json='{"days":1}',
- initiator_select_json='{"n1":["u1"]}',
- initiator_dept_id="dept1",
- owner_user_id="u-owner",
- create_time=datetime(2026, 8, 6, 10, 0, 0),
- update_time=datetime(2026, 8, 6, 11, 0, 0),
- )
- base.update(kwargs)
- return SimpleNamespace(**base)
- def test_list_shape_without_payload(self):
- d = row_to_dict(
- self._row(),
- app_name="请假申请",
- version_no=3,
- group_id="g1",
- group_name="人事",
- )
- self.assertEqual(d["id"], "d1")
- self.assertEqual(d["appId"], "a1")
- self.assertEqual(d["appName"], "请假申请")
- self.assertEqual(d["versionNo"], 3)
- self.assertEqual(d["status"], "draft")
- self.assertEqual(d["updateTime"], "2026-08-06 11:00:00")
- self.assertNotIn("formData", d)
- def test_detail_includes_payload(self):
- d = row_to_dict(self._row(), include_payload=True)
- self.assertEqual(d["formData"], {"days": 1})
- self.assertEqual(d["initiatorSelectByNode"], {"n1": ["u1"]})
- self.assertEqual(d["initiatorDeptId"], "dept1")
- def test_access_error_message(self):
- err = DraftAccessError("草稿不存在或无权访问")
- self.assertEqual(str(err), "草稿不存在或无权访问")
- def test_preview_fields_first_three(self):
- schema = {
- "rule": [
- {"type": "input", "field": "a", "title": "数字输入框"},
- {"type": "input", "field": "b", "title": "出差事由"},
- {"type": "input", "field": "c", "title": "出差天数"},
- {"type": "input", "field": "d", "title": "备注"},
- ]
- }
- data = {"a": "123", "b": "开会", "c": "4", "d": "忽略"}
- preview = [
- {"label": f.get("label") or "", "value": f.get("value") or ""}
- for f in flatten_form_fields_for_summary(schema, data)[:3]
- ]
- self.assertEqual(len(preview), 3)
- self.assertEqual(preview[0], {"label": "数字输入框", "value": "123"})
- self.assertEqual(preview[1], {"label": "出差事由", "value": "开会"})
- self.assertEqual(preview[2], {"label": "出差天数", "value": "4"})
- if __name__ == "__main__":
- unittest.main()
|