diff --git a/SeaHavenIndustries.Tests/WorkOrderBoardServiceTests.cs b/SeaHavenIndustries.Tests/WorkOrderBoardServiceTests.cs index 123cc03..a3871de 100644 --- a/SeaHavenIndustries.Tests/WorkOrderBoardServiceTests.cs +++ b/SeaHavenIndustries.Tests/WorkOrderBoardServiceTests.cs @@ -869,4 +869,93 @@ public class WorkOrderBoardServiceTests null, cts.Token)); } + + [Fact] + public void MapRawRow_DateOnlyDispatch_KeepsApptDate_LeavesApptTimeNull() + { + var dispatchApptDate = new DateTime(2026, 6, 25); + var row = RawRow( + scheduledDate: new DateTime(2026, 6, 23), + scheduledStart: null, + scheduledEnd: null, + dispatchApptDate: dispatchApptDate); + + var dto = WorkOrderBoardService.MapRawRow(row, DateTime.UtcNow); + + Assert.Equal(dispatchApptDate, dto.ApptDate); + Assert.Null(dto.ApptTime); + } + + [Fact] + public void MapRawRow_DispatchWithClock_FallsBackToDispatchTime() + { + var dispatchApptDate = new DateTime(2026, 6, 25, 9, 0, 0); + var row = RawRow( + scheduledDate: new DateTime(2026, 6, 23), + scheduledStart: null, + scheduledEnd: null, + dispatchApptDate: dispatchApptDate); + + var dto = WorkOrderBoardService.MapRawRow(row, DateTime.UtcNow); + + Assert.Equal(dispatchApptDate, dto.ApptDate); + Assert.Equal("09:00", dto.ApptTime); + } + + private static WorkOrderBoardRawRow RawRow( + DateTime? scheduledDate, + DateTime? scheduledStart, + DateTime? scheduledEnd, + DateTime? dispatchApptDate) + => new( + Id: 1, + InternalWONumber: "10000000001", + RescheduleCount: 0, + CarriedOver: 0, + IsAddOn: false, + WorkOrderType: null, + SiteCode: null, + LocationName: null, + PocName: null, + PocPhone: null, + PocNotes: null, + LifecycleStatus: LifecycleStatus.Scheduled, + LegacyStatus: null, + AssignTo: null, + DispatcherFirstName: null, + DispatcherLastName: null, + Initials: null, + Color: null, + DueDate: null, + ScheduledDate: scheduledDate, + ScheduledStart: scheduledStart, + ScheduledEnd: scheduledEnd, + TargetWeek: null, + ScheduleWeekOnly: null, + VendorId: null, + VendorName: null, + TechName: null, + TechPhone: null, + DispatchApptDate: dispatchApptDate, + Trade: null, + Problem: null, + ServiceNotes: null, + ExtraServices: null, + AdditionalContacts: null, + DocStatus: null, + CompletedDate: null, + FlagColor: null, + PrimaryDispatchId: 10, + RowVersion: null, + DispatchRowVersion: null, + PendingUpliftCount: 0, + HasUplift: false, + PrimaryUpliftStatus: null, + PrimaryUpliftAmount: null, + PrimaryDispatchStatus: null, + AvetaRequired: false, + HasAvetaDocument: false, + OriginalDate: null, + OriginalWeek: null, + IsUnscheduled: false); }