diff --git a/SeaHaven.Services/Helpers/WorkOrderBoardFieldMutations.cs b/SeaHaven.Services/Helpers/WorkOrderBoardFieldMutations.cs index c3a59a0..b9f785f 100644 --- a/SeaHaven.Services/Helpers/WorkOrderBoardFieldMutations.cs +++ b/SeaHaven.Services/Helpers/WorkOrderBoardFieldMutations.cs @@ -62,21 +62,7 @@ namespace SeaHaven.Services.Helpers } public static List ApplyAutoScheduleSideEffects(WorkOrder workOrder) - { - var changes = new List(); - if (!WorkOrderBoardMutationRules.ShouldAutoSchedule( - workOrder.LifecycleStatus, - workOrder.ScheduledDate, - workOrder.AssignTo, - workOrder.ScheduleWeekOnly)) - return changes; - - var old = workOrder.LifecycleStatus?.ToString(); - workOrder.LifecycleStatus = LifecycleStatus.Scheduled; - workOrder.Status = WorkOrderDerivedFields.GetLifecycleStatusLabel(LifecycleStatus.Scheduled); - changes.Add(BoardFieldChange.StatusChanged("LifecycleStatus", old, LifecycleStatus.Scheduled.ToString())); - return changes; - } + => WorkOrderDerivedFields.ApplyLifecycleFromSchedule(workOrder); public static BoardFieldChange ApplyApptTime(WorkOrder workOrder, Dispatch dispatch, string? value) { diff --git a/SeaHavenIndustries.Tests/WorkOrderBoardFieldMutationsTests.cs b/SeaHavenIndustries.Tests/WorkOrderBoardFieldMutationsTests.cs index aa83201..61eab70 100644 --- a/SeaHavenIndustries.Tests/WorkOrderBoardFieldMutationsTests.cs +++ b/SeaHavenIndustries.Tests/WorkOrderBoardFieldMutationsTests.cs @@ -1,4 +1,5 @@ using Data.SeaHavenIndustries; +using Data.SeaHavenIndustries.Enums; using SeaHaven.Services.Helpers; namespace SeaHavenIndustries.Tests; @@ -50,4 +51,33 @@ public class WorkOrderBoardFieldMutationsTests Assert.Equal(new DateTime(2026, 6, 25, 9, 0, 0), workOrder.ScheduledStart); Assert.Equal(new DateTime(2026, 6, 25, 11, 0, 0), workOrder.ScheduledEnd); } + + [Fact] + public void ApplyScheduledDate_IncompleteWithoutAssignee_PromotesToScheduled() + { + var workOrder = new WorkOrder { LifecycleStatus = LifecycleStatus.Incomplete }; + + var changes = WorkOrderBoardFieldMutations.ApplyScheduledDate( + workOrder, + new DateTime(2026, 6, 25)); + + Assert.Equal(LifecycleStatus.Scheduled, workOrder.LifecycleStatus); + Assert.Contains(changes, c => c.Action == AuditActionType.StatusChanged); + } + + [Fact] + public void ApplyScheduledDate_ClearsScheduled_DemotesToPending() + { + var workOrder = new WorkOrder + { + LifecycleStatus = LifecycleStatus.Scheduled, + ScheduledDate = new DateTime(2026, 6, 25) + }; + + var changes = WorkOrderBoardFieldMutations.ApplyScheduledDate(workOrder, parsed: null); + + Assert.Equal(LifecycleStatus.Pending, workOrder.LifecycleStatus); + Assert.Contains(changes, c => c.Action == AuditActionType.StatusChanged + && c.NewValue == LifecycleStatus.Pending.ToString()); + } }