using Elsa.Expressions.Models; using Elsa.Extensions; using Elsa.Workflows.Memory; namespace Elsa.Workflows.Core.UnitTests; public class ExpressionExecutionContextExtensionsTests { [Fact] public void GetVariable_ReturnsVariable_WhenVariableExists() { // Arrange var variable = new Variable("test", 5); var memoryRegister = new MemoryRegister(new Dictionary { { variable.Id, new MemoryBlock(variable.Value, new VariableBlockMetadata(variable, typeof(object), true)) } }); var context = new ExpressionExecutionContext(null!, memoryRegister); // Act var result = context.GetVariable("test"); // Assert Assert.Equal(5, result); } [Fact] public void GetVariable_ReturnsNull_WhenVariableDoesNotExist() { // Arrange var memoryRegister = new MemoryRegister(new Dictionary()); var context = new ExpressionExecutionContext(null!, memoryRegister); // Act var result = context.GetVariable("nonexistent"); // Assert Assert.Null(result); } [Fact] public void CreateVariable_ThrowsException_WhenVariableExists() { // Arrange var variable = new Variable("test", 5); var memoryRegister = new MemoryRegister(new Dictionary { { variable.Id, new MemoryBlock(variable.Value, new VariableBlockMetadata(variable, typeof(object), true)) } }); var context = new ExpressionExecutionContext(null!, memoryRegister); // Act & Assert Assert.Throws(() => context.CreateVariable("test", 10)); } [Fact] public void CreateVariable_CreatesVariable_WhenVariableDoesNotExist() { // Arrange var memoryRegister = new MemoryRegister(new Dictionary()); var context = new ExpressionExecutionContext(null!, memoryRegister); // Act context.CreateVariable("newVariable", 10); // Assert var variable = context.GetVariable("newVariable"); Assert.Equal(10, variable); } [Fact] public void SetVariable_CreatesVariable_WhenVariableDoesNotExist() { // Arrange var memoryRegister = new MemoryRegister(new Dictionary()); var context = new ExpressionExecutionContext(null!, memoryRegister); // Act context.CreateVariable("newVariable", 10); // Assert var variable = context.GetVariable("newVariable"); Assert.Equal(10, variable); } [Fact] public void SetVariable_SetsValue_WhenVariableExists() { // Arrange var variable = new Variable("test", 5); var memoryRegister = new MemoryRegister(new Dictionary { { variable.Id, new MemoryBlock(variable.Value, new VariableBlockMetadata(variable, typeof(object), true)) } }); var context = new ExpressionExecutionContext(null!, memoryRegister); // Act context.SetVariable("test", 10); // Assert var updatedVariable = context.GetVariable("test"); Assert.Equal(10, updatedVariable); } }