elsa-core/test/unit/Elsa.Workflows.Core.UnitTests/ExpressionExecutionContextExtensionsTests.cs
gurkanguran d29df110d2
Fixed getting and setting variables in context (#4267)
* Fixed getting and setting variables in context

* Added unit tests

* Add test for named variable

* Search variable in parent contexts

---------

Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
2023-07-31 18:53:50 +02:00

104 lines
3.2 KiB
C#

using Elsa.Expressions.Models;
using Elsa.Extensions;
using Elsa.Workflows.Core.Memory;
namespace Elsa.Workflows.Core.UnitTests;
public class ExpressionExecutionContextExtensionsTests
{
[Fact]
public void GetVariableByName_ReturnsVariable_WhenVariableExists()
{
// Arrange
var variable = new Variable("test", 5);
var memoryRegister = new MemoryRegister(new Dictionary<string, MemoryBlock>
{
{ variable.Id, new MemoryBlock(variable.Value, new VariableBlockMetadata(variable, typeof(object), true)) }
});
var context = new ExpressionExecutionContext(null!, memoryRegister);
// Act
var result = context.GetVariableByName<int>("test");
// Assert
Assert.Equal(5, result);
}
[Fact]
public void GetVariableByName_ReturnsNull_WhenVariableDoesNotExist()
{
// Arrange
var memoryRegister = new MemoryRegister(new Dictionary<string, MemoryBlock>());
var context = new ExpressionExecutionContext(null!, memoryRegister);
// Act
var result = context.GetVariableByName<string>("nonexistent");
// Assert
Assert.Null(result);
}
[Fact]
public void CreateVariable_ThrowsException_WhenVariableExists()
{
// Arrange
var variable = new Variable("test", 5);
var memoryRegister = new MemoryRegister(new Dictionary<string, MemoryBlock>
{
{ variable.Id, new MemoryBlock(variable.Value, new VariableBlockMetadata(variable, typeof(object), true)) }
});
var context = new ExpressionExecutionContext(null!, memoryRegister);
// Act & Assert
Assert.Throws<Exception>(() => context.CreateVariable("test", 10));
}
[Fact]
public void CreateVariable_CreatesVariable_WhenVariableDoesNotExist()
{
// Arrange
var memoryRegister = new MemoryRegister(new Dictionary<string, MemoryBlock>());
var context = new ExpressionExecutionContext(null!, memoryRegister);
// Act
context.CreateVariable("newVariable", 10);
// Assert
var variable = context.GetVariableByName<int>("newVariable");
Assert.Equal(10, variable);
}
[Fact]
public void SetVariable_ThrowsException_WhenVariableDoesNotExist()
{
// Arrange
var memoryRegister = new MemoryRegister(new Dictionary<string, MemoryBlock>());
var context = new ExpressionExecutionContext(null!, memoryRegister);
// Act & Assert
Assert.Throws<Exception>(() => context.SetVariable("nonexistent", 10));
}
[Fact]
public void SetVariable_SetsValue_WhenVariableExists()
{
// Arrange
var variable = new Variable("test", 5);
var memoryRegister = new MemoryRegister(new Dictionary<string, MemoryBlock>
{
{ 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.GetVariableByName<int>("test");
Assert.Equal(10, updatedVariable);
}
}