T8KpiTenantIsolationContractTests.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using Xunit;
  2. namespace Admin.NET.Plugin.AiDOP.Tests.DataPlatform;
  3. public class T8KpiTenantIsolationContractTests
  4. {
  5. [Theory]
  6. [InlineData("MaterialWarehouse", "S5MdpSyncTransformService.cs")]
  7. [InlineData("FinishedWarehouse", "S7MdpSyncTransformService.cs")]
  8. [InlineData("Manufacturing", "S6MdpSyncTransformService.cs")]
  9. public void StandardLayerQueries_FilterByTenantAndDoNotReadT8Tables(string moduleDirectory, string serviceFile)
  10. {
  11. var source = ReadServiceSource(moduleDirectory, serviceFile);
  12. Assert.Contains("@tenantId", source, StringComparison.OrdinalIgnoreCase);
  13. Assert.DoesNotContain("mdp_std_t8_", source, StringComparison.OrdinalIgnoreCase);
  14. Assert.Contains(
  15. "new SugarParameter(\"@tenantId\", option.TargetTenantId)",
  16. source,
  17. StringComparison.Ordinal);
  18. }
  19. [Fact]
  20. public void S5_FulfillmentAndEfficiency_KeepTenantPredicate()
  21. {
  22. var source = ReadServiceSource("MaterialWarehouse", "S5MdpSyncTransformService.cs");
  23. Assert.Contains("tenant_id=@tenantId", source, StringComparison.OrdinalIgnoreCase);
  24. Assert.Contains("position_code='WAREHOUSE'", source, StringComparison.Ordinal);
  25. Assert.Contains("biz_doc_type='PROD_ISSUE'", source, StringComparison.Ordinal);
  26. }
  27. [Fact]
  28. public void S7_CycleFulfillmentAndEfficiency_KeepTenantPredicate()
  29. {
  30. var source = ReadServiceSource("FinishedWarehouse", "S7MdpSyncTransformService.cs");
  31. Assert.Contains("tenant_id=@tenantId", source, StringComparison.OrdinalIgnoreCase);
  32. Assert.Contains("position_code='WAREHOUSE'", source, StringComparison.Ordinal);
  33. Assert.Contains("biz_doc_type='SALES_SHIP'", source, StringComparison.Ordinal);
  34. }
  35. private static string ReadServiceSource(string moduleDirectory, string serviceFile)
  36. {
  37. var dir = new DirectoryInfo(AppContext.BaseDirectory);
  38. while (dir != null)
  39. {
  40. var candidate = Path.Combine(
  41. dir.FullName,
  42. "server",
  43. "Plugins",
  44. "Admin.NET.Plugin.AiDOP",
  45. moduleDirectory,
  46. serviceFile);
  47. if (File.Exists(candidate)) return File.ReadAllText(candidate);
  48. dir = dir.Parent;
  49. }
  50. throw new FileNotFoundException(serviceFile);
  51. }
  52. }