test_workflow_engine_abstraction_schema.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from pathlib import Path
  2. ROOT = Path(__file__).resolve().parents[1]
  3. MIGRATION = (
  4. ROOT
  5. / "migrations"
  6. / "versions"
  7. / "20260718_60_workflow_engine_abstraction.py"
  8. )
  9. def test_engine_abstraction_migration_preserves_n8n_and_adds_generic_tables():
  10. migration = MIGRATION.read_text(encoding="utf-8")
  11. assert 'revision = "20260718_60"' in migration
  12. assert 'down_revision = "20260718_50"' in migration
  13. assert "engine_type" in migration
  14. assert "engine_definition_id" in migration
  15. assert "engine_revision" in migration
  16. assert "deployment_metadata" in migration
  17. assert "workflow_spec" in migration
  18. assert "schedule_plan" in migration
  19. assert "UPDATE public.dataflow_workflow_versions" in migration
  20. assert "n8n_workflow_id" in migration
  21. for table in (
  22. "workflow_schedules",
  23. "workflow_runs",
  24. "workflow_task_runs",
  25. "workflow_engine_bindings",
  26. "workflow_plan_audits",
  27. ):
  28. assert table in migration
  29. def test_database_enforces_one_enabled_primary_engine_per_dataflow_environment():
  30. migration = MIGRATION.read_text(encoding="utf-8")
  31. assert "uq_workflow_engine_primary_environment" in migration
  32. assert "WHERE role = 'primary' AND status = 'enabled'" in migration
  33. assert "uq_workflow_engine_shadow_environment" in migration
  34. def test_v50_migration_has_an_explicit_rollback():
  35. migration = MIGRATION.read_text(encoding="utf-8")
  36. downgrade = migration.split("def downgrade() -> None:", 1)[1]
  37. assert "DROP TABLE IF EXISTS public.workflow_plan_audits" in downgrade
  38. assert "DROP COLUMN IF EXISTS engine_type" in downgrade