using Data.SeaHavenIndustries; using Data.SeaHavenIndustries.Enums; using SeaHaven.Services.Helpers; namespace SeaHavenIndustries.Tests; public class WorkOrderDerivedFieldsTests { [Fact] public void IsPastDue_WhenScheduledBeforeTodayAndNotTerminal_ReturnsTrue() { var wo = new WorkOrder { ScheduledDate = DateTime.UtcNow.AddDays(-2), LifecycleStatus = LifecycleStatus.Scheduled }; Assert.True(WorkOrderDerivedFields.IsPastDue(wo, DateOnly.FromDateTime(DateTime.UtcNow))); } [Fact] public void IsPastDue_WhenCompleted_ReturnsFalse() { var wo = new WorkOrder { ScheduledDate = DateTime.UtcNow.AddDays(-2), LifecycleStatus = LifecycleStatus.Completed }; Assert.False(WorkOrderDerivedFields.IsPastDue(wo, DateOnly.FromDateTime(DateTime.UtcNow))); } [Fact] public void ApplyAutoSchedule_WhenDateAndAssignee_PromotesToScheduled() { var wo = new WorkOrder { LifecycleStatus = LifecycleStatus.Incomplete, ScheduledDate = new DateTime(2026, 6, 25), AssignTo = "dispatcher-1" }; Assert.True(WorkOrderDerivedFields.ApplyAutoScheduleIfEligible(wo)); Assert.Equal(LifecycleStatus.Scheduled, wo.LifecycleStatus); } [Fact] public void ApplyAutoSchedule_WeekOnly_DoesNotPromote() { var wo = new WorkOrder { LifecycleStatus = LifecycleStatus.Incomplete, ScheduledDate = new DateTime(2026, 6, 25), AssignTo = "dispatcher-1", ScheduleWeekOnly = true, TargetWeek = new DateOnly(2026, 6, 22) }; Assert.False(WorkOrderDerivedFields.ApplyAutoScheduleIfEligible(wo)); Assert.Equal(LifecycleStatus.Incomplete, wo.LifecycleStatus); } [Fact] public void SetInitialLifecycleStatus_NewWo_StartsIncompleteThenAutoSchedules() { var wo = new WorkOrder { ScheduledDate = new DateTime(2026, 6, 25), AssignTo = "dispatcher-1" }; WorkOrderDerivedFields.SetInitialLifecycleStatus(wo); Assert.Equal(LifecycleStatus.Scheduled, wo.LifecycleStatus); } }