mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 08:23:12 +00:00
test(work-orders): cover FE-aligned mappers and derived field logic
This commit is contained in:
parent
187d935da2
commit
76e839addf
2 changed files with 107 additions and 0 deletions
75
SeaHavenIndustries.Tests/WorkOrderDerivedFieldsTests.cs
Normal file
75
SeaHavenIndustries.Tests/WorkOrderDerivedFieldsTests.cs
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
32
SeaHavenIndustries.Tests/WorkOrderTypeMapperTests.cs
Normal file
32
SeaHavenIndustries.Tests/WorkOrderTypeMapperTests.cs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
using Data.SeaHavenIndustries.Enums;
|
||||
using SeaHaven.Services.Helpers;
|
||||
|
||||
namespace SeaHavenIndustries.Tests;
|
||||
|
||||
public class WorkOrderTypeMapperTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("PM", WorkOrderType.PM)]
|
||||
[InlineData("Reactive", WorkOrderType.Reactive)]
|
||||
[InlineData("Emergency", WorkOrderType.Emergency)]
|
||||
[InlineData("Add-On", WorkOrderType.AddOn)]
|
||||
public void TryParseFeLabel_BoardTypes(string label, WorkOrderType expected)
|
||||
{
|
||||
Assert.True(WorkOrderTypeMapper.TryParseFeLabel(label, out var type));
|
||||
Assert.Equal(expected, type);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TryParseFeLabel_Overdue_ReturnsFalse()
|
||||
{
|
||||
Assert.False(WorkOrderTypeMapper.TryParseFeLabel("Overdue", out _));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(WorkOrderType.AddOn, "Add-On")]
|
||||
[InlineData(WorkOrderType.Reactive, "Reactive")]
|
||||
public void ToFeLabel_ReturnsBoardLabel(WorkOrderType type, string expected)
|
||||
{
|
||||
Assert.Equal(expected, WorkOrderTypeMapper.ToFeLabel(type));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue