NbrSequenceFormatterTests.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using Admin.NET.Plugin.AiDOP.DataPlatform.Sequence;
  2. using Xunit;
  3. namespace Admin.NET.Plugin.AiDOP.Tests.DataPlatform;
  4. public class NbrSequenceFormatterTests
  5. {
  6. [Fact]
  7. public void NormalizeDateFormat_StripsCommas()
  8. {
  9. Assert.Equal("YYYYMMDD", NbrSequenceFormatter.NormalizeDateFormat("YYYY,MM,DD"));
  10. Assert.Equal("", NbrSequenceFormatter.NormalizeDateFormat(null));
  11. }
  12. [Theory]
  13. [InlineData("", "", "2026-05-10")]
  14. [InlineData("YYMMDD", "260510", "2026-05-10")]
  15. [InlineData("YYYYMMDD", "20260510", "2026-05-10")]
  16. [InlineData("YYYYMM", "202605", "2026-05-01")]
  17. [InlineData("yyyymmdd", "20260510", "2026-05-10")] // 陷阱 #4:大小写
  18. public void ResolvePeriod_MatchesSpec(string fmt, string expectedDateStr, string expectedNbrDate)
  19. {
  20. var now = new DateTime(2026, 5, 10, 15, 30, 0);
  21. var (nbrDate, nbrDateStr) = NbrSequenceFormatter.ResolvePeriod(fmt, now);
  22. Assert.Equal(expectedDateStr, nbrDateStr);
  23. Assert.Equal(DateTime.Parse(expectedNbrDate), nbrDate);
  24. }
  25. [Fact]
  26. public void ResolvePadWidth_UsesMaxValueStringLength()
  27. {
  28. Assert.Equal(3, NbrSequenceFormatter.ResolvePadWidth(999));
  29. Assert.Equal(8, NbrSequenceFormatter.ResolvePadWidth(99999999));
  30. }
  31. [Fact]
  32. public void BuildNumber_SmStyle()
  33. {
  34. var n = NbrSequenceFormatter.BuildNumber("S", "M", "", "20260510", 5, 3);
  35. Assert.Equal("SM20260510005", n);
  36. }
  37. [Fact]
  38. public void BuildNumber_WhenSerialWiderThanPad_Throws()
  39. {
  40. Assert.Throws<InvalidOperationException>(() =>
  41. NbrSequenceFormatter.BuildNumber("S", "M", "", "20260510", 1000, 3));
  42. }
  43. [Fact]
  44. public void BuildRange_PrStyleIncrement3()
  45. {
  46. var list = NbrSequenceFormatter.BuildRange("P", "R", "", "20260510", 53, 3, 8);
  47. Assert.Equal(new[] { "PR2026051000000053", "PR2026051000000054", "PR2026051000000055" }, list);
  48. }
  49. }