diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/Export/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/Export/Endpoint.cs index 3a4f06b37d..506dea1bbe 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/Export/Endpoint.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/Export/Endpoint.cs @@ -131,17 +131,19 @@ private async Task> IncludeConsumersAsync(List definitions, CancellationToken cancellationToken) { var zipStream = new MemoryStream(); + var sortedDefinitions = definitions.OrderBy(d => d.DefinitionId).ToList(); #if NET10_0_OR_GREATER await using (var zipArchive = new ZipArchive(zipStream, ZipArchiveMode.Create, true)) { // Create a JSON file for each workflow definition: - foreach (var definition in definitions) + foreach (var definition in sortedDefinitions) { var model = await CreateWorkflowModelAsync(definition, cancellationToken); var binaryJson = await SerializeWorkflowDefinitionAsync(model, cancellationToken); var fileName = GetFileName(model); var entry = zipArchive.CreateEntry(fileName, CompressionLevel.Optimal); + entry.LastWriteTime = DateTimeOffset.UnixEpoch; await using var entryStream = await entry.OpenAsync(cancellationToken); await entryStream.WriteAsync(binaryJson, cancellationToken); } @@ -150,12 +152,13 @@ private async Task WriteZipResponseAsync(List definitions, C using (var zipArchive = new ZipArchive(zipStream, ZipArchiveMode.Create, true)) { // Create a JSON file for each workflow definition: - foreach (var definition in definitions) + foreach (var definition in sortedDefinitions) { var model = await CreateWorkflowModelAsync(definition, cancellationToken); var binaryJson = await SerializeWorkflowDefinitionAsync(model, cancellationToken); var fileName = GetFileName(model); var entry = zipArchive.CreateEntry(fileName, CompressionLevel.Optimal); + entry.LastWriteTime = DateTimeOffset.UnixEpoch; await using var entryStream = entry.Open(); await entryStream.WriteAsync(binaryJson, cancellationToken); } diff --git a/test/component/Elsa.Workflows.ComponentTests/Scenarios/WorkflowReferenceGraph/WorkflowReferenceGraphTests.cs b/test/component/Elsa.Workflows.ComponentTests/Scenarios/WorkflowReferenceGraph/WorkflowReferenceGraphTests.cs index dd41beac2e..f37751ddd1 100644 --- a/test/component/Elsa.Workflows.ComponentTests/Scenarios/WorkflowReferenceGraph/WorkflowReferenceGraphTests.cs +++ b/test/component/Elsa.Workflows.ComponentTests/Scenarios/WorkflowReferenceGraph/WorkflowReferenceGraphTests.cs @@ -36,4 +36,16 @@ public async Task ConsumersEndpoint_LeafWorkflow_ReturnsEmpty() Assert.NotNull(response); Assert.Empty(response.ConsumingWorkflowDefinitionIds); } + + [Fact(DisplayName = "Consumers endpoint for unknown workflow returns not found")] + public async Task ConsumersEndpoint_UnknownWorkflow_ReturnsNotFound() + { + var client = WorkflowServer.CreateApiClient(); + const string unknownDefinitionId = "refgraph-unknown-definition"; + + var exception = await Assert.ThrowsAsync(async () => + await client.GetConsumersAsync(unknownDefinitionId)); + + Assert.Equal(System.Net.HttpStatusCode.NotFound, exception.StatusCode); + } }