Files
zkxw/backend/tests/test_oa_instance_draft.py
T
2026-08-13 14:31:57 +08:00

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()