MdpStandardUpsertContractTests.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using Xunit;
  2. namespace Admin.NET.Plugin.AiDOP.Tests.DataPlatform;
  3. public class MdpStandardUpsertContractTests
  4. {
  5. [Fact]
  6. public void S1ShipStandardUpsert_RefreshesFactoryScope()
  7. {
  8. var source = File.ReadAllText(FindFile(
  9. "server", "Plugins", "Admin.NET.Plugin.AiDOP", "Order", "S1MdpSyncTransformService.cs"));
  10. Assert.True(Count(source, "factory_id=VALUES(factory_id)") >= 3);
  11. Assert.Contains("shipper_no=VALUES(shipper_no)", source);
  12. Assert.DoesNotContain("SELECT tenant_id AS TenantId, 1 AS FactoryId,\n 'S1_L1_004'", source);
  13. Assert.DoesNotContain("SELECT tenant_id AS TenantId, 1 AS FactoryId,\n 'S1_L2_013'", source);
  14. Assert.DoesNotContain("SELECT tenant_id AS TenantId, 1 AS FactoryId,\n 'S1_L2_014'", source);
  15. Assert.DoesNotContain("SELECT tenant_id AS TenantId, 1 AS FactoryId,\n 'S1_L2_015'", source);
  16. }
  17. [Fact]
  18. public void S3DeliveryScheduleUpsert_RefreshesLifecycleDates()
  19. {
  20. var source = File.ReadAllText(FindFile(
  21. "server", "Plugins", "Admin.NET.Plugin.AiDOP", "Supply", "S3MdpSyncTransformService.cs"));
  22. Assert.Contains("request_date=VALUES(request_date)", source);
  23. Assert.Contains("submit_date=VALUES(submit_date)", source);
  24. Assert.Contains("last_sent_date=VALUES(last_sent_date)", source);
  25. Assert.Contains("send_date=VALUES(send_date)", source);
  26. Assert.Contains("arrive_date=VALUES(arrive_date)", source);
  27. Assert.Contains("issued_qty=VALUES(issued_qty)", source);
  28. Assert.Contains("shortage_qty=VALUES(shortage_qty)", source);
  29. Assert.Contains("ready_status=VALUES(ready_status)", source);
  30. Assert.Contains("factory_id=VALUES(factory_id)", source);
  31. }
  32. [Fact]
  33. public void S3S4DashboardDerivedQueries_StayFactoryScoped()
  34. {
  35. var source = File.ReadAllText(FindFile(
  36. "server", "Plugins", "Admin.NET.Plugin.AiDOP", "Controllers", "AidopKanbanController.cs"));
  37. Assert.Contains("GetS3ReadinessSummaryAsync(long tenantId, long factoryId)", source);
  38. Assert.Contains("GetS3DeliverySummaryAsync(long tenantId, long factoryId)", source);
  39. Assert.True(Count(source, "COALESCE(NULLIF(factory_id,0),1)=@factoryId") >= 10);
  40. }
  41. [Fact]
  42. public void S4ProcurementCycle_UsesActualReceiptDate()
  43. {
  44. var source = File.ReadAllText(FindFile(
  45. "server", "Plugins", "Admin.NET.Plugin.AiDOP", "ProcurementExecution", "S4MdpSyncTransformService.cs"));
  46. Assert.Contains("FROM mdp_std_delivery_result", source);
  47. Assert.Contains("MAX(receipt_date) AS receipt_date", source);
  48. Assert.Contains("TIMESTAMPDIFF(DAY, ds.request_date, r.receipt_date)", source);
  49. Assert.DoesNotContain(
  50. "TIMESTAMPDIFF(DAY, ds.request_date, COALESCE(ds.submit_date, ds.last_sent_date))",
  51. source);
  52. }
  53. private static int Count(string source, string token)
  54. {
  55. var count = 0;
  56. for (var index = 0; (index = source.IndexOf(token, index, StringComparison.Ordinal)) >= 0; index += token.Length)
  57. count++;
  58. return count;
  59. }
  60. private static string FindFile(params string[] parts)
  61. {
  62. var dir = new DirectoryInfo(AppContext.BaseDirectory);
  63. while (dir != null)
  64. {
  65. var candidate = Path.Combine(new[] { dir.FullName }.Concat(parts).ToArray());
  66. if (File.Exists(candidate)) return candidate;
  67. dir = dir.Parent;
  68. }
  69. throw new FileNotFoundException(string.Join("/", parts));
  70. }
  71. }