mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 04:53:11 +00:00
test(work-orders): pin severity-then-type correction from Overdue
The board sends one PATCH per field, severity before workOrderType, so correcting an Overdue work order to Emergency or Reactive patches the severity while the stored type is still Overdue. Dropping or rejecting a severity patch for the current type would leave the corrected Emergency work order with no severity. Overdue's no-severity rule is enforced when the type changes, not on the severity patch.
This commit is contained in:
parent
d82fb18a3d
commit
c1910e5310
1 changed files with 41 additions and 0 deletions
|
|
@ -183,6 +183,47 @@ public class WorkOrderOverdueTypeTests
|
|||
Assert.Null(persisted.Severity);
|
||||
}
|
||||
|
||||
// The board sends one request per field, severity before type, so correcting
|
||||
// Overdue to Emergency patches severity while the stored type is still Overdue.
|
||||
// A severity patch must not be dropped or rejected for the current type; the
|
||||
// no-severity invariant is enforced when the type itself changes.
|
||||
[Fact]
|
||||
public async Task PatchSeverityThenType_OverdueToEmergency_KeepsSeverity()
|
||||
{
|
||||
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 service = NewUpdateService(context);
|
||||
|
||||
await service.PatchFieldAsync(1, new WorkOrderBoardPatchRequestDto
|
||||
{
|
||||
Field = WorkOrderBoardFieldNames.Severity,
|
||||
Value = "2",
|
||||
WorkOrderVersion = ToVersion(wo)
|
||||
}, "actor-1");
|
||||
|
||||
var updated = await context.workOrders.SingleAsync(w => w.Id == 1);
|
||||
var result = await service.PatchFieldAsync(1, new WorkOrderBoardPatchRequestDto
|
||||
{
|
||||
Field = WorkOrderBoardFieldNames.WorkOrderType,
|
||||
Value = "Emergency",
|
||||
WorkOrderVersion = ToVersion(updated)
|
||||
}, "actor-1");
|
||||
|
||||
Assert.Equal(WorkOrderType.Emergency, result.WorkOrderType);
|
||||
Assert.Equal(2, result.Severity);
|
||||
var persisted = await context.workOrders.SingleAsync(w => w.Id == 1);
|
||||
Assert.Equal(WorkOrderType.Emergency, persisted.WorkOrderType);
|
||||
Assert.Equal("2", persisted.Severity);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task PatchType_PmWithPmService_ToOverdue_KeepsService()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue