| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- using System.Text.RegularExpressions;
- using Admin.NET.Plugin.AiDOP.DataPlatform.Sequence;
- using Admin.NET.Plugin.AiDOP.Supply;
- using Xunit;
- namespace Admin.NET.Plugin.AiDOP.Tests.DataPlatform;
- /// <summary>
- /// WP9 S3:本库 NumberRuleFormatter 与 165 NbrSequenceFormatter 对同一规则输出逐字符相同。
- /// </summary>
- public class PickBillNumberParityTests
- {
- private static readonly Regex Sm165Pattern = new(@"^SM[0-9]{8}[0-9]{3}$", RegexOptions.Compiled);
- [Theory]
- [InlineData("S", "M", "", "YYYYMMDD", 999, 1, "2026-08-09", "SM20260809001")]
- [InlineData("S", "M", "", "YYYYMMDD", 999, 42, "2026-08-09", "SM20260809042")]
- [InlineData("S", "M", "", "YYYYMMDD", 999, 999, "2026-05-10", "SM20260510999")]
- [InlineData("P", "W", "", "YYYYMMDD", 9999, 1, "2026-05-10", "PW202605100001")]
- [InlineData("D", "", "", "YYYYMMDD", 99999, 1, "2026-05-10", "D2026051000001")]
- public void Formatters_SameInputs_ProduceIdenticalNumbers(
- string pre1, string pre2, string pre3, string dateType, int maxValue, int serial, string nowIso, string expected)
- {
- var now = DateTime.Parse(nowIso);
- var local = NumberRuleFormatter.BuildNumber(pre1, pre2, pre3, dateType, true, serial, maxValue, now);
- var norm = NbrSequenceFormatter.NormalizeDateFormat(dateType);
- var (_, dateStr) = NbrSequenceFormatter.ResolvePeriod(norm, now);
- var pad = NbrSequenceFormatter.ResolvePadWidth(maxValue);
- var mes = NbrSequenceFormatter.BuildNumber(pre1, pre2, pre3, dateStr, serial, pad);
- Assert.Equal(expected, local);
- Assert.Equal(expected, mes);
- Assert.Equal(local, mes);
- }
- [Fact]
- public void SmMaxValue999_PadWidthIsThree()
- {
- Assert.Equal(3, NbrSequenceFormatter.ResolvePadWidth(999));
- Assert.Equal(3, NumberRuleFormatter.ResolveSerialWidth(999));
- }
- [Fact]
- public void SmxFallback_DoesNotMatch165Pattern()
- {
- var smx = "SMX" + DateTime.Now.ToString("yyyyMMddHHmmss") + "12345";
- Assert.False(Sm165Pattern.IsMatch(smx));
- Assert.True(Sm165Pattern.IsMatch("SM20260809001"));
- }
- }
|