using Admin.NET.Plugin.AiDOP.Supply; using Xunit; namespace Admin.NET.Plugin.AiDOP.Tests.S3.Supply; public class NumberRuleFormatterTests { [Theory] [InlineData("YYYYMMDD", "20260510")] [InlineData("YYMMDD", "260510")] [InlineData("YYYYMM", "202605")] [InlineData("YYMM", "2605")] [InlineData("YYYY", "2026")] [InlineData("MMDD", "0510")] public void FormatDatePart_WhenKnownPattern_ReturnsExpected(string dateType, string expected) { var now = new DateTime(2026, 5, 10); Assert.Equal(expected, NumberRuleFormatter.FormatDatePart(dateType, now)); } [Fact] public void ResolveSerialWidth_WhenMaxValue9999_ReturnsFour() { Assert.Equal(4, NumberRuleFormatter.ResolveSerialWidth(9999)); } [Fact] public void ResolveSerialWidth_WhenMaxValueMissing_DefaultsToFour() { Assert.Equal(4, NumberRuleFormatter.ResolveSerialWidth(null)); } [Fact] public void BuildNumber_WhenPwDailyRule_ReturnsExpectedNumber() { var now = new DateTime(2026, 5, 10); var number = NumberRuleFormatter.BuildNumber("P", "W", null, "YYYYMMDD", true, 1, 9999, now); Assert.Equal("PW202605100001", number); } [Fact] public void BuildNumber_WhenM8DailyRule_ReturnsExpectedNumber() { var now = new DateTime(2026, 5, 10); var number = NumberRuleFormatter.BuildNumber("D", null, null, "YYYYMMDD", true, 1, 99999, now); Assert.Equal("D2026051000001", number); } [Theory] [InlineData("YYYYMMDD", "2026-05-10")] [InlineData("YYYYMM", "2026-05-01")] [InlineData("YYYY", "2026-01-01")] public void ResolveSequenceDate_WhenDateRule_ReturnsExpectedBucket(string dateType, string expected) { var now = new DateTime(2026, 5, 10, 14, 30, 0); var sequenceDate = NumberRuleFormatter.ResolveSequenceDate(dateType, true, now); Assert.Equal(DateTime.Parse(expected), sequenceDate); } [Fact] public void ResolveSequenceDate_WhenNoDateRule_ReturnsNull() { var now = new DateTime(2026, 5, 10); var sequenceDate = NumberRuleFormatter.ResolveSequenceDate(null, false, now); Assert.Null(sequenceDate); } [Fact] public void BuildNumber_WhenNoDateType_ReturnsPrefixAndSerial() { var now = new DateTime(2026, 5, 10); var number = NumberRuleFormatter.BuildNumber("J", "H", "D", null, false, 12, 999, now); Assert.Equal("JHD012", number); } }