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"); } }