admin/src/Oms.Tests/CustomerCodeGeneratorTests.cs
zzh c36bdb237c 重构客户编号生成规则,并修复店铺订单 summary SQL 翻译错误。
采用年码+月码+序号编码(5/6位,单月最多10000);summary 接口改用 hasStoreFilter 避免 SqlSugar 生成非法 SQL。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-11 17:54:29 +08:00

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