SmartDiagnosisEvidenceTests.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using Admin.NET.Plugin.AiDOP.SmartOps;
  2. using Xunit;
  3. namespace Admin.NET.Plugin.AiDOP.Tests.SmartOps;
  4. public class SmartDiagnosisEvidenceTests
  5. {
  6. [Theory]
  7. [InlineData("S1", "order_schedule")]
  8. [InlineData("S3", "supplier_delivery")]
  9. [InlineData("S3", "material_readiness")]
  10. [InlineData("S4", "supplier_delivery")]
  11. [InlineData("S5", "iqc_bill")]
  12. [InlineData("S6", "s6_report")]
  13. [InlineData("S7", "fqc_result")]
  14. [InlineData("S8", "s8_exception")]
  15. public void Module_ResolvesRegisteredSource(string module, string sourceKey)
  16. {
  17. Assert.Contains(SmartDiagnosisEvidenceRegistry.Resolve(module), x => x.Key == sourceKey);
  18. }
  19. [Fact]
  20. public void S9_ReusesModuleSources_NotAThirdFactChain()
  21. {
  22. var s9 = SmartDiagnosisEvidenceRegistry.Resolve("S9");
  23. Assert.DoesNotContain(s9, x => x.Key == "s8_exception");
  24. Assert.Equal(SmartDiagnosisEvidenceRegistry.All.Count(x => x.Key != "s8_exception"), s9.Count);
  25. Assert.Contains(s9, x => x.Domain == SmartDiagnosisEvidenceDomain.Delivery
  26. || x.Domain == SmartDiagnosisEvidenceDomain.Manufacturing);
  27. Assert.Contains(s9, x => x.Domain == SmartDiagnosisEvidenceDomain.Supply);
  28. Assert.Contains(s9, x => x.Domain == SmartDiagnosisEvidenceDomain.Quality);
  29. }
  30. [Fact]
  31. public void UnknownModule_IsUnsupported()
  32. {
  33. Assert.Contains(SmartDiagnosisEvidenceRegistry.Resolve("S8"), x => x.Key == "s8_exception");
  34. Assert.Empty(SmartDiagnosisEvidenceRegistry.Resolve("XX"));
  35. }
  36. [Fact]
  37. public void EverySource_RequiresTenantParameter_AndForbidsClientSql()
  38. {
  39. foreach (var source in SmartDiagnosisEvidenceRegistry.All)
  40. {
  41. Assert.Contains("@tenantId", source.CountSql, StringComparison.Ordinal);
  42. Assert.Contains("@tenantId", source.ItemSql, StringComparison.Ordinal);
  43. if (source.CountSql.Contains("factory_id", StringComparison.OrdinalIgnoreCase))
  44. {
  45. Assert.Contains("factory_id=1", source.CountSql, StringComparison.Ordinal);
  46. Assert.Contains("factory_id<>@tenantId", source.CountSql, StringComparison.Ordinal);
  47. Assert.Contains("factory_id=1", source.ItemSql, StringComparison.Ordinal);
  48. }
  49. Assert.DoesNotContain("{", source.ItemSql);
  50. Assert.DoesNotContain("+", source.CountSql);
  51. foreach (var filter in source.Filters)
  52. {
  53. Assert.DoesNotContain(" ", filter.SqlColumn);
  54. Assert.DoesNotContain(";", filter.SqlColumn);
  55. Assert.Matches("^[a-z0-9_]+$", filter.SqlColumn);
  56. }
  57. }
  58. }
  59. [Fact]
  60. public void ClientCannotRegisterArbitraryTable()
  61. {
  62. Assert.Null(SmartDiagnosisEvidenceRegistry.Get("sys_user"));
  63. Assert.Null(SmartDiagnosisEvidenceRegistry.Get("ado_smart_ops_improvement_plan;drop table"));
  64. }
  65. }