using DD.Persistence.Filter.Interpreter; using DD.Persistence.Filter.Models; using DD.Persistence.Filter.Models.Enumerations; using Newtonsoft.Json; namespace DD.Persistence.Test; public class TreeBuilderShould { [Fact] public void TestTreeBuilding() { //arrange var treeString = "(\"A\"==1)||(\"B\"==2)&&(\"C\"==3)||((\"D\"==4)||(\"E\"==5))&&(\"F\"==6)"; //act var root = treeString.BuildTree(); //assert Assert.NotNull(root); var expectedRoot = JsonConvert.SerializeObject(new TVertex( OperationEnum.And, new TVertex( OperationEnum.And, new TVertex( OperationEnum.Or, new TLeaf(OperationEnum.Equal, "A", 1), new TLeaf(OperationEnum.Equal, "B", 2) ), new TVertex( OperationEnum.Or, new TLeaf(OperationEnum.Equal, "C", 3), new TVertex( OperationEnum.Or, new TLeaf(OperationEnum.Equal, "D", 4), new TLeaf(OperationEnum.Equal, "E", 5) ) ) ), new TLeaf(OperationEnum.Equal, "F", 6) )); var actualRoot = JsonConvert.SerializeObject(root); Assert.Equal(expectedRoot, actualRoot); } [Fact] public void TestTreeOperations() { //arrange var treeString = "(\"A\"==1)||(\"B\"!=1)||(\"C\">1)||(\"D\">=1)||(\"E\"<1)||(\"F\"<=1)"; //act var root = treeString.BuildTree(); //assert Assert.NotNull(root); var expectedRoot = JsonConvert.SerializeObject(new TVertex( OperationEnum.Or, new TVertex( OperationEnum.Or, new TVertex( OperationEnum.Or, new TLeaf(OperationEnum.Equal, "A", 1), new TLeaf(OperationEnum.NotEqual, "B", 1) ), new TVertex( OperationEnum.Or, new TLeaf(OperationEnum.Greate, "C", 1), new TLeaf(OperationEnum.GreateOrEqual, "D", 1) ) ), new TVertex( OperationEnum.Or, new TLeaf(OperationEnum.Less, "E", 1), new TLeaf(OperationEnum.LessOrEqual, "F", 1) ) )); var actualRoot = JsonConvert.SerializeObject(root); Assert.Equal(expectedRoot, actualRoot); } [Fact] public void TestLeafValues() { //arrange var treeString = "(\"A\"==1.2345)||(\"B\"==12345)||(\"C\"==\"12345\")"; //act var root = treeString.BuildTree(); //assert Assert.NotNull(root); var expectedRoot = JsonConvert.SerializeObject(new TVertex( OperationEnum.Or, new TVertex( OperationEnum.Or, new TLeaf(OperationEnum.Equal, "A", 1.2345), new TLeaf(OperationEnum.Equal, "B", 12345) ), new TLeaf(OperationEnum.Equal, "C", "12345") )); var actualRoot = JsonConvert.SerializeObject(root); Assert.Equal(expectedRoot, actualRoot); } }