* Initial plan
* Add consumers API endpoint and enhance export with IncludeConsumingWorkflows option
- New endpoint: GET /workflow-definitions/{definitionId}/consumers
- Export request model: added IncludeConsumingWorkflows boolean property
- Export endpoint: recursive consumer discovery and inclusion in exports
Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>
* Address greptile-apps feedback: fix double-fetch, remove redundant HashSet, add version comment, remove unused params
- Extract WriteZipResponseAsync helper to avoid double-fetching definitions from DB
- Remove redundant existingDefinitionIds HashSet in IncludeConsumersAsync
- Add XML doc comment documenting that consumers are resolved at VersionOptions.Latest
- Remove unused constructor parameters (workflowDefinitionService, variableDefinitionMapper)
Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>
* Address greptile-apps round 2: 404 for unknown definitions, deterministic ZIP response, parallel BFS
- Consumers endpoint now returns 404 when the definition ID doesn't exist
- Single-workflow export always returns ZIP when includeConsumingWorkflows=true
- BFS traversal processes each frontier level concurrently via Task.WhenAll
Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>
* Implement workflow reference graph feature
- Added `IWorkflowReferenceGraphBuilder` interface for building complete graphs of workflow references.
- Created `WorkflowReferenceGraph` and `WorkflowReferenceEdge` models.
- Implemented `WorkflowReferenceGraphBuilder` service for recursive graph building.
- Replaced previous workflow reference query logic with the new graph-based approach in consumers.
* Refactor workflow consumers to utilize recursive graph-based approach for retrieving consumer definitions.
* Enhance workflow export by adding support for including consuming workflows and update nullable default values across endpoints and models.
* Add WorkflowReferenceGraphOptions for depth and definition limit configuration
- Introduced `WorkflowReferenceGraphOptions` to configure max depth and definition limits for reference graph building.
- Updated `WorkflowManagementFeature` to support configuring these options.
- Enhanced `WorkflowReferenceGraphBuilder` to respect configuration limits during graph construction process.
* Refactor `WorkflowReferenceGraphBuilder` to utilize target-typed new expressions for cleaner code.
* Add Workflow Reference Graph tests and scenarios
Introduced JSON files for parent-child-grandchild workflow hierarchy tests and implemented unit tests for `WorkflowReferenceGraphBuilder`. Also added component tests for workflow export and consumers endpoint validation. Updated project configuration for workflow JSON to always copy to output directory.
* Include DefinitionId in exported workflow definition filenames for uniqueness.
* Remove unused models and constants from `WorkflowReferenceGraphTests`.
* Refactor `WorkflowReferenceGraphBuilderTests`: streamline test setup with `SetupGraph`, replace repeated assertions with helper methods.
* Deterministic ZIP export and 404 test coverage for consumers endpoint (#7312)
* Initial plan
* Fix deterministic ZIP export and add 404 test for consumers endpoint
Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>
117 lines
5.7 KiB
XML
117 lines
5.7 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
|
|
<PropertyGroup>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<Nullable>enable</Nullable>
|
|
|
|
<IsPackable>false</IsPackable>
|
|
<IsTestProject>true</IsTestProject>
|
|
<Threshold>25</Threshold>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="JetBrains.Annotations" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Using Include="Xunit" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<ProjectReference Include="..\..\..\src\apps\Elsa.Server.Web\Elsa.Server.Web.csproj" />
|
|
<ProjectReference Include="..\..\..\src\clients\Elsa.Api.Client\Elsa.Api.Client.csproj" />
|
|
<ProjectReference Include="..\..\..\src\common\Elsa.Testing.Shared.Component\Elsa.Testing.Shared.Component.csproj" />
|
|
<ProjectReference Include="..\..\..\src\modules\Elsa.Persistence.EFCore.PostgreSql\Elsa.Persistence.EFCore.PostgreSql.csproj" />
|
|
<ProjectReference Include="..\..\..\src\modules\Elsa.Persistence.EFCore.SqlServer\Elsa.Persistence.EFCore.SqlServer.csproj" />
|
|
<ProjectReference Include="..\..\..\src\modules\Elsa.Scheduling\Elsa.Scheduling.csproj" />
|
|
<ProjectReference Include="..\..\..\src\modules\Elsa.WorkflowProviders.BlobStorage\Elsa.WorkflowProviders.BlobStorage.csproj" />
|
|
<ProjectReference Include="..\..\..\src\modules\Elsa.Workflows.Runtime.Distributed\Elsa.Workflows.Runtime.Distributed.csproj" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<None Update="xunit.runner.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\BasicWorkflows\hello-world.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowCompletion\fork.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\LogPersistenceModes\input-output-logging-1.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\LogPersistenceModes\input-output-logging-2.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\LogPersistenceModes\input-output-logging-3.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\LogPersistenceModes\input-output-logging-3-child.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowCompletion\hello-world.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\CachingAndWorkflowDefinitionActivity\Workflows\workflow-definition-child.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\CachingAndWorkflowDefinitionActivity\Workflows\workflow-definition-grand-child.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\CachingAndWorkflowDefinitionActivity\Workflows\workflow-definition-parent.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowActivities\Workflows\CacheInvalidation_Child.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowActivities\Workflows\CacheInvalidation_Parent.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowActivities\Workflows\CacheInvalidation_Childv2.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowJsonStructures\main.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowJsonStructures\sub.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowDefinitionRefresh\dynamic-endpoint-http-workflow.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowDefinitionReload\http-workflow.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowDefinitionReload\Workflows\http-workflow.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\HttpWorkflows\Workflows\http-hello-world.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\InputOutput\Workflows\consumer.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\InputOutput\Workflows\provider.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\RestApis\Workflows\hello-world.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowReferenceGraph\Workflows\refgraph-grandchild.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowReferenceGraph\Workflows\refgraph-child.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Scenarios\WorkflowReferenceGraph\Workflows\refgraph-parent.json">
|
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
</None>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Folder Include="Scenarios\HostMethodActivities\" />
|
|
</ItemGroup>
|
|
|
|
</Project>
|