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); } }