| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- """oa_leave_hours unit tests"""
- from app.services.oa_leave_hours import (
- apply_leave_kit_hours,
- calc_leave_hours,
- validate_leave_kit_form_values,
- )
- def test_calc_same_day_sample():
- assert calc_leave_hours("2026-07-30 09:00", "2026-07-30 15:00") == 5.0
- def test_calc_morning_only():
- assert calc_leave_hours("2026-07-30 08:30", "2026-07-30 12:00") == 3.5
- def test_calc_lunch_gap():
- assert calc_leave_hours("2026-07-30 11:00", "2026-07-30 14:00") == 2.0
- def test_calc_invalid():
- assert calc_leave_hours("2026-07-30 15:00", "2026-07-30 09:00") is None
- assert calc_leave_hours("", "2026-07-30 09:00") is None
- def test_apply_overwrites_when_not_manual():
- schema = {
- "rule": [
- {
- "type": "leaveKit",
- "props": {
- "morningStart": "08:30",
- "morningEnd": "12:00",
- "afternoonStart": "13:00",
- "afternoonEnd": "17:30",
- },
- "children": [
- {"type": "select", "field": "leaveType", "title": "请假类型"},
- {"type": "datePicker", "field": "leaveStart", "title": "开始时间"},
- {"type": "datePicker", "field": "leaveEnd", "title": "结束时间"},
- {"type": "inputNumber", "field": "leaveDuration", "title": "时长(h)"},
- ],
- }
- ]
- }
- data = {
- "leaveType": "事假",
- "leaveStart": "2026-07-30 09:00",
- "leaveEnd": "2026-07-30 15:00",
- "leaveDuration": 1,
- }
- out = apply_leave_kit_hours(schema, data)
- assert out["leaveDuration"] == 5.0
- def test_apply_respects_manual():
- schema = {
- "rule": [
- {
- "type": "leaveKit",
- "props": {},
- "children": [
- {"type": "datePicker", "field": "leaveStart"},
- {"type": "datePicker", "field": "leaveEnd"},
- {"type": "inputNumber", "field": "leaveDuration"},
- ],
- }
- ]
- }
- data = {
- "leaveStart": "2026-07-30 09:00",
- "leaveEnd": "2026-07-30 15:00",
- "leaveDuration": 8,
- "__manual_leaveDuration": True,
- }
- out = apply_leave_kit_hours(schema, data)
- assert out["leaveDuration"] == 8.0
- def test_validate_end_before_start():
- schema = {
- "rule": [
- {
- "type": "leaveKit",
- "children": [
- {"type": "datePicker", "field": "s"},
- {"type": "datePicker", "field": "e"},
- {"type": "inputNumber", "field": "d"},
- ],
- }
- ]
- }
- errs = validate_leave_kit_form_values(
- schema, {"s": "2026-07-30 15:00", "e": "2026-07-30 09:00", "d": 1}
- )
- assert any("结束" in e for e in errs)
|