采用年码+月码+序号编码(5/6位,单月最多10000);summary 接口改用 hasStoreFilter 避免 SqlSugar 生成非法 SQL。 Co-authored-by: Cursor <cursoragent@cursor.com>
48 lines
1.5 KiB
C#
48 lines
1.5 KiB
C#
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");
|
|
}
|
|
}
|