shoc-backend/SeaHavenIndustries.Tests/WorkOrderNumberNormalizerTests.cs
Alexandre Brandizzi 4b772c8db3
Some checks are pending
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
fix(work-orders): keep SH placeholder WO numbers and block downgrades (#123)
SH-320: the WO number normalizer stripped every non-digit, so a manually
entered SH placeholder (e.g. SH00001) was saved as 00000000001 on both
create and patch. Keep the SH prefix, and reject replacing a saved real
APM number with an SH placeholder.
2026-09-16 15:01:10 -03:00

69 lines
1.8 KiB
C#

using SeaHaven.Services.Helpers;
namespace SeaHavenIndustries.Tests;
public class WorkOrderNumberNormalizerTests
{
[Fact]
public void TryNormalize_PadsToElevenDigits()
{
var ok = WorkOrderNumberNormalizer.TryNormalize("12345", out var normalized, out var error);
Assert.True(ok);
Assert.Null(error);
Assert.Equal("00000012345", normalized);
}
[Fact]
public void TryNormalize_AcceptsElevenDigits()
{
var ok = WorkOrderNumberNormalizer.TryNormalize("10000000001", out var normalized, out _);
Assert.True(ok);
Assert.Equal("10000000001", normalized);
}
[Fact]
public void TryNormalize_RejectsEmpty()
{
var ok = WorkOrderNumberNormalizer.TryNormalize("", out _, out var error);
Assert.False(ok);
Assert.NotNull(error);
}
[Fact]
public void TryNormalize_RejectsTooLong()
{
var ok = WorkOrderNumberNormalizer.TryNormalize("123456789012", out _, out var error);
Assert.False(ok);
Assert.Contains("11", error);
}
[Theory]
[InlineData("SH00001", "SH00001")]
[InlineData(" sh00001 ", "SH00001")]
[InlineData("SH-00001", "SH00001")]
[InlineData("SH1", "SH00001")]
[InlineData("SH123456789", "SH123456789")]
public void TryNormalize_KeepsShPlaceholderPrefix(string input, string expected)
{
var ok = WorkOrderNumberNormalizer.TryNormalize(input, out var normalized, out var error);
Assert.True(ok);
Assert.Null(error);
Assert.Equal(expected, normalized);
}
[Theory]
[InlineData("SH")]
[InlineData("SH1234567890")]
public void TryNormalize_RejectsInvalidShPlaceholder(string input)
{
var ok = WorkOrderNumberNormalizer.TryNormalize(input, out _, out var error);
Assert.False(ok);
Assert.NotNull(error);
}
}