using Admin.NET.Plugin.AiDOP.Supply; using Xunit; namespace Admin.NET.Plugin.AiDOP.Tests.S3.Supply; public class PurchaseRequestMigrationFlowTests { [Fact] public void MergeGeneratedRequests_WhenSameSupplierItemAndWeek_MergesQuantities() { var service = new PurchaseRequestMergeService(); var requests = new List { CreateRequest(1, new DateTime(2026, 5, 11), requireGoods: 0, qty: 10), CreateRequest(2, new DateTime(2026, 5, 13), requireGoods: 0, qty: 15) }; var result = service.MergeGeneratedRequests(requests); var merged = Assert.Single(result.Requests); Assert.Equal(2, result.OriginalCount); Assert.Equal(1, result.MergedCount); Assert.Equal(1, result.ReducedCount); Assert.Equal(25, merged.PrRqty); Assert.Equal(new DateTime(2026, 5, 11), merged.PrSsendDate); } [Fact] public void MergeGeneratedRequests_WhenRequireGoodsDiffers_DoesNotMerge() { var service = new PurchaseRequestMergeService(); var requests = new List { CreateRequest(1, new DateTime(2026, 5, 11), requireGoods: 0, qty: 10), CreateRequest(2, new DateTime(2026, 5, 13), requireGoods: 1, qty: 15) }; var result = service.MergeGeneratedRequests(requests); Assert.Equal(2, result.Requests.Count); Assert.Equal(0, result.ReducedCount); } [Fact] public void MergeGeneratedRequests_WhenDifferentWeek_DoesNotMerge() { var service = new PurchaseRequestMergeService(); var requests = new List { CreateRequest(1, new DateTime(2026, 5, 17), requireGoods: 0, qty: 10), CreateRequest(2, new DateTime(2026, 5, 18), requireGoods: 0, qty: 15) }; var result = service.MergeGeneratedRequests(requests); Assert.Equal(2, result.Requests.Count); Assert.Equal(0, result.ReducedCount); } [Fact] public void SelectPushCandidates_WhenNormalPrHasBillNo_ReturnsOnlySapQadCandidates() { var requests = new List { CreateRequest(1, new DateTime(2026, 5, 11), requireGoods: 0, qty: 10, billNo: "PR001"), CreateRequest(2, new DateTime(2026, 5, 11), requireGoods: 1, qty: 10, billNo: "PR002"), CreateRequest(3, new DateTime(2026, 5, 11), requireGoods: 0, qty: 10, billNo: null), CreateRequest(4, new DateTime(2026, 5, 11), requireGoods: 0, qty: 10, billNo: " ") }; var candidates = PurchaseRequestExternalPushService.SelectPushCandidates(requests); var candidate = Assert.Single(candidates); Assert.Equal(1, candidate.Id); Assert.Equal("PR001", candidate.PrBillNo); } private static PurchaseRequestMain CreateRequest(long id, DateTime sendDate, int requireGoods, decimal qty, string? billNo = "PR") { return new PurchaseRequestMain { Id = id, TenantId = 1000, CompanyId = 10, FactoryId = 20, IcitemId = 30, PrPurchaseId = 40, SupplierType = "标准", IsRequireGoods = requireGoods, PrBillNo = billNo, PrRqty = qty, PrAqty = qty, PrSqty = qty, PrSsendDate = sendDate, PrSarriveDate = sendDate.AddDays(3), CreateTime = sendDate.AddHours(8) }; } }