| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- import unittest
- from app.services.oa_dept_select import (
- dept_contains_match,
- extract_dept_ids,
- validate_dept_form_values,
- )
- class TestValidateDeptFormValues(unittest.TestCase):
- def test_multiple_ok(self):
- schema = {
- "rule": [
- {
- "type": "dept",
- "field": "depts",
- "title": "部门",
- "$required": True,
- "props": {"multiple": True, "max": 2},
- }
- ]
- }
- data = {
- "depts": [
- {"id": "d1", "name": "中科兴皖 / 研发"},
- {"id": "d2", "name": "中科兴皖 / 质量"},
- ]
- }
- self.assertEqual(validate_dept_form_values(schema, data), [])
- def test_required_empty_array(self):
- schema = {
- "rule": [
- {
- "type": "dept",
- "field": "depts",
- "$required": True,
- "props": {"multiple": True},
- }
- ]
- }
- errs = validate_dept_form_values(schema, {"depts": []})
- self.assertTrue(any("必填" in e or "部门" in e for e in errs))
- def test_single_must_be_object(self):
- schema = {
- "rule": [
- {
- "type": "dept",
- "field": "dept",
- "props": {"multiple": False},
- }
- ]
- }
- errs = validate_dept_form_values(schema, {"dept": [{"id": "d1", "name": "A"}]})
- self.assertTrue(len(errs) >= 1)
- def test_max_exceeded(self):
- schema = {
- "rule": [
- {
- "type": "dept",
- "field": "depts",
- "props": {"multiple": True, "max": 1},
- }
- ]
- }
- data = {
- "depts": [
- {"id": "d1", "name": "A"},
- {"id": "d2", "name": "B"},
- ]
- }
- errs = validate_dept_form_values(schema, data)
- self.assertTrue(any("最大" in e or "上限" in e for e in errs))
- def test_max_exceeded_string_max(self):
- schema = {
- "rule": [
- {
- "type": "dept",
- "field": "depts",
- "props": {"multiple": True, "max": "1"},
- }
- ]
- }
- data = {
- "depts": [
- {"id": "d1", "name": "A"},
- {"id": "d2", "name": "B"},
- ]
- }
- errs = validate_dept_form_values(schema, data)
- self.assertTrue(any("最大" in e or "上限" in e for e in errs))
- def test_nested_fc_row(self):
- schema = {
- "rule": [
- {
- "type": "fcRow",
- "children": [
- {
- "type": "dept",
- "field": "d",
- "required": True,
- "props": {"multiple": False},
- }
- ],
- }
- ]
- }
- errs = validate_dept_form_values(schema, {})
- self.assertTrue(len(errs) >= 1)
- def test_no_dept_fields_ok(self):
- schema = {"rule": [{"type": "input", "field": "t"}]}
- self.assertEqual(validate_dept_form_values(schema, {"t": "x"}), [])
- class TestOaDeptSelect(unittest.TestCase):
- def test_extract_and_contains(self):
- self.assertEqual(extract_dept_ids({"id": "d1", "name": "研发"}), {"d1"})
- self.assertEqual(
- extract_dept_ids([{"id": "d1", "name": "A"}, {"id": "d2", "name": "B"}]),
- {"d1", "d2"},
- )
- self.assertTrue(
- dept_contains_match(
- [{"id": "d1", "name": "A"}],
- ["d1", "d9"],
- )
- )
- self.assertFalse(
- dept_contains_match(
- [{"id": "d3", "name": "C"}],
- ["d1", "d2"],
- )
- )
- # 精确匹配:下级 id 不等于上级 id
- self.assertFalse(
- dept_contains_match(
- {"id": "d1-child", "name": "前端组"},
- ["d1"],
- )
- )
- if __name__ == "__main__":
- unittest.main()
|