PurchaseRequestMigrationFlowTests.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using Admin.NET.Plugin.AiDOP.Supply;
  2. using Xunit;
  3. namespace Admin.NET.Plugin.AiDOP.Tests.S3.Supply;
  4. public class PurchaseRequestMigrationFlowTests
  5. {
  6. [Fact]
  7. public void MergeGeneratedRequests_WhenSameSupplierItemAndWeek_MergesQuantities()
  8. {
  9. var service = new PurchaseRequestMergeService();
  10. var requests = new List<PurchaseRequestMain>
  11. {
  12. CreateRequest(1, new DateTime(2026, 5, 11), requireGoods: 0, qty: 10),
  13. CreateRequest(2, new DateTime(2026, 5, 13), requireGoods: 0, qty: 15)
  14. };
  15. var result = service.MergeGeneratedRequests(requests);
  16. var merged = Assert.Single(result.Requests);
  17. Assert.Equal(2, result.OriginalCount);
  18. Assert.Equal(1, result.MergedCount);
  19. Assert.Equal(1, result.ReducedCount);
  20. Assert.Equal(25, merged.PrRqty);
  21. Assert.Equal(new DateTime(2026, 5, 11), merged.PrSsendDate);
  22. }
  23. [Fact]
  24. public void MergeGeneratedRequests_WhenRequireGoodsDiffers_DoesNotMerge()
  25. {
  26. var service = new PurchaseRequestMergeService();
  27. var requests = new List<PurchaseRequestMain>
  28. {
  29. CreateRequest(1, new DateTime(2026, 5, 11), requireGoods: 0, qty: 10),
  30. CreateRequest(2, new DateTime(2026, 5, 13), requireGoods: 1, qty: 15)
  31. };
  32. var result = service.MergeGeneratedRequests(requests);
  33. Assert.Equal(2, result.Requests.Count);
  34. Assert.Equal(0, result.ReducedCount);
  35. }
  36. [Fact]
  37. public void MergeGeneratedRequests_WhenDifferentWeek_DoesNotMerge()
  38. {
  39. var service = new PurchaseRequestMergeService();
  40. var requests = new List<PurchaseRequestMain>
  41. {
  42. CreateRequest(1, new DateTime(2026, 5, 17), requireGoods: 0, qty: 10),
  43. CreateRequest(2, new DateTime(2026, 5, 18), requireGoods: 0, qty: 15)
  44. };
  45. var result = service.MergeGeneratedRequests(requests);
  46. Assert.Equal(2, result.Requests.Count);
  47. Assert.Equal(0, result.ReducedCount);
  48. }
  49. [Fact]
  50. public void SelectPushCandidates_WhenNormalPrHasBillNo_ReturnsOnlySapQadCandidates()
  51. {
  52. var requests = new List<PurchaseRequestMain>
  53. {
  54. CreateRequest(1, new DateTime(2026, 5, 11), requireGoods: 0, qty: 10, billNo: "PR001"),
  55. CreateRequest(2, new DateTime(2026, 5, 11), requireGoods: 1, qty: 10, billNo: "PR002"),
  56. CreateRequest(3, new DateTime(2026, 5, 11), requireGoods: 0, qty: 10, billNo: null),
  57. CreateRequest(4, new DateTime(2026, 5, 11), requireGoods: 0, qty: 10, billNo: " ")
  58. };
  59. var candidates = PurchaseRequestExternalPushService.SelectPushCandidates(requests);
  60. var candidate = Assert.Single(candidates);
  61. Assert.Equal(1, candidate.Id);
  62. Assert.Equal("PR001", candidate.PrBillNo);
  63. }
  64. private static PurchaseRequestMain CreateRequest(long id, DateTime sendDate, int requireGoods, decimal qty, string? billNo = "PR")
  65. {
  66. return new PurchaseRequestMain
  67. {
  68. Id = id,
  69. TenantId = 1000,
  70. CompanyId = 10,
  71. FactoryId = 20,
  72. IcitemId = 30,
  73. PrPurchaseId = 40,
  74. SupplierType = "标准",
  75. IsRequireGoods = requireGoods,
  76. PrBillNo = billNo,
  77. PrRqty = qty,
  78. PrAqty = qty,
  79. PrSqty = qty,
  80. PrSsendDate = sendDate,
  81. PrSarriveDate = sendDate.AddDays(3),
  82. CreateTime = sendDate.AddHours(8)
  83. };
  84. }
  85. }