From d9ba421737f0e5db2742c2f3b621221bdbf45e62 Mon Sep 17 00:00:00 2001 From: Shivamkmr8 Date: Tue, 11 Aug 2026 12:39:55 +0530 Subject: [PATCH] Use last version for revert version allocation --- .../Services/WorkflowDefinitionPublisher.cs | 13 +++-- .../WorkflowDefinitionVersioning/Tests.cs | 58 +++++++++++++++++++ 2 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowDefinitionVersioning/Tests.cs diff --git a/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionPublisher.cs b/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionPublisher.cs index 30afc6d7a..ff9b3c394 100644 --- a/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionPublisher.cs +++ b/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionPublisher.cs @@ -153,12 +153,17 @@ public class WorkflowDefinitionPublisher( public async Task RevertVersionAsync(string definitionId, int version, CancellationToken cancellationToken = default) { - var filter = new WorkflowDefinitionFilter + var latestVersionFilter = new WorkflowDefinitionFilter { DefinitionId = definitionId, VersionOptions = VersionOptions.Latest }; - var latestVersion = await workflowDefinitionStore.FindAsync(filter, cancellationToken); + var latestVersion = await workflowDefinitionStore.FindAsync(latestVersionFilter, cancellationToken); + var lastVersionFilter = new WorkflowDefinitionFilter + { + DefinitionId = definitionId + }; + var lastVersion = await workflowDefinitionStore.FindLastVersionAsync(lastVersionFilter, cancellationToken); if (latestVersion != null) { @@ -168,7 +173,7 @@ public class WorkflowDefinitionPublisher( var draft = await GetDraftAsync(definitionId, VersionOptions.SpecificVersion(version), cancellationToken); draft!.Id = identityGenerator.GenerateId(); - draft.Version = (latestVersion?.Version ?? 0) + 1; + draft.Version = (lastVersion?.Version ?? 0) + 1; draft.IsLatest = true; await workflowDefinitionStore.SaveAsync(draft, cancellationToken); @@ -251,4 +256,4 @@ public class WorkflowDefinitionPublisher( return definition; } -} \ No newline at end of file +} diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowDefinitionVersioning/Tests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowDefinitionVersioning/Tests.cs new file mode 100644 index 000000000..75663612b --- /dev/null +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowDefinitionVersioning/Tests.cs @@ -0,0 +1,58 @@ +using Elsa.Testing.Shared; +using Elsa.Workflows.Management; +using Elsa.Workflows.Management.Entities; +using Microsoft.Extensions.DependencyInjection; +using Xunit.Abstractions; + +namespace Elsa.Workflows.IntegrationTests.Scenarios.WorkflowDefinitionVersioning; + +public class Tests +{ + private readonly IServiceProvider _services; + + public Tests(ITestOutputHelper testOutputHelper) + { + _services = new TestApplicationBuilder(testOutputHelper).Build(); + } + + [Fact] + public async Task RevertVersionAsync_ShouldAllocateVersionAfterHighestStoredVersion() + { + const string definitionId = "test-definition"; + var store = _services.GetRequiredService(); + var publisher = _services.GetRequiredService(); + var definitions = new WorkflowDefinition[] + { + new() + { + Id = "v1", + DefinitionId = definitionId, + Version = 1, + IsPublished = true, + IsLatest = false + }, + new() + { + Id = "v2", + DefinitionId = definitionId, + Version = 2, + IsPublished = false, + IsLatest = true + }, + new() + { + Id = "v3", + DefinitionId = definitionId, + Version = 3, + IsPublished = false, + IsLatest = false + } + }; + + await store.SaveManyAsync(definitions); + + var revertedDefinition = await publisher.RevertVersionAsync(definitionId, 1); + + Assert.Equal(4, revertedDefinition.Version); + } +}