S6MdpSyncTransformServiceTests.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using Admin.NET.Plugin.AiDOP.Manufacturing;
  2. using Xunit;
  3. namespace Admin.NET.Plugin.AiDOP.Tests.S6.Manufacturing;
  4. public class S6MdpSyncTransformServiceTests
  5. {
  6. [Fact]
  7. public void OrderFulfillmentPercent_ClampsEachOrderToZeroAndOneHundred()
  8. {
  9. var value = S6MdpSyncTransformService.CalculateOrderFulfillmentPercent(new[]
  10. {
  11. (PlanQty: (decimal?)100m, DoneQty: (decimal?)150m),
  12. (PlanQty: (decimal?)100m, DoneQty: (decimal?)-20m),
  13. (PlanQty: (decimal?)0m, DoneQty: (decimal?)100m)
  14. });
  15. Assert.Equal(50m, value);
  16. }
  17. [Fact]
  18. public void RunFull_ContainsAllThreeOrderLevelKpis()
  19. {
  20. var source = ReadServiceSource();
  21. Assert.Contains("result.MergeSub(\"S6_L1_001\"", source);
  22. Assert.Contains("result.MergeSub(\"S6_L1_002\"", source);
  23. Assert.Contains("result.MergeSub(\"S6_L1_003\"", source);
  24. }
  25. [Fact]
  26. public void OrderAndWorkOrderKpis_WriteToSeparateValueTables()
  27. {
  28. var source = ReadServiceSource();
  29. Assert.Contains("UpsertKpiValueAsync(\"S6_L1_001\"", source);
  30. Assert.Contains("UpsertKpiValueAsync(\"S6_L1_002\"", source);
  31. Assert.Contains("UpsertKpiValueAsync(\"S6_L1_003\"", source);
  32. Assert.Contains("UpsertKpiValueAsync(\"S6_L2_002\"", source);
  33. Assert.Contains("UpsertKpiValueAsync(\"S6_L2_003\"", source);
  34. Assert.Contains("option, L2ValueTable)", source);
  35. Assert.Contains("valueTable = \"ado_s9_kpi_value_l1_day\"", source);
  36. }
  37. [Fact]
  38. public void StandardLayerQueries_UseTenantAndZtidParameters()
  39. {
  40. var source = ReadServiceSource();
  41. Assert.DoesNotContain("where a.ztid=@ztid", source, StringComparison.OrdinalIgnoreCase);
  42. Assert.DoesNotContain("where ztid=@ztid", source, StringComparison.OrdinalIgnoreCase);
  43. Assert.Contains("tenant_id=@tenantId", source, StringComparison.OrdinalIgnoreCase);
  44. Assert.Contains("a.ztid=@ztid", source, StringComparison.OrdinalIgnoreCase);
  45. }
  46. [Fact]
  47. public void OrderLevelQueries_AvoidReservedLinesAlias()
  48. {
  49. var source = ReadServiceSource();
  50. Assert.DoesNotContain(") lines", source, StringComparison.OrdinalIgnoreCase);
  51. Assert.Contains(") order_lines", source, StringComparison.OrdinalIgnoreCase);
  52. }
  53. private static string ReadServiceSource()
  54. {
  55. var dir = new DirectoryInfo(AppContext.BaseDirectory);
  56. while (dir != null)
  57. {
  58. var candidate = Path.Combine(dir.FullName,
  59. "server", "Plugins", "Admin.NET.Plugin.AiDOP", "Manufacturing",
  60. "S6MdpSyncTransformService.cs");
  61. if (File.Exists(candidate)) return File.ReadAllText(candidate);
  62. dir = dir.Parent;
  63. }
  64. throw new FileNotFoundException("S6MdpSyncTransformService.cs");
  65. }
  66. }