Files
zkxw/backend/tests/test_oa_related_approval.py
T

70 lines
2.6 KiB
Python

import unittest
from app.services.oa_related_approval import (
extract_related_approval_links,
flatten_form_fields_for_summary,
merge_relation_targets,
)
class TestFlatten(unittest.TestCase):
def test_skips_layout_and_summarizes_upload(self):
schema = {
"rule": [
{"type": "html", "title": "说明"},
{"type": "input", "field": "reason", "title": "事由"},
{"type": "upload", "field": "files", "title": "附件"},
{"type": "relatedApproval", "field": "prev", "title": "关联"},
{"type": "textarea", "field": "long", "title": "详细说明"},
]
}
data = {
"reason": "出差",
"files": ["a.png", "b.png"],
"prev": ["id1", "id2"],
"long": "很长很长的说明文字" * 5,
}
fields = flatten_form_fields_for_summary(schema, data)
labels = [f["label"] for f in fields]
self.assertNotIn("说明", labels)
self.assertEqual(fields[0], {"label": "事由", "value": "出差"})
self.assertEqual(fields[1]["value"], "2 个")
self.assertEqual(fields[2]["value"], "已关联 2 条")
self.assertTrue(fields[3].get("fullWidth"))
def test_extract_links_with_field_key_and_dedupe(self):
schema = {
"rule": [
{"type": "relatedApproval", "field": "relA"},
{
"type": "fcRow",
"children": [{"type": "relatedApproval", "field": "relB"}],
},
]
}
data = {"relA": ["x", "x", ""], "relB": "solo"}
links = extract_related_approval_links(schema, data)
self.assertEqual(links, [("relA", "x"), ("relB", "solo")])
class TestValidateLinkable(unittest.TestCase):
def test_rejects_non_completed(self):
from app.services.oa_related_approval import assert_linkable_instance
from app.services.oa_engine import OaEngineError
from unittest.mock import MagicMock
inst = MagicMock(status="running", initiator_user_id="u1", tenant_no="t", del_flag=0)
with self.assertRaises(OaEngineError):
assert_linkable_instance(inst, user_id="u1", tenant_no="t")
class TestMergeRelationTargets(unittest.TestCase):
def test_merge_prefers_form_fields(self):
schema = {"rule": [{"type": "relatedApproval", "field": "r1"}]}
m = merge_relation_targets(schema, {"r1": ["a"]}, ["a", "b"])
self.assertEqual(m, [("r1", "a"), (None, "b")])
if __name__ == "__main__":
unittest.main()