test_oa_instance_comment.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. """OA 实例评论:附件枚举与引用校验"""
  2. import unittest
  3. from app.services.oa_instance_comment import (
  4. enumerate_form_attachments,
  5. normalize_attachment_refs,
  6. )
  7. class TestEnumerateFormAttachments(unittest.TestCase):
  8. def test_groups_upload_fields(self):
  9. schema = {
  10. "rule": [
  11. {
  12. "type": "upload",
  13. "field": "files",
  14. "title": "附件",
  15. },
  16. {"type": "input", "field": "name", "title": "名称"},
  17. ]
  18. }
  19. form = {
  20. "files": [
  21. {"url": "https://x/a.pdf", "name": "a.pdf"},
  22. {"url": "https://x/b.pdf", "name": "b.pdf"},
  23. ],
  24. "name": "demo",
  25. }
  26. items = enumerate_form_attachments(schema, form)
  27. self.assertEqual(len(items), 1)
  28. self.assertEqual(items[0]["fieldKey"], "files")
  29. self.assertEqual(items[0]["fieldLabel"], "附件")
  30. self.assertEqual(len(items[0]["files"]), 2)
  31. self.assertEqual(items[0]["files"][0]["fileName"], "a.pdf")
  32. def test_skips_empty_upload(self):
  33. schema = {"rule": [{"type": "fcUpload", "field": "f", "title": "F"}]}
  34. self.assertEqual(enumerate_form_attachments(schema, {"f": []}), [])
  35. class TestNormalizeAttachmentRefs(unittest.TestCase):
  36. def test_accepts_valid_ref(self):
  37. schema = {"rule": [{"type": "upload", "field": "files", "title": "附件"}]}
  38. form = {"files": [{"url": "https://x/a.pdf", "name": "a.pdf"}]}
  39. out = normalize_attachment_refs(
  40. schema,
  41. form,
  42. [{"fieldKey": "files", "url": "https://x/a.pdf", "fileName": "wrong"}],
  43. )
  44. self.assertEqual(out[0]["fileName"], "a.pdf")
  45. self.assertEqual(out[0]["fieldLabel"], "附件")
  46. def test_rejects_foreign_url(self):
  47. from app.services.oa_engine import OaEngineError
  48. schema = {"rule": [{"type": "upload", "field": "files", "title": "附件"}]}
  49. form = {"files": [{"url": "https://x/a.pdf", "name": "a.pdf"}]}
  50. with self.assertRaises(OaEngineError):
  51. normalize_attachment_refs(
  52. schema,
  53. form,
  54. [{"fieldKey": "files", "url": "https://evil/x.pdf"}],
  55. )