[WIP]hr_holidays_timeoff_analysis
Some checks failed
pre-commit / pre-commit (pull_request) Has been cancelled
Some checks failed
pre-commit / pre-commit (pull_request) Has been cancelled
This commit is contained in:
@@ -717,3 +717,112 @@ class TestHrLeaveTimeoffDay(TransactionCase):
|
||||
4,
|
||||
"leave_duration_by_day should be 4 day",
|
||||
)
|
||||
|
||||
def test_leave_dates_modified(self):
|
||||
leave = self.env["hr.leave"].create(
|
||||
{
|
||||
"employee_id": self.employee.id,
|
||||
"request_date_from": Date.to_date("2025-09-01"), # Monday
|
||||
"request_date_to": Date.to_date("2025-09-05"), # Friday
|
||||
"holiday_status_id": self.time_off_type.id,
|
||||
}
|
||||
)
|
||||
leave.state = "validate"
|
||||
self.env["hr.leave.timeoff.day"].cron_manage_timeoff_days()
|
||||
timeoff_days = self.env["hr.leave.timeoff.day"].search(
|
||||
[
|
||||
("employee_id", "=", self.employee.id),
|
||||
("hr_leave_id", "=", leave.id),
|
||||
]
|
||||
)
|
||||
self.assertEqual(
|
||||
len(timeoff_days), 5, "Should have 5 timeoff days initially"
|
||||
)
|
||||
|
||||
# Modify dates: Wed Sept 3 to Sun Sept 7
|
||||
# Working days: Wed(3), Thu(4), Fri(5) — Mon(1), Tue(2) removed
|
||||
leave.write(
|
||||
{
|
||||
"request_date_from": Date.to_date("2025-09-03"),
|
||||
"request_date_to": Date.to_date("2025-09-07"),
|
||||
}
|
||||
)
|
||||
self.env["hr.leave.timeoff.day"].cron_manage_timeoff_days()
|
||||
timeoff_days = self.env["hr.leave.timeoff.day"].search(
|
||||
[
|
||||
("employee_id", "=", self.employee.id),
|
||||
("hr_leave_id", "=", leave.id),
|
||||
]
|
||||
)
|
||||
self.assertEqual(
|
||||
len(timeoff_days),
|
||||
3,
|
||||
"Should have 3 timeoff days after date modification",
|
||||
)
|
||||
updated_dates = timeoff_days.mapped("date")
|
||||
self.assertIn(
|
||||
Date.to_date("2025-09-03"),
|
||||
updated_dates,
|
||||
"Sept 3 should still be present",
|
||||
)
|
||||
self.assertIn(
|
||||
Date.to_date("2025-09-04"),
|
||||
updated_dates,
|
||||
"Sept 4 should still be present",
|
||||
)
|
||||
self.assertIn(
|
||||
Date.to_date("2025-09-05"),
|
||||
updated_dates,
|
||||
"Sept 5 should still be present",
|
||||
)
|
||||
self.assertNotIn(
|
||||
Date.to_date("2025-09-01"),
|
||||
updated_dates,
|
||||
"Sept 1 should have been removed",
|
||||
)
|
||||
self.assertNotIn(
|
||||
Date.to_date("2025-09-02"),
|
||||
updated_dates,
|
||||
"Sept 2 should have been removed",
|
||||
)
|
||||
|
||||
def test_leave_duration_changed(self):
|
||||
leave = self.env["hr.leave"].create(
|
||||
{
|
||||
"employee_id": self.employee.id,
|
||||
"request_date_from": Date.to_date("2025-10-01"),
|
||||
"request_date_to": Date.to_date("2025-10-01"),
|
||||
"holiday_status_id": self.time_off_type.id,
|
||||
}
|
||||
)
|
||||
leave.state = "validate"
|
||||
self.env["hr.leave.timeoff.day"].cron_manage_timeoff_days()
|
||||
timeoff_day = self.env["hr.leave.timeoff.day"].search(
|
||||
[
|
||||
("employee_id", "=", self.employee.id),
|
||||
("hr_leave_id", "=", leave.id),
|
||||
]
|
||||
)
|
||||
self.assertEqual(len(timeoff_day), 1)
|
||||
self.assertEqual(
|
||||
timeoff_day.leave_duration_by_day,
|
||||
1.0,
|
||||
"Should be 1.0 for a full day leave",
|
||||
)
|
||||
|
||||
# Simulate a stale duration, then verify the cron corrects it
|
||||
# in place (exercises the update-in-place reconciliation path).
|
||||
timeoff_day.leave_duration_by_day = 0.5
|
||||
self.env["hr.leave.timeoff.day"].cron_manage_timeoff_days()
|
||||
timeoff_day = self.env["hr.leave.timeoff.day"].search(
|
||||
[
|
||||
("employee_id", "=", self.employee.id),
|
||||
("hr_leave_id", "=", leave.id),
|
||||
]
|
||||
)
|
||||
self.assertEqual(len(timeoff_day), 1)
|
||||
self.assertEqual(
|
||||
timeoff_day.leave_duration_by_day,
|
||||
1.0,
|
||||
"Should be corrected back to 1.0 for a full day leave",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user