Use last version for revert version allocation

This commit is contained in:
Shivamkmr8 2026-08-11 12:39:55 +05:30
parent 5429008d98
commit d9ba421737
2 changed files with 67 additions and 4 deletions

View file

@ -153,12 +153,17 @@ public class WorkflowDefinitionPublisher(
public async Task<WorkflowDefinition> 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;
}
}
}

View file

@ -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<IWorkflowDefinitionStore>();
var publisher = _services.GetRequiredService<IWorkflowDefinitionPublisher>();
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);
}
}