diff --git a/SeaHaven.Services/Implementation/WorkOrderBoardService.cs b/SeaHaven.Services/Implementation/WorkOrderBoardService.cs index f21a21c..9341fa8 100644 --- a/SeaHaven.Services/Implementation/WorkOrderBoardService.cs +++ b/SeaHaven.Services/Implementation/WorkOrderBoardService.cs @@ -147,7 +147,12 @@ namespace SeaHaven.Services.Implementation MediaCount = row.MediaCount, CompletedDate = row.CompletedDate, FlagColor = row.FlagColor, - Severity = WorkOrderSeverityRules.ParseLevel(row.Severity), + // Overdue never carries a severity. A standalone severity patch can still + // store one (the board patches severity before type when correcting Overdue + // to Emergency/Reactive), so the row never returns it for an Overdue WO. + Severity = row.WorkOrderType == WorkOrderType.Overdue + ? null + : WorkOrderSeverityRules.ParseLevel(row.Severity), PrimaryDispatchId = row.PrimaryDispatchId, RowVersion = row.RowVersion, DispatchRowVersion = row.DispatchRowVersion, diff --git a/SeaHavenIndustries.Tests/WorkOrderOverdueTypeTests.cs b/SeaHavenIndustries.Tests/WorkOrderOverdueTypeTests.cs index 7a1ee1e..fe3b61b 100644 --- a/SeaHavenIndustries.Tests/WorkOrderOverdueTypeTests.cs +++ b/SeaHavenIndustries.Tests/WorkOrderOverdueTypeTests.cs @@ -202,12 +202,13 @@ public class WorkOrderOverdueTypeTests await context.SaveChangesAsync(); var service = NewUpdateService(context); - await service.PatchFieldAsync(1, new WorkOrderBoardPatchRequestDto + var severityStep = await service.PatchFieldAsync(1, new WorkOrderBoardPatchRequestDto { Field = WorkOrderBoardFieldNames.Severity, Value = "2", WorkOrderVersion = ToVersion(wo) }, "actor-1"); + Assert.Null(severityStep.Severity); var updated = await context.workOrders.SingleAsync(w => w.Id == 1); var result = await service.PatchFieldAsync(1, new WorkOrderBoardPatchRequestDto @@ -224,6 +225,33 @@ public class WorkOrderOverdueTypeTests Assert.Equal("2", persisted.Severity); } + // A severity patch with no following type change leaves a stored value on an + // Overdue WO; the board row still reports no severity. + [Fact] + public async Task PatchSeverity_OnOverdue_RowShowsNoSeverity() + { + await using var context = NewContext(); + var wo = new WorkOrder + { + Id = 1, + LifecycleStatus = LifecycleStatus.Scheduled, + WorkOrderType = WorkOrderType.Overdue, + RowVersion = new byte[] { 1, 0, 0, 0, 0, 0, 0, 1 } + }; + context.workOrders.Add(wo); + await context.SaveChangesAsync(); + + var result = await NewUpdateService(context).PatchFieldAsync(1, new WorkOrderBoardPatchRequestDto + { + Field = WorkOrderBoardFieldNames.Severity, + Value = "3", + WorkOrderVersion = ToVersion(wo) + }, "actor-1"); + + Assert.Equal(WorkOrderType.Overdue, result.WorkOrderType); + Assert.Null(result.Severity); + } + [Fact] public async Task PatchType_PmWithPmService_ToOverdue_KeepsService() {