public void ResolveValueRefsThrowError()
        {
            AndSpecification and = new AndSpecification(
                new EqualSpecification("qwe", SpecificationValue.Single(1)),
                new LessOrEqualSpecification("qwe", SpecificationValue.Ref("qwe")));

            Dictionary <string, object> values = new Dictionary <string, object> {
                { "qwe", TimeSpan.FromDays(1) }
            };

            var exc = Assert.Throws <InvalidOperationException>(
                () => and.ResolveValueRefs(values));

            Assert.Contains("Unable to resolve value reference for qwe le ref(qwe). Value of type System.TimeSpan not supported", exc.Message);
        }
        public void ResolveValueRefs()
        {
            AndSpecification and = new AndSpecification(
                new EqualSpecification("qwe", SpecificationValue.Single(1)),
                new LessOrEqualSpecification("qwe", SpecificationValue.Ref("qwe")));

            Dictionary <string, object> values = new Dictionary <string, object> {
                { "qwe", 1 }
            };
            AndSpecification resolved = and.ResolveValueRefs(values);
            var kv = Assert.IsType <LessOrEqualSpecification>(resolved.Specifications.Last());

            Assert.False(kv.Value.IsReference);
            Assert.Equal(SpecificationValue.DataType.Int, kv.Value.ValueType);
            Assert.Equal(1, kv.Value.Values.Single());
        }
        public void ResolveValueRefsError()
        {
            SpecificationValue refValue = SpecificationValue.Ref("qwe");
            AndSpecification   and      = new AndSpecification(
                new EqualSpecification("qwe", SpecificationValue.Single(1)),
                new LessOrEqualSpecification("qwe", refValue));

            Dictionary <string, object> values = new Dictionary <string, object> {
                { "qwe", TimeSpan.FromDays(1) }
            };
            AndSpecification resolved = and.ResolveValueRefs(
                values,
                new ReferenceResolutionSettings {
                ThrowValueErrors = false
            });
            var kv = Assert.IsType <LessOrEqualSpecification>(resolved.Specifications.Last());

            Assert.True(kv.Value.IsReference);
            Assert.Same(refValue, kv.Value);
        }
        public void ResolveValueRefPartial()
        {
            AndSpecification and = new AndSpecification(
                new EqualSpecification("qwe", SpecificationValue.Single(1)),
                new LessOrEqualSpecification("qwe", SpecificationValue.Ref("qwe")));

            Dictionary <string, object> values = new Dictionary <string, object>
            {
                { "qwe", SpecificationValue.Ref("qwe2") },
            };
            ReferenceResolutionSettings settings = new ReferenceResolutionSettings();

            settings.AllowedUnresolvedValueReferenceKeys.Add("qwe2");

            AndSpecification resolved = and.ResolveValueRefs(
                values,
                settings);
            var kv = Assert.IsType <LessOrEqualSpecification>(resolved.Specifications.Last());

            Assert.True(kv.Value.IsReference);
            Assert.Equal("qwe2", kv.Value.Values.Single());
        }