fix(fusion_clock): code-review hardening [19.0.5.0.1]
- _cron_generate: per-rule savepoint isolation (one bad rule can't abort the whole daily batch) - fclk_attach_recurrence: clear an existing recurrence first (no orphaned rule generating forever) - fclk_apply_planner_cell: collapse split rows (search was limit=1 after the UNIQUE drop, orphaning extras) - fclk_release_shift: reject non-posted/open shifts (raw-POST guard) - delete_open_shift: report success=false when nothing was deleted + JS surfaces it - _generate: log before removing an empty recurrence Tests added for collapse, re-attach, draft-release. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -67,6 +67,23 @@ class TestShiftPlannerModels(TransactionCase):
|
||||
self.assertEqual(schedule.planned_hours, 8.0)
|
||||
self.assertEqual(self.Schedule.fclk_hours_display(schedule.planned_hours), '8:00')
|
||||
|
||||
def test_planner_cell_collapses_split_rows(self):
|
||||
# Editing a day's planner cell must collapse any split rows into one
|
||||
# (the planner cell is the authoritative single entry for the day).
|
||||
d = date(2026, 1, 20)
|
||||
self.Schedule.create({
|
||||
'employee_id': self.employee.id, 'schedule_date': d,
|
||||
'start_time': 8.0, 'end_time': 12.0, 'state': 'posted'})
|
||||
self.Schedule.create({
|
||||
'employee_id': self.employee.id, 'schedule_date': d,
|
||||
'start_time': 13.0, 'end_time': 17.0, 'state': 'posted'})
|
||||
self.assertEqual(self.Schedule.search_count([
|
||||
('employee_id', '=', self.employee.id), ('schedule_date', '=', d)]), 2)
|
||||
self.Schedule.fclk_apply_planner_cell(self.employee, d, {'input': '9-5'})
|
||||
self.assertEqual(self.Schedule.search_count([
|
||||
('employee_id', '=', self.employee.id), ('schedule_date', '=', d)]), 1,
|
||||
"planner edit should collapse split rows to one")
|
||||
|
||||
def test_overnight_range_is_accepted(self):
|
||||
# Overnight shifts (end on/before start) are supported as of 19.0.5.0.0.
|
||||
sch = self.Schedule.create({
|
||||
|
||||
Reference in New Issue
Block a user