namespace Workflow.Tests.Condition; using System.Text.Json; using FluentAssertions; using Workflow.Domain.Expressions.Comparators; using Xunit; public class NumericComparatorTests { private readonly NumericComparator _sut = new(); [Fact] public void Compare_Equals_DecimalValues_ReturnsTrue() { _sut.Compare(10.0m, "==", 10).Should().BeTrue(); } [Fact] public void Compare_Equals_IntAndDouble_ReturnsTrue() { _sut.Compare(10, "==", 10.0).Should().BeTrue(); } [Fact] public void Compare_Equals_StringNumeric_ReturnsTrue() { _sut.Compare("100", "==", 100).Should().BeTrue(); } [Fact] public void Compare_Equals_DifferentValues_ReturnsFalse() { _sut.Compare(5, "==", 10).Should().BeFalse(); } [Fact] public void Compare_NotEquals_ReturnsTrue() { _sut.Compare(5, "!=", 10).Should().BeTrue(); } [Fact] public void Compare_NotEquals_SameValues_ReturnsFalse() { _sut.Compare(5, "!=", 5).Should().BeFalse(); } [Fact] public void Compare_GreaterThan_ReturnsTrue() { _sut.Compare(10, ">", 5).Should().BeTrue(); } [Fact] public void Compare_GreaterThan_False() { _sut.Compare(5, ">", 10).Should().BeFalse(); } [Fact] public void Compare_LessThan_ReturnsTrue() { _sut.Compare(5, "<", 10).Should().BeTrue(); } [Fact] public void Compare_GreaterThanOrEqual_Equal() { _sut.Compare(10, ">=", 10).Should().BeTrue(); } [Fact] public void Compare_LessThanOrEqual_Equal() { _sut.Compare(10, "<=", 10).Should().BeTrue(); } [Fact] public void Compare_NonNumericField_ReturnsFalse() { _sut.Compare("hello", ">", 5).Should().BeFalse(); } [Fact] public void Compare_NonNumericCondition_ReturnsFalse() { _sut.Compare(10, ">", "abc").Should().BeFalse(); } [Fact] public void Compare_NullField_ReturnsFalse() { _sut.Compare(null, "==", 5).Should().BeFalse(); } [Fact] public void Compare_UnsupportedOperator_ReturnsFalse() { _sut.Compare(10, "contains", 5).Should().BeFalse(); } [Fact] public void Compare_StringConditionValue_ParsesCorrectly() { _sut.Compare(250, ">", "100").Should().BeTrue(); } }