test_oa_confirmation_kit_sync.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from datetime import date
  2. from app.services.oa_confirmation_kit_sync import extract_writeback_values
  3. def _kit_schema(fields: dict):
  4. children = []
  5. props = {}
  6. for sem, fid in fields.items():
  7. props[f"{sem}Field" if not sem.endswith("Field") else sem] = fid
  8. # normalize: hireDate -> hireDateField already handled below
  9. # rebuild properly
  10. props = {}
  11. children = []
  12. for sem, fid in fields.items():
  13. props[sem + "Field"] = fid
  14. children.append(
  15. {
  16. "type": "input",
  17. "field": fid,
  18. "props": {"_fc_kit_field": sem},
  19. }
  20. )
  21. return {
  22. "rule": [
  23. {
  24. "type": "confirmationKit",
  25. "props": props,
  26. "children": children,
  27. }
  28. ]
  29. }
  30. def test_extract_updates_six_fields():
  31. schema = _kit_schema(
  32. {
  33. "hireDate": "f_hire",
  34. "probationMonths": "f_prob",
  35. "name": "f_name",
  36. "email": "f_email",
  37. "dept": "f_dept",
  38. "phone": "f_phone",
  39. }
  40. )
  41. data = {
  42. "f_hire": "2026-01-15",
  43. "f_prob": 3,
  44. "f_name": "张三",
  45. "f_email": "a@b.com",
  46. "f_dept": {"id": "d1", "name": "研发"},
  47. "f_phone": "13800138000",
  48. }
  49. out = extract_writeback_values(schema, data)
  50. assert out["hire_date"] == date(2026, 1, 15)
  51. assert out["probation_months"] == 3
  52. assert out["nick_name"] == "张三"
  53. assert out["email"] == "a@b.com"
  54. assert out["dept_id"] == "d1"
  55. assert out["phone_no"] == "13800138000"
  56. def test_empty_fields_skipped():
  57. schema = _kit_schema({"name": "f_name", "phone": "f_phone", "email": "f_email"})
  58. data = {"f_name": "李四", "f_phone": "", "f_email": "bad"}
  59. out = extract_writeback_values(schema, data)
  60. assert out == {"nick_name": "李四"}
  61. def test_invalid_phone_skipped():
  62. schema = _kit_schema({"phone": "f_phone", "name": "f_name"})
  63. out = extract_writeback_values(schema, {"f_phone": "123", "f_name": "王五"})
  64. assert "phone_no" not in out
  65. assert out["nick_name"] == "王五"
  66. def test_no_kit_noop():
  67. assert extract_writeback_values({"rule": [{"type": "input", "field": "x"}]}, {"x": 1}) == {}