shoc-backend/SeaHavenIndustries.Tests/WorkOrderDerivedFieldsTests.cs
Arthur Bassi 673bc3b5a9 fix(work-orders): align phase 2 status/type contract to SHOC frontend
Expand LifecycleStatus (EnRoute, OnSite, Rescheduled, Pending, PendingQuote) and WorkOrderType (Reactive, AddOn) to match the frontend prototype. Add FE label round-trip via LifecycleStatusMapper/WorkOrderTypeMapper, update derived fields, mutation rules and board unscheduled filter, and reactivate [Authorize] on WorkOrderController. Fix pre-existing dayGroup test expectation.
2026-07-07 13:11:22 -03:00

80 lines
2.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Data.SeaHavenIndustries.Enums;
using SeaHaven.Services.Helpers;
namespace SeaHavenIndustries.Tests;
public class WorkOrderDerivedFieldsTests
{
private static readonly DateTime Today = new(2026, 6, 24, 12, 0, 0, DateTimeKind.Utc);
[Fact]
public void IsPastDue_WhenScheduledBeforeTodayAndNotTerminal_ReturnsTrue()
{
var result = WorkOrderDerivedFields.IsPastDue(
Today.AddDays(-1),
LifecycleStatus.Scheduled,
Today);
Assert.True(result);
}
[Fact]
public void IsPastDue_WhenScheduledToday_ReturnsFalse()
{
var result = WorkOrderDerivedFields.IsPastDue(
Today,
LifecycleStatus.Scheduled,
Today);
Assert.False(result);
}
[Fact]
public void IsPastDue_WhenComplete_ReturnsFalse()
{
var result = WorkOrderDerivedFields.IsPastDue(
Today.AddDays(-3),
LifecycleStatus.Completed,
Today);
Assert.False(result);
}
[Fact]
public void IsPastDue_WhenNoScheduledDate_ReturnsFalse()
{
var result = WorkOrderDerivedFields.IsPastDue(null, LifecycleStatus.Incomplete, Today);
Assert.False(result);
}
[Theory]
[InlineData(DayOfWeek.Monday, "monday")]
[InlineData(DayOfWeek.Friday, "friday")]
[InlineData(DayOfWeek.Saturday, null)]
public void GetDayGroup_MapsWeekdays(DayOfWeek day, string? expected)
{
var date = new DateTime(2026, 6, 22, 0, 0, 0, DateTimeKind.Utc);
while (date.DayOfWeek != day)
date = date.AddDays(1);
Assert.Equal(expected, WorkOrderDerivedFields.GetDayGroup(date));
}
[Fact]
public void FormatApptTime_WithStartAndEnd_ReturnsRange()
{
var start = new DateTime(2026, 6, 24, 7, 0, 0);
var end = new DateTime(2026, 6, 24, 9, 0, 0);
var result = WorkOrderDerivedFields.FormatApptTime(start, end);
Assert.Equal("07:00 – 09:00", result);
}
[Fact]
public void FormatApptTime_WithStartOnly_ReturnsTime()
{
var start = new DateTime(2026, 6, 24, 7, 30, 0);
Assert.Equal("07:30", WorkOrderDerivedFields.FormatApptTime(start, null));
}
}