work-flow/tests/Workflow.Tests/Condition/RangeComparatorTests.cs

105 lines
2.7 KiB
C#

namespace Workflow.Tests.Condition;
using System.Text.Json;
using FluentAssertions;
using Workflow.Domain.Expressions.Comparators;
using Xunit;
public class RangeComparatorTests
{
private readonly RangeComparator _sut = new();
[Fact]
public void Compare_Between_NumericInRange_ReturnsTrue()
{
_sut.Compare(5, "between", "1,10").Should().BeTrue();
}
[Fact]
public void Compare_Between_NumericOutOfRange_ReturnsFalse()
{
_sut.Compare(15, "between", "1,10").Should().BeFalse();
}
[Fact]
public void Compare_Between_NumericAtLowerBound_ReturnsTrue()
{
_sut.Compare(1, "between", "1,10").Should().BeTrue();
}
[Fact]
public void Compare_Between_NumericAtUpperBound_ReturnsTrue()
{
_sut.Compare(10, "between", "1,10").Should().BeTrue();
}
[Fact]
public void Compare_Between_DateInRange_ReturnsTrue()
{
_sut.Compare("2024-06-15", "between", "2024-01-01,2024-12-31").Should().BeTrue();
}
[Fact]
public void Compare_Between_DateOutOfRange_ReturnsFalse()
{
_sut.Compare("2023-06-15", "between", "2024-01-01,2024-12-31").Should().BeFalse();
}
[Fact]
public void Compare_Between_JsonArray_ReturnsTrue()
{
var range = JsonDocument.Parse("[1, 100]").RootElement;
_sut.Compare(50, "between", range).Should().BeTrue();
}
[Fact]
public void Compare_Between_JsonArrayDate_ReturnsTrue()
{
var range = JsonDocument.Parse("""["2024-01-01", "2024-12-31"]""").RootElement;
_sut.Compare("2024-06-15", "between", range).Should().BeTrue();
}
[Fact]
public void Compare_Between_NonNumericNonDate_ReturnsFalse()
{
_sut.Compare("hello", "between", "a,z").Should().BeFalse();
}
[Fact]
public void Compare_Between_NullField_ReturnsFalse()
{
_sut.Compare(null, "between", "1,10").Should().BeFalse();
}
[Fact]
public void Compare_Between_InvalidRange_ReturnsFalse()
{
_sut.Compare(5, "between", "single").Should().BeFalse();
}
[Fact]
public void Compare_UnsupportedOperator_ReturnsFalse()
{
_sut.Compare(5, "==", "1,10").Should().BeFalse();
}
[Fact]
public void Compare_Between_StringNumericField_ReturnsTrue()
{
_sut.Compare("5", "between", "1,10").Should().BeTrue();
}
[Fact]
public void Compare_Between_JsonDateAtBound_ReturnsTrue()
{
var range = JsonDocument.Parse("""["2024-01-01", "2024-12-31"]""").RootElement;
_sut.Compare("2024-01-01", "between", range).Should().BeTrue();
}
[Fact]
public void SupportedOperators_ContainsBetween()
{
_sut.SupportedOperators.Should().Contain("between");
}
}