public void ProjectFilterWithUpperAndLowerBoundaryReversedThrowsException()
        {
            var projector = this.BuildProjector();
            var range     = new Range {
                UpperBoundary = 9, LowerBoundary = 99
            };

            Assert.Throws <ArgumentException>(() => projector.Project(range));
        }
        public void ProjectFilterWithUpperAndLowerBoundaryReturnsIncludeWithBoundary()
        {
            var projector = this.BuildProjector();
            var range     = new Range {
                UpperBoundary = 100, LowerBoundary = 99
            };

            var result = projector.Project(range);

            Assert.AreEqual(RuleFilterType.Include, result.Type);
            Assert.AreEqual(99, result.Min);
            Assert.AreEqual(100, result.Max);
        }
        /// <summary>
        /// The project.
        /// </summary>
        /// <param name="filter">
        /// The filter.
        /// </param>
        /// <returns>
        /// The <see cref="DecimalRangeRuleFilter"/>.
        /// </returns>
        public DecimalRangeRuleFilter Project(Range filter)
        {
            if (filter == null)
            {
                return(DecimalRangeRuleFilter.None());
            }

            if (filter.LowerBoundary == null && filter.UpperBoundary == null)
            {
                return(DecimalRangeRuleFilter.None());
            }

            if (filter.LowerBoundary > filter.UpperBoundary)
            {
                throw new ArgumentException(nameof(filter));
            }

            return(new DecimalRangeRuleFilter
            {
                Min = filter.LowerBoundary,
                Max = filter.UpperBoundary,
                Type = RuleFilterType.Include
            });
        }