financial_system/tests/realtime_attendance_service_test.py
2026-06-23 09:13:13 +08:00

81 lines
2.4 KiB
Python

from __future__ import annotations
from datetime import date
from pathlib import Path
import sys
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from financial_system.services.realtime_attendance_service import TodayAttendanceItemData, build_realtime_summary
def test_build_realtime_summary_counts_today_status() -> None:
items = [
TodayAttendanceItemData(
employee_id=1,
employee_no="ZA0001",
employee_name="张三",
department="生产中心",
position="技工",
first_punch="08:58",
last_punch="18:30",
attendance_status="present",
late_minutes=0,
missing_card_count=0,
leave_hours=0,
today_overtime_hours=1,
month_remaining_overtime_hours=4,
estimated_net_salary=6800,
note="",
),
TodayAttendanceItemData(
employee_id=2,
employee_no="ZA0002",
employee_name="李四",
department="行政人事部",
position="人事专员",
first_punch="09:08",
last_punch="",
attendance_status="missing",
late_minutes=8,
missing_card_count=1,
leave_hours=2,
today_overtime_hours=0,
month_remaining_overtime_hours=-2,
estimated_net_salary=None,
note="缺少下班卡",
),
TodayAttendanceItemData(
employee_id=3,
employee_no="ZA0003",
employee_name="王五",
department="财务部",
position="财务",
first_punch="",
last_punch="",
attendance_status="unchecked",
late_minutes=0,
missing_card_count=0,
leave_hours=0,
today_overtime_hours=0,
month_remaining_overtime_hours=0,
estimated_net_salary=5000,
note="",
),
]
summary = build_realtime_summary(date(2026, 6, 22), items)
assert summary.employee_total == 3
assert summary.checked_in_count == 2
assert summary.unchecked_count == 1
assert summary.late_count == 1
assert summary.leave_count == 1
assert summary.missing_card_count == 1
assert summary.estimated_overtime_count == 1
assert summary.estimated_net_total == 11800
if __name__ == "__main__":
test_build_realtime_summary_counts_today_status()