test_oa_instance_draft.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. """OA 发起审批草稿序列化与访问错误"""
  2. import unittest
  3. from datetime import datetime
  4. from types import SimpleNamespace
  5. from app.crud.oa_instance_draft import DraftAccessError, row_to_dict
  6. from app.services.oa_related_approval import flatten_form_fields_for_summary
  7. class TestOaInstanceDraftRowToDict(unittest.TestCase):
  8. def _row(self, **kwargs):
  9. base = dict(
  10. id="d1",
  11. app_id="a1",
  12. app_version_id="v1",
  13. title="请假",
  14. form_data_json='{"days":1}',
  15. initiator_select_json='{"n1":["u1"]}',
  16. initiator_dept_id="dept1",
  17. owner_user_id="u-owner",
  18. create_time=datetime(2026, 8, 6, 10, 0, 0),
  19. update_time=datetime(2026, 8, 6, 11, 0, 0),
  20. )
  21. base.update(kwargs)
  22. return SimpleNamespace(**base)
  23. def test_list_shape_without_payload(self):
  24. d = row_to_dict(
  25. self._row(),
  26. app_name="请假申请",
  27. version_no=3,
  28. group_id="g1",
  29. group_name="人事",
  30. )
  31. self.assertEqual(d["id"], "d1")
  32. self.assertEqual(d["appId"], "a1")
  33. self.assertEqual(d["appName"], "请假申请")
  34. self.assertEqual(d["versionNo"], 3)
  35. self.assertEqual(d["status"], "draft")
  36. self.assertEqual(d["updateTime"], "2026-08-06 11:00:00")
  37. self.assertNotIn("formData", d)
  38. def test_detail_includes_payload(self):
  39. d = row_to_dict(self._row(), include_payload=True)
  40. self.assertEqual(d["formData"], {"days": 1})
  41. self.assertEqual(d["initiatorSelectByNode"], {"n1": ["u1"]})
  42. self.assertEqual(d["initiatorDeptId"], "dept1")
  43. def test_access_error_message(self):
  44. err = DraftAccessError("草稿不存在或无权访问")
  45. self.assertEqual(str(err), "草稿不存在或无权访问")
  46. def test_preview_fields_first_three(self):
  47. schema = {
  48. "rule": [
  49. {"type": "input", "field": "a", "title": "数字输入框"},
  50. {"type": "input", "field": "b", "title": "出差事由"},
  51. {"type": "input", "field": "c", "title": "出差天数"},
  52. {"type": "input", "field": "d", "title": "备注"},
  53. ]
  54. }
  55. data = {"a": "123", "b": "开会", "c": "4", "d": "忽略"}
  56. preview = [
  57. {"label": f.get("label") or "", "value": f.get("value") or ""}
  58. for f in flatten_form_fields_for_summary(schema, data)[:3]
  59. ]
  60. self.assertEqual(len(preview), 3)
  61. self.assertEqual(preview[0], {"label": "数字输入框", "value": "123"})
  62. self.assertEqual(preview[1], {"label": "出差事由", "value": "开会"})
  63. self.assertEqual(preview[2], {"label": "出差天数", "value": "4"})
  64. if __name__ == "__main__":
  65. unittest.main()