public void ConstantRuleOfTypeDoubleThatReturnsWhatIsSetAsValueStringToAndFromJson()
        {
            var rule = new ConstantRule <double> {
                Value = "99.1"
            };
            var compileResult = rule.Compile();

            compileResult.Should().BeTrue();
            _testOutputHelper.WriteLine($"{nameof(rule)}:{Environment.NewLine}" +
                                        $"{rule.ExpressionDebugView()}");

            var value = rule.Get();

            _testOutputHelper.WriteLine($"expected: 99.1 - actual: {value}");
            value.Should().Be(99.1);

            // convert to json
            var ruleJson = JsonConvert.SerializeObject(rule, new JsonConverterForRule());

            _testOutputHelper.WriteLine($"{nameof(ruleJson)}:{Environment.NewLine}{ruleJson}");
            // re-hydrate from json
            var ruleFromJson = JsonConvert.DeserializeObject <Rule>(ruleJson, new JsonConverterForRule());

            compileResult = ruleFromJson.Compile();
            compileResult.Should().BeTrue();
            _testOutputHelper.WriteLine($"{nameof(ruleFromJson)}:{Environment.NewLine}" +
                                        $"{ruleFromJson.ExpressionDebugView()}");

            value = ((ConstantRule <double>)ruleFromJson).Get();
            _testOutputHelper.WriteLine($"{nameof(ruleFromJson)}.... expected: 99.1 - actual: {value}");
            value.Should().Be(99.1);
        }
        public void ConstantRuleOfTypeIntNullableBoolReturnsFalseToAndFromJson()
        {
            var rule = new ConstantRule <int, bool?> {
                Value = "false"
            };
            var compileResult = rule.Compile();

            compileResult.Should().BeTrue();
            _testOutputHelper.WriteLine($"{nameof(rule)}:{Environment.NewLine}" +
                                        $"{rule.ExpressionDebugView()}");

            var value = rule.Get(int.MinValue);

            value.Should().Be(false);

            // convert to json
            var ruleJson = JsonConvert.SerializeObject(rule, new JsonConverterForRule());

            _testOutputHelper.WriteLine($"{nameof(ruleJson)}:{Environment.NewLine}{ruleJson}");
            // re-hydrate from json
            var ruleFromJson   = JsonConvert.DeserializeObject <Rule>(ruleJson, new JsonConverterForRule());
            var compileResult2 = ruleFromJson.Compile();

            compileResult2.Should().BeTrue();
            _testOutputHelper.WriteLine($"{nameof(ruleFromJson)}:{Environment.NewLine}" +
                                        $"{ruleFromJson.ExpressionDebugView()}");

            var value2 = ((ConstantRule <int, bool?>)ruleFromJson).Get(int.MinValue);

            value2.Should().Be(false);
        }
        public void ConstantRuleOfTypeIntNullableBoolReturnsFalse()
        {
            var rule = new ConstantRule <int, bool?> {
                Value = "false"
            };
            var compileResult = rule.Compile();

            compileResult.Should().BeTrue();
            _testOutputHelper.WriteLine($"{nameof(rule)}:{Environment.NewLine}" +
                                        $"{rule.ExpressionDebugView()}");

            var value = rule.Get(int.MinValue);

            value.Should().Be(false);
        }
        public void ConstantRuleOfTypeDoubleThatReturnsWhatIsSetAsValueString()
        {
            var ruleReturningDouble = new ConstantRule <double> {
                Value = "99.1"
            };
            var compileResult = ruleReturningDouble.Compile();

            compileResult.Should().BeTrue();
            _testOutputHelper.WriteLine($"{nameof(ruleReturningDouble)}:{Environment.NewLine}" +
                                        $"{ruleReturningDouble.ExpressionDebugView()}");

            var value = ruleReturningDouble.Get();

            _testOutputHelper.WriteLine($"expected: 99.1 - actual: {value}");
            value.Should().Be(99.1);
        }
        public void ConstantRuleOfTypeIntThatReturns55WhenValueIsSetTo55()
        {
            var ruleReturning55 = new ConstantRule <int> {
                Value = "55"
            };
            var compileResult = ruleReturning55.Compile();

            compileResult.Should().BeTrue();
            _testOutputHelper.WriteLine($"{nameof(ruleReturning55)}:{Environment.NewLine}" +
                                        $"{ruleReturning55.ExpressionDebugView()}");

            var value = ruleReturning55.Get();

            _testOutputHelper.WriteLine($"expected: 55 - actual: {value}");
            value.Should().Be(55);
        }
        public void ConstantRuleOfTypeIntThatReturnsString()
        {
            var stringValue         = "55";
            var ruleReturningString = new ConstantRule <int, string> {
                Value = stringValue
            };
            var compileResult = ruleReturningString.Compile();

            compileResult.Should().BeTrue();
            _testOutputHelper.WriteLine($"{nameof(ruleReturningString)}:{Environment.NewLine}" +
                                        $"{ruleReturningString.ExpressionDebugView()}");

            var value = ruleReturningString.Get(int.MinValue);

            value.Should().BeOfType <string>().And.Be(stringValue);
        }