StartupDbInitSkipContractTests.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using Xunit;
  2. namespace Admin.NET.Plugin.AiDOP.Tests.Infrastructure;
  3. public class StartupDbInitSkipContractTests
  4. {
  5. [Fact]
  6. public void ExistingSchemaMode_SkipsPluginDatabaseInitializationBeforeSourceBackfill()
  7. {
  8. var source = File.ReadAllText(Path.Combine(
  9. RepoRoot(), "server", "Plugins", "Admin.NET.Plugin.AiDOP", "Startup.cs"));
  10. var guard = source.IndexOf("Environment.GetEnvironmentVariable(\"DOCKER_SKIP_DBINIT\")", StringComparison.Ordinal);
  11. var backfill = source.IndexOf("MdpSchemaAligner.EnsureSourceIdentityAsync", StringComparison.Ordinal);
  12. Assert.True(guard >= 0);
  13. Assert.True(backfill > guard);
  14. Assert.Contains("return;", source[guard..backfill], StringComparison.Ordinal);
  15. }
  16. [Fact]
  17. public void ExistingSchemaMode_SkipsApprovalFlowCodeFirstAndSeeds()
  18. {
  19. var source = File.ReadAllText(Path.Combine(
  20. RepoRoot(), "server", "Plugins", "Admin.NET.Plugin.ApprovalFlow", "Startup.cs"));
  21. var middleware = source.IndexOf("app.UseApprovalFlow()", StringComparison.Ordinal);
  22. var guard = source.IndexOf("Environment.GetEnvironmentVariable(\"DOCKER_SKIP_DBINIT\")", StringComparison.Ordinal);
  23. var codeFirst = source.IndexOf("db.CodeFirst.InitTables", StringComparison.Ordinal);
  24. var seeds = source.IndexOf("EnsureSystemTemplates()", StringComparison.Ordinal);
  25. Assert.True(middleware >= 0);
  26. Assert.True(guard > middleware);
  27. Assert.True(codeFirst > guard);
  28. Assert.True(seeds > codeFirst);
  29. Assert.Contains("return;", source[guard..codeFirst], StringComparison.Ordinal);
  30. }
  31. private static string RepoRoot()
  32. {
  33. var dir = new DirectoryInfo(AppContext.BaseDirectory);
  34. while (dir != null && !Directory.Exists(Path.Combine(dir.FullName, "server")))
  35. dir = dir.Parent;
  36. return dir?.FullName ?? throw new DirectoryNotFoundException("Repository root not found.");
  37. }
  38. }