70 lines
2.6 KiB
Python
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()
|