test_oa_datetime_normalize.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. """oa_datetime_normalize:PC/小程序 datetime 到秒对齐与历史到分兼容"""
  2. from app.services.oa_datetime_normalize import normalize_datetime_form_values
  3. def test_pad_minute_only_when_datetime_default_expects_seconds():
  4. schema = {
  5. "rule": [
  6. {
  7. "type": "datePicker",
  8. "field": "useTime",
  9. "title": "用车时间",
  10. "props": {"type": "datetime"},
  11. }
  12. ]
  13. }
  14. data = {"useTime": "2026-10-20 09:00", "other": "x"}
  15. out = normalize_datetime_form_values(schema, data)
  16. assert out["useTime"] == "2026-10-20 09:00:00"
  17. assert out["other"] == "x"
  18. assert data["useTime"] == "2026-10-20 09:00" # 不改入参
  19. def test_leave_as_is_when_already_has_seconds():
  20. schema = {
  21. "rule": [
  22. {
  23. "type": "datePicker",
  24. "field": "t",
  25. "props": {"type": "datetime", "valueFormat": "YYYY-MM-DD HH:mm:ss"},
  26. }
  27. ]
  28. }
  29. out = normalize_datetime_form_values(schema, {"t": "2026-10-14 08:20:00"})
  30. assert out["t"] == "2026-10-14 08:20:00"
  31. def test_skip_when_schema_explicitly_minute_only():
  32. """请假/加班套件显式到分,不得补秒。"""
  33. schema = {
  34. "rule": [
  35. {
  36. "type": "datePicker",
  37. "field": "start",
  38. "props": {
  39. "type": "datetime",
  40. "format": "YYYY-MM-DD HH:mm",
  41. "valueFormat": "YYYY-MM-DD HH:mm",
  42. },
  43. }
  44. ]
  45. }
  46. out = normalize_datetime_form_values(schema, {"start": "2026-10-20 09:00"})
  47. assert out["start"] == "2026-10-20 09:00"
  48. def test_skip_plain_date_fields():
  49. schema = {
  50. "rule": [
  51. {"type": "datePicker", "field": "d", "title": "日期"},
  52. ]
  53. }
  54. out = normalize_datetime_form_values(schema, {"d": "2026-10-20"})
  55. assert out["d"] == "2026-10-20"
  56. def test_pad_nested_kit_children_only_when_seconds():
  57. schema = {
  58. "rule": [
  59. {
  60. "type": "leaveKit",
  61. "field": "kit",
  62. "children": [
  63. {
  64. "type": "datePicker",
  65. "field": "leaveStart",
  66. "props": {
  67. "type": "datetime",
  68. "valueFormat": "YYYY-MM-DD HH:mm",
  69. },
  70. },
  71. {
  72. "type": "datePicker",
  73. "field": "carTime",
  74. "props": {"type": "datetime"},
  75. },
  76. ],
  77. }
  78. ]
  79. }
  80. out = normalize_datetime_form_values(
  81. schema,
  82. {"leaveStart": "2026-10-20 09:00", "carTime": "2026-10-20 09:00"},
  83. )
  84. assert out["leaveStart"] == "2026-10-20 09:00"
  85. assert out["carTime"] == "2026-10-20 09:00:00"
  86. def test_pad_datetimerange_list():
  87. schema = {
  88. "rule": [
  89. {
  90. "type": "datePicker",
  91. "field": "rng",
  92. "props": {"type": "datetimerange"},
  93. }
  94. ]
  95. }
  96. out = normalize_datetime_form_values(
  97. schema, {"rng": ["2026-10-20 09:00", "2026-10-20 18:30"]}
  98. )
  99. assert out["rng"] == ["2026-10-20 09:00:00", "2026-10-20 18:30:00"]