test_oa_instance_draft.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. class TestOaInstanceDraftRowToDict(unittest.TestCase):
  7. def _row(self, **kwargs):
  8. base = dict(
  9. id="d1",
  10. app_id="a1",
  11. app_version_id="v1",
  12. title="请假",
  13. form_data_json='{"days":1}',
  14. initiator_select_json='{"n1":["u1"]}',
  15. initiator_dept_id="dept1",
  16. owner_user_id="u-owner",
  17. create_time=datetime(2026, 8, 6, 10, 0, 0),
  18. update_time=datetime(2026, 8, 6, 11, 0, 0),
  19. )
  20. base.update(kwargs)
  21. return SimpleNamespace(**base)
  22. def test_list_shape_without_payload(self):
  23. d = row_to_dict(
  24. self._row(),
  25. app_name="请假申请",
  26. version_no=3,
  27. group_id="g1",
  28. group_name="人事",
  29. )
  30. self.assertEqual(d["id"], "d1")
  31. self.assertEqual(d["appId"], "a1")
  32. self.assertEqual(d["appName"], "请假申请")
  33. self.assertEqual(d["versionNo"], 3)
  34. self.assertEqual(d["status"], "draft")
  35. self.assertEqual(d["updateTime"], "2026-08-06 11:00:00")
  36. self.assertNotIn("formData", d)
  37. def test_detail_includes_payload(self):
  38. d = row_to_dict(self._row(), include_payload=True)
  39. self.assertEqual(d["formData"], {"days": 1})
  40. self.assertEqual(d["initiatorSelectByNode"], {"n1": ["u1"]})
  41. self.assertEqual(d["initiatorDeptId"], "dept1")
  42. def test_access_error_message(self):
  43. err = DraftAccessError("草稿不存在或无权访问")
  44. self.assertEqual(str(err), "草稿不存在或无权访问")
  45. if __name__ == "__main__":
  46. unittest.main()