using Elsa.Common; using Elsa.Testing.Shared; using Elsa.Workflows.Activities; using Elsa.Workflows.Management.Options; using Microsoft.Extensions.Options; using NSubstitute; namespace Elsa.Workflows.Runtime.UnitTests.Services; /// /// Unit tests for DefaultActivityExecutionMapper. /// public class DefaultActivityExecutionMapperTests { /// /// Tests that the mapper correctly maps CallStackDepth, SchedulingActivityExecutionId, /// and SchedulingActivityId from the ActivityExecutionContext to the record. /// [Fact] public async Task MapAsync_MapsCallStackDepth_Correctly() { // Arrange var safeSerializer = Substitute.For(); safeSerializer.Serialize(Arg.Any()).Returns("serialized"); var payloadSerializer = Substitute.For(); payloadSerializer.Serialize(Arg.Any()).Returns("serialized"); var compressionCodecResolver = Substitute.For(); var compressionCodec = Substitute.For(); compressionCodecResolver.Resolve(Arg.Any()).Returns(compressionCodec); compressionCodec.CompressAsync(Arg.Any(), Arg.Any()).Returns(new ValueTask("compressed")); var managementOptions = Substitute.For>(); managementOptions.Value.Returns(new ManagementOptions()); var mapper = new DefaultActivityExecutionMapper( safeSerializer, payloadSerializer, compressionCodecResolver, managementOptions); // Use ActivityTestFixture to create real context objects var activity = new WriteLine("Test"); var fixture = new ActivityTestFixture(activity); var activityExecutionContext = await fixture.BuildAsync(); // Set the properties we want to test activityExecutionContext.CallStackDepth = 2; activityExecutionContext.SchedulingActivityExecutionId = "context-b"; activityExecutionContext.SchedulingActivityId = "activity-b"; // Act var record = await mapper.MapAsync(activityExecutionContext); // Assert Assert.NotNull(record); Assert.Equal(2, record.CallStackDepth); Assert.Equal("context-b", record.SchedulingActivityExecutionId); Assert.Equal("activity-b", record.SchedulingActivityId); } }