75 lines
2.8 KiB
Python
75 lines
2.8 KiB
Python
"""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()
|