using FluentAssertions; using Oms.Application.Shared; namespace Oms.Tests; public class CustomerCodeGeneratorTests { private const string June2026Prefix = "AF"; [Theory] [InlineData(1, "AF0A1")] [InlineData(12, "AF0B2")] [InlineData(100, "AF1A0")] [InlineData(999, "AF9J9")] [InlineData(1000, "AF0A0")] [InlineData(1001, "AF10A1")] [InlineData(1999, "AF19J9")] [InlineData(2000, "AF20A0")] [InlineData(10000, "AF90A0")] public void FormatSequence_ShouldMatchExpectedCode(int sequence, string expectedCode) { CustomerCodeGenerator.FormatSequence(sequence, June2026Prefix).Should().Be(expectedCode); } [Theory] [InlineData("AF0A1", 1)] [InlineData("AF0B2", 12)] [InlineData("AF1A0", 100)] [InlineData("AF9J9", 999)] [InlineData("AF0A0", 1000)] [InlineData("AF10A1", 1001)] [InlineData("AF19J9", 1999)] [InlineData("AF20A0", 2000)] [InlineData("AF90A0", 10000)] public void TryParseSequence_ShouldRoundTripFormattedCodes(string code, int expectedSequence) { CustomerCodeGenerator.TryParseSequence(code, June2026Prefix, out var sequence).Should().BeTrue(); sequence.Should().Be(expectedSequence); } [Fact] public void BuildMonthPrefix_ShouldUseYearAndMonthLetters() { CustomerCodeGenerator.BuildMonthPrefix(new DateTime(2026, 6, 1)).Should().Be("AF"); CustomerCodeGenerator.BuildMonthPrefix(new DateTime(2027, 1, 1)).Should().Be("BA"); } }