| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- using Admin.NET.Plugin.AiDOP.DataPlatform.Sequence;
- using Xunit;
- namespace Admin.NET.Plugin.AiDOP.Tests.DataPlatform;
- public class NbrSequenceFormatterTests
- {
- [Fact]
- public void NormalizeDateFormat_StripsCommas()
- {
- Assert.Equal("YYYYMMDD", NbrSequenceFormatter.NormalizeDateFormat("YYYY,MM,DD"));
- Assert.Equal("", NbrSequenceFormatter.NormalizeDateFormat(null));
- }
- [Theory]
- [InlineData("", "", "2026-05-10")]
- [InlineData("YYMMDD", "260510", "2026-05-10")]
- [InlineData("YYYYMMDD", "20260510", "2026-05-10")]
- [InlineData("YYYYMM", "202605", "2026-05-01")]
- [InlineData("yyyymmdd", "20260510", "2026-05-10")] // 陷阱 #4:大小写
- public void ResolvePeriod_MatchesSpec(string fmt, string expectedDateStr, string expectedNbrDate)
- {
- var now = new DateTime(2026, 5, 10, 15, 30, 0);
- var (nbrDate, nbrDateStr) = NbrSequenceFormatter.ResolvePeriod(fmt, now);
- Assert.Equal(expectedDateStr, nbrDateStr);
- Assert.Equal(DateTime.Parse(expectedNbrDate), nbrDate);
- }
- [Fact]
- public void ResolvePadWidth_UsesMaxValueStringLength()
- {
- Assert.Equal(3, NbrSequenceFormatter.ResolvePadWidth(999));
- Assert.Equal(8, NbrSequenceFormatter.ResolvePadWidth(99999999));
- }
- [Fact]
- public void BuildNumber_SmStyle()
- {
- var n = NbrSequenceFormatter.BuildNumber("S", "M", "", "20260510", 5, 3);
- Assert.Equal("SM20260510005", n);
- }
- [Fact]
- public void BuildNumber_WhenSerialWiderThanPad_Throws()
- {
- Assert.Throws<InvalidOperationException>(() =>
- NbrSequenceFormatter.BuildNumber("S", "M", "", "20260510", 1000, 3));
- }
- [Fact]
- public void BuildRange_PrStyleIncrement3()
- {
- var list = NbrSequenceFormatter.BuildRange("P", "R", "", "20260510", 53, 3, 8);
- Assert.Equal(new[] { "PR2026051000000053", "PR2026051000000054", "PR2026051000000055" }, list);
- }
- }
|