NumberRuleFormatterTests.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Admin.NET.Plugin.AiDOP.Supply;
  2. using Xunit;
  3. namespace Admin.NET.Plugin.AiDOP.Tests.S3.Supply;
  4. public class NumberRuleFormatterTests
  5. {
  6. [Theory]
  7. [InlineData("YYYYMMDD", "20260510")]
  8. [InlineData("YYMMDD", "260510")]
  9. [InlineData("YYYYMM", "202605")]
  10. [InlineData("YYMM", "2605")]
  11. [InlineData("YYYY", "2026")]
  12. [InlineData("MMDD", "0510")]
  13. public void FormatDatePart_WhenKnownPattern_ReturnsExpected(string dateType, string expected)
  14. {
  15. var now = new DateTime(2026, 5, 10);
  16. Assert.Equal(expected, NumberRuleFormatter.FormatDatePart(dateType, now));
  17. }
  18. [Fact]
  19. public void ResolveSerialWidth_WhenMaxValue9999_ReturnsFour()
  20. {
  21. Assert.Equal(4, NumberRuleFormatter.ResolveSerialWidth(9999));
  22. }
  23. [Fact]
  24. public void ResolveSerialWidth_WhenMaxValueMissing_DefaultsToFour()
  25. {
  26. Assert.Equal(4, NumberRuleFormatter.ResolveSerialWidth(null));
  27. }
  28. [Fact]
  29. public void BuildNumber_WhenPwDailyRule_ReturnsExpectedNumber()
  30. {
  31. var now = new DateTime(2026, 5, 10);
  32. var number = NumberRuleFormatter.BuildNumber("P", "W", null, "YYYYMMDD", true, 1, 9999, now);
  33. Assert.Equal("PW202605100001", number);
  34. }
  35. [Fact]
  36. public void BuildNumber_WhenM8DailyRule_ReturnsExpectedNumber()
  37. {
  38. var now = new DateTime(2026, 5, 10);
  39. var number = NumberRuleFormatter.BuildNumber("D", null, null, "YYYYMMDD", true, 1, 99999, now);
  40. Assert.Equal("D2026051000001", number);
  41. }
  42. [Theory]
  43. [InlineData("YYYYMMDD", "2026-05-10")]
  44. [InlineData("YYYYMM", "2026-05-01")]
  45. [InlineData("YYYY", "2026-01-01")]
  46. public void ResolveSequenceDate_WhenDateRule_ReturnsExpectedBucket(string dateType, string expected)
  47. {
  48. var now = new DateTime(2026, 5, 10, 14, 30, 0);
  49. var sequenceDate = NumberRuleFormatter.ResolveSequenceDate(dateType, true, now);
  50. Assert.Equal(DateTime.Parse(expected), sequenceDate);
  51. }
  52. [Fact]
  53. public void ResolveSequenceDate_WhenNoDateRule_ReturnsNull()
  54. {
  55. var now = new DateTime(2026, 5, 10);
  56. var sequenceDate = NumberRuleFormatter.ResolveSequenceDate(null, false, now);
  57. Assert.Null(sequenceDate);
  58. }
  59. [Fact]
  60. public void BuildNumber_WhenNoDateType_ReturnsPrefixAndSerial()
  61. {
  62. var now = new DateTime(2026, 5, 10);
  63. var number = NumberRuleFormatter.BuildNumber("J", "H", "D", null, false, 12, 999, now);
  64. Assert.Equal("JHD012", number);
  65. }
  66. }